3

このコードの問題は何ですか?

function F = Final_Project_2(x)
 F = [(1/x(1)) + (1/x(2))- (2/(7*x(3)));
       (x(3)+2*x(4))*(15*x(2))/((x(1)+x(2))*x(3)-0.7/x(3))-14;
       (x(3)*((0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)))/(x(3)+(0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)) -20;
       ((0.576*x(2)*x(3)/(x(1)+x(2))*x(3)) - 0.27*x(4)/x(3))-100];

ワークスペースのコードは次のとおりです。

x0 = [1; 1; 1; 1];           % Make a starting guess at the solution
options=optimset('Display','iter');   % Option to display output
[x,fval] = fsolve(@Final_Project_2,x0,options)  % Call optimizer
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.

Error in ==> Final_Project_2 at 5
F = [(1/x(1)) + (1/x(2))- (2/(7*x(3)));

Error in ==> fsolve at 254
            fuser = feval(funfcn{3},x,varargin{:});

Caused by:
    Failure in initial user-supplied objective function evaluation. FSOLVE cannot
    continue.
4

1 に答える 1

3

Matlabは、次の配列の連結に失敗します。

F = [(1/x(1)) + (1/x(2))- (2/(7*x(3)));
       (x(3)+2*x(4))*(15*x(2))/((x(1)+x(2))*x(3)-0.7/x(3))-14;
       (x(3)*((0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)))/(x(3)+(0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)) -20;
       ((0.576*x(2)*x(3)/(x(1)+x(2))*x(3)) - 0.27*x(4)/x(3))-100];

問題は3行目で発生し、最後の行は、-20計算している項の一部ではなく、ベクトル内の単一の値として解釈されます。これを示すために、この配列の各行を括弧で囲み、結果を確認できます。

x = [1 2 3 4]; % just for demonstration purpuse

[(1/x(1)) + (1/x(2))- (2/(7*x(3)));]
[       (x(3)+2*x(4))*(15*x(2))/((x(1)+x(2))*x(3)-0.7/x(3))-14;]
[       (x(3)*((0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)))/(x(3)+(0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)) - 20;]
[       ((0.576*x(2)*x(3)/(x(1)+x(2))*x(3)) - 0.27*x(4)/x(3))-100]

これにより、

ans =
    1.4048

ans =
   23.6426

ans =
    0.7843  -20.0000

ans =
  -96.9040

3行目の1x2ベクトルに注意してください。

問題を解決するには、計算にスペースを入れることに重点を置くか(つまり、すべてのスペースを省略するか、例- 20ではなく書く-20)、1つの用語に属するすべてのものを括弧で囲みます。

于 2012-12-19T07:56:40.833 に答える