求解MATLAB中非线性方程系统的错误



此代码有什么问题?

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.

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

问题发生在第三行中,其中最后一个-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

请注意第三行中的1x2矢量。

要解决您的问题,要么更强调将空格放置在计算中(即省略所有空间,要么在示例中写入- 20而不是-20),或者将所有属于一个术语属于括号中的术语放置在括号中。

最新更新