Mathworksのドキュメント(https://www.mathworks.com/help/optim/ug/fsolve.html)によると、fsolve
には、少なくとも2つの引数:fun
とx0
が必要です。
fun
は、解で評価されたときにゼロのベクトルを生成する関数です。
x0
は、ソリューションの初期推測値です。言い換えれば
、あなたの場合は、その後
x = fsolve(fun,x0)
fun(x) = 0
場合、fun
とx
何ですか?
あなたの質問から、x
は正確にはわかりませんが、2つの未知の変数を含む2 x 1のベクトルでなければなりません。 (この答えのために、私はあなたがあなたの質問を更新した場合Rao
とRco
や編集のために解決したいと仮定します。)
fun
は、あなたがリストされている方程式によって決定されます。それらは既に方程式の片側で0の形式になっています。
また、あなたの質問から、あなたの2つの方程式は同一であるように見えます。つまり、fsolve
は解を見つけることができますが、ユニークではありません。私の最高の推測では、あなたが
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
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);
とxの構成要素にあなたの変数名を変換し、解決するための関数を定義することができ、あなたがそう
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);
を解決するためのものということです
しかし、待ってください。なぜ8つの変数全てについてMATLABが解決するのですか?そのうち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の使い方やスクリプトの起動方法を完全にはわからない –
2つの方程式は私のものと同じように見えます(2番目の式の最後にある ']を除く)? – Justin