根據Mathworks文檔(https://www.mathworks.com/help/optim/ug/fsolve.html),fsolve
需要至少兩個參數:fun
和x0
。
fun
是一個函數,當在解中計算時產生零向量。
x0
是解決方案的初始猜測。
換句話說,如果
x = fsolve(fun,x0)
然後
fun(x) = 0
在你的情況,什麼是fun
和x
?
從你的問題中,我不清楚x
是什麼,但它應該是一個2×1的矢量包含兩個未知的變量。 (對於這個答案的目的,我會假設你要解決Rao
和Rco
和編輯,如果你更新你的問題。)
fun
是根據你列出的公式確定。它們已經在等式一邊爲0的格式。
此外,從你的問題,你的兩個方程似乎是相同的,這意味着fsolve
將找到一個解決方案,但它不會是唯一的。我最好的猜測是,你的意思是要解決
0=Rao*cos(theta2)+Rab*cos(theta3)+Rbc*cos(theta4)-Rco*cos(theta1);
0=Rao*sin(theta2)+Rab*sin(theta3)+Rbc*sin(theta4)-Rco*sin(theta1);
所以,你可以定義一個函數
function y = full_function(x)
y = [x(1)*cos(x(6))+x(2)*cos(x(7))+x(3)*cos(x(8))-x(4)*cos(x(5));
x(1)*sin(x(6))+x(2)*sin(x(7))+x(3)*sin(x(8))-x(4)*sin(x(5))];
end
轉換您的變量名稱爲x的組件和解決fsolve
功能
x0 = zero(8,1); % Use a different initial guess if you know more about the problem
x_full = fsolve(@full_function,x0);
Rao = x_full(1); Rab = x_full(2);
Rbc = x_full(3); Rco = x_full(4);
theta1 = x_full(5); theta2 = x_full(6);
theta3 = x_full(7); theta4 = x_full(8);
但是等一下。爲什麼MATLAB解決所有8個變量?我們要指定其中的6個,並解決2.
在這種情況下,您可以根據full_function
(僅佔用2個參數)定義一個新函數。
在這裏,我定義這裏,已知參數填入一個功能,但未知參數在新函數的參數來表示現在
constrained_function = @(x) full_function([x(1); Rab; Rbc; x(2); theta1; theta2; theta3; theta4]);
,fsolve
只會試圖找到值Rao
和Rco
。
所以,完整的代碼應該看起來像
function q41811094_fsolve_fixed_params()
% Unknown variables - Enter initial guess
Rao = 1; Rco = 1;
% Known variables - Enter known values
Rab = 1; Rbc = 1;
theta1 = 0; theta2 = 0;
theta3 = 0; theta4 = 0;
% Package guesses for unknown variables
x0 = [Rao; Rco];
% Define new function with 6 defined values
constrained_function = @(x) full_function([x(1); Rab; Rbc; x(2); theta1; theta2; theta3; theta4]);
% Use fsolve to find 2 remaining values
x_constrained = fsolve(constrained_function, x0);
% Unpackage variable values
Rao = x_constrained(1)
Rco = x_constrained(2)
end
% Define function for all 8 parameters
function y = full_function(x)
y = [x(1)*cos(x(6))+x(2)*cos(x(7))+x(3)*cos(x(8))-x(4)*cos(x(5));
x(1)*sin(x(6))+x(2)*sin(x(7))+x(3)*sin(x(8))-x(4)*sin(x(5))];
end
你嘗試過什麼到目前爲止? – Suever
我讓用戶輸入已知變量並留下未知空白,然後將2個方程式放入一個函數中,並將函數調用到fsolver中,但得到錯誤的未定義函數或變量。即時通訊也不完全確定如何使用fsolve或開始爲腳本 –
這兩個方程對我來說看起來是一樣的,(除了在第二個末尾的']')? – Justin