解决方程的非线性系统
使用基于问题的方法,首先定义X
作为两个元素优化变量。
x = Optimvar('X',2);
将第一个等式创建为优化平等表达式。
eq1 = exp( - -( - ( - (x(1)+ x(2)))))== x(2)*(1 + x(1)^ 2);
类似地,将第二方程作为优化平等表达式创建。
eq2 = x(1)* cos(x(2))+ x(2)* sin(x(1))== 1/2;
创建一个等式问题,并将方程放在问题中。
prob = eqnproblem;prob.equations.eq1 = EQ1;prob.equations.eq2 = EQ2;
回顾问题。
展示(prob)
公式问题:解决:x eq1:exp( - -( - ( - (x(1)+ x(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] =求解(prob,x0)
使用FSOLVE解决问题。等式解决。FSOLVE完成,因为通过函数容差的值测量,功能值的向量接近零,并且如梯度测量的问题会常规。
sol =结构与字段:X:[2x1双]
fval =结构与字段:EQ1:-2.4070E-07 EQ2:-3.8255E-08
ExitFlag = Aquationsolved.
查看解决方案点。
disp(sol.x)
0.3532 0.6061
FCN2Optimexpr.
如果您的公式函数不由基本函数组成,则必须将功能转换为使用优化表达式FCN2Optimexpr.
。对于本示例:
ls1 = fcn2optimexpr(@(x)exp( - -( - ( - (x(1)+ x(2))))),x);eq1 = ls1 == x(2)*(1 + x(1)^ 2);ls2 = fcn2optimexpr(@(x)x(1)* cos(x(2))+ x(2)* sin(x(1)),x);eq2 = ls2 == 1/2;