2017-01-23 6 views
-1

iには合計8つの変数がある2つの方程式が与えられましたが、6つが定義されます。 6つの変数のリストは毎回同じままではありません。変化している未知の変数を解決したい。私はfsolveを試して使用するように言われました。複数の変数を2つの方程式で解く方法定義済み変数のリスト

方程式は以下のとおりです。Rの変数とすべてのthetasが同様にされている

0=Rao*cos(theta2)+Rab*cos(theta3)+Rbc*cos(theta4)-Rco*cos(theta1); 
0=Rao*cos(theta2)+Rab*cos(theta3)+Rbc*cos(theta4)-Rco*cos(theta1)]; 

+1

のようになりますか? – Suever

+0

私はユーザーに既知の変数を入力させ、未知の空白を残して2つの方程式を関数に入れ、その関数をfsolverに呼び出しましたが、未定義の関数または変数がエラーになりました。また、fsolveの使い方やスクリプトの起動方法を完全にはわからない –

+1

2つの方程式は私のものと同じように見えます(2番目の式の最後にある ']を除く)? – Justin

答えて

0

Mathworksのドキュメント(https://www.mathworks.com/help/optim/ug/fsolve.html)によると、fsolveには、少なくとも2つの引数:funx0が必要です。

funは、解で評価されたときにゼロのベクトルを生成する関数です。

x0は、ソリューションの初期推測値です。言い換えれば

、あなたの場合は、その後

x = fsolve(fun,x0) 

fun(x) = 0 

場合、funx何ですか?

あなたの質問から、xは正確にはわかりませんが、2つの未知の変数を含む2 x 1のベクトルでなければなりません。 (この答えのために、私はあなたがあなたの質問を更新した場合RaoRcoや編集のために解決したいと仮定します。)

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]); 

で表現され、fsolveRaoの値を見つけるしようとしますと、 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 
関連する問題