求解非线性方程组
使用基于问题的方法,首先定义x
作为一个二元优化变量。
x = optimvar (“x”2);
创建第一个方程作为一个优化等式表达式。
eq1 = exp (exp (- x (x (1) + (2)))) = = x (2) * (1 + x (1) ^ 2);
类似地,将第二个方程创建为优化等式表达式。
方程2 = x(1)*cos(x(2)) + x(2)*sin(x(1)) = 1/2;
创建一个方程问题,并将方程放入问题中。
概率= eqnproblem;prob.Equations。eq1 = eq1;prob.Equations。eq2 = eq2;
回顾这个问题。
显示(概率)
EquationProblem:解:x eq1: exp ((exp ((- x (x (1) + (2 )))))) == ( x (2) * (1 + x (1) ^ 2)) eq2: ((x(1)。* cos (x (2))) + (x(2)。* sin (x (1)))) = = 0.5
从要点出发解决问题(0,0)
.对于基于问题的方法,将初始点指定为结构,变量名作为结构的字段。对于这个问题,只有一个变量,x
.
x0。x=[0 0]; [sol,fval,exitflag] = solve(prob,x0)
用fsolve解决问题。方程解决。Fsolve完成了,因为函数值的向量接近零(通过函数容差值测量),并且问题出现了规则(通过梯度测量)。
索尔=结构体字段:x (2 x1双):
fval =结构体字段:e1: -2.4070e-07 e2: -3.8255e-08
exitflag = EquationSolved
查看解决方案点。
disp (sol.x)
0.3532 - 0.6061
fcn2optimexpr
如果你的方程函数不是由初等函数组成的,你必须使用fcn2optimexpr
.对于现在的例子:
ls1 = fcn2optimexpr (@ (x) exp (exp (- x (x (1) + (2)))), x);方程1 = ls1 == x(2)*(1 + x(1)^2);ls2 = fcn2optimexpr (@ (x) x (1) * cos (x (2)) + x (2) * sin (x (1)), x);eq = ls2 == 1/2;