Как решить переопределенную нелинейную систему уравнений, используя Matlab
У меня есть следующий код в 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. Он вычислил только начальную точку.
Есть идеи?
Я надеюсь, что кто-нибудь может мне помочь. Заранее большое спасибо.