|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
我想编写一个牛顿法求无约束问题的最小值问题。在以下程序中,虽然最开始时我取x1、x2为syms型变量,但是每次迭代时X1、X2都是确定的数值,那么a、b、c、d、e、f应该都是确定的数值,而不再是syms型数据了,但为什么运行后总是提示出现“>”的行有错误,错误是"Function 'gt' is not defined for values of class 'sym'"。要如何修改才能得到正确答案呢?
clc;
clear;
syms x1 x2;
x=[x1 x2];
t=0;
X0=[0;1];
y=(x1-1)^2+x2^2;
e=0.001;
for n=1:200
a=subs(diff(y,x1),x,X0);%y对x1求一阶导数
b=subs(diff(y,x2),x,X0);%y对x2求一阶导数
c=subs(diff(y,x1,2),x,X0);%y对x1求二阶导数
d=subs(diff(y,x2,2),x,X0);%y对x2求二阶导数
e=subs(diff(diff(y,x1),x2),x,X0);%求y对x1、x2的偏导数
f=subs(diff(diff(y,x2),x1),x,X0);%求y对x1、x2的偏导数
yj=[a;b];%梯度
h=inv([c e;f d]);%求逆
X1=X0-h*yj;%更新X的值
X2=X1-X0;
if X2(1)>X2(2)
minX2=X2(2);
else
minX2=X2(1);
end
if minX2>e
X0=X1;
t=t+1;
else
break;
end
end
X0
y=subs(y,x,X0)
t
谢谢大家的帮助 |
|