如何用Matlab求解一个超定的非线性方程组

时间:2016-09-16 13:15:35

标签: matlab equation-solving nonlinear-functions nonlinear-optimization

我在Matlab中有以下代码:

function y = myfun(x)

        % Set Variables
        Svl=1;
        B=54.433;
        F=4379.250;
        T=21.398;
        V=53363.500;

        % Computing Prefactors with set variables
        Zahl1=-B+13.2855-6.10101*Svl;
        Zahl2=-F-13938.9+5073.43*Svl;
        Zahl3=-V-599882+229920*Svl;
        Zahl4=-T-8.2379-0.964978*Svl;
        Pl1=2.99983 -0.438557 *Svl;
        Pl2=850.573-294663*Svl;
        Pl3=31769.1-12055.5*Svl;
        Pl4=1.80671 -0.256667 *Svl;
        vs1=0.0255558*Svl -0.0498925;
        vs2=20.0274 -8.33864*Svl;
        vs3=1061.95-415.967*Svl;
        vs4=-0.00980451+0.0119915*Svl;
        Plvs1=-0.00215169;
        Plvs2=-1.20681+0.465007*Svl;
        Plvs3=-56.1611+21.7506*Svl;
        Plvs4=-0.00162471;

        % Equations
        y = zeros(4,1);
        y(1) = Zahl1+Pl1*x(1)+vs1*x(2)+Plvs1*x(1)*x(2);
        y(2) = Zahl2+Pl2*x(1)+vs2*x(2)+Plvs2*x(1)*x(2);
        y(3) = Zahl3+Pl3*x(1)+vs3*x(2)+Plvs3*x(1)*x(2);
        y(4) = Zahl4+Pl4*x(1)+vs4*x(2)+Plvs4*x(1)*x(2);

我有一组四个非线性方程y(),只有两个未知数x(1)和x(2)。 Zahlx,Plx,vsx和Plvsx是已知的,只有在此代码之前计算的前因子。

如何在Matlab中求解上述超定非线性方程组?

我用最少的声音尝试了它:

x0 = [20,100];
lb = [20,100];
ub = [40,500];
[x,resnorm,res,eflag,output1] = lsqnonlin(@myfun,x0, lb, ub); % Invoke optimizer

x(1)
x(2)

但结果没有任何意义。

我得到以下结果:

Initial point is a local minimum.

Optimization completed because the size of the gradient at the initial point 
is less than the default value of the function tolerance.

<stopping criteria details>
%x(1)
ans =
    20 
%x(2)
ans =
   100

但x(1)应接近40且x(2)接近500。 他只计算了起点。

有什么想法吗?

我希望有人可以帮助我。非常感谢你提前。

0 个答案:

没有答案