原程序代码
函数[ min,n]=fastest_dirction(x0,y0,eps ) ) )
%最速下降法,初始点,给出误差
%结果为收敛回答和迭代次数
syms x_1;
syms x_2;
f=(x_1-2) )4) x_1-2) )2*x_2^2) x_21 ) ^2; %计算的函数
v=[x_1,x_2];
j=Jacobian(f,v );
tidu=[subs(j ) 1、[x_1,x_2]、[x0,y0] )、subs ) j ) 2、[x_1,x_2]、[x0,y0];
temp=sqrt () tidu1) )2) tidu ) )2);
x1=x0; y1=y0;
n=0;
syms kk;
while(tempeps ) %迭代
d=-Tidu; %下降方向、负梯度方向
f1=x1kk*d(1; f2=y1kk*d(2;
ft=[subs(j ) 1、[x_1,x_2]、[f1,f2] )、subs ) j ) 2、[x_1,x_2]、[f1,f2];
phi=sqrt () ft(1) )2) ft ) )2);
lm=gold(phi,0,1,0.00001 ); 调用%近似黄金分割法,设初始搜索区间为[ 0,1 ],设eps=0.00001
x0=x1lm*d(1; y0=y1lm*d(2;
tidu=[subs(j ) 1、[x_1,x_2]、[x0,y0] )、subs ) j ) 2、[x_1,x_2]、[x0,y0];
temp=sqrt () tidu1) )2) tidu ) )2);
x1=x0; y1=y0;
n=n 1; %累计迭代次数
结束
min=[x0,y0];
%%定义近似黄金分割函数
函数lm=gold (f,a0,b0,eps ) ) )。
syms x; 格式龙; 提高%精度,定义为倍精度
syms kk;
u=A0.382*(B0-A0 );
v=A0.618*(B0-A0 );
k=0;
a=a0; b=b0;
array (k1,1 )=a; array (k1,2 )=b;
while(ABS(B-a )=eps ) ) )
fu=Subs(f,kk,u );
FV=subs(f,kk,v );
if(fu
b=v;
v=u;
u=a0.382*(B-a );
k=k 1;
else
a=u;
u=v;
v=a0.618*(B-1 );
k=k 1;
结束
array (k1,1 )=a; array (k1,2 )=b;
结束
lm=(ab )/2;
运行m文件的总是在运算。 我想没有出现循环,但我不知道哪里发生了错误。 请上帝看,告诉我