📄 spoly2modify.m
字号:
% 二次逼近法求解函数的极小值点
%其中f()表示所求函数表达式,df()表示所求函数的导数表达式
%f和df()是由外部的M-函数提供.
x0=0; %初始点
h=1; %步长
e=0.0005; %精度要求
l=h;
f0=df(x0);
x1=x0;
x2=x0;
tic
while(df(x1)*df(x2)>0) %寻找解区间
if(f0<0)
x1=x2;
x2=x1+h;
else
x1=x2;
x2=x1-h;
end
end
y1=f(x1);
y2=f(x2);
x3=(x1+x2)/2;
y3=f(x3);
ymin=y3;
xmin=x3;
%while(1)
for i=1:100
a0=y1; %逼近二次函数q=a0+a1(x-x1)+a2(x-x1)(x-x2)
a1=(y2-y1)/(x2-x1); %可近似为导数
a2=((y3-y1)/(x3-x1)-(y2-y1)/(x2-x1))/(x3-x2); %可近似为导数
xe=(x2+x1)/2-a1/(2*a2); %目标函数的逼近点xe
ye=f(xe);
if abs(a1)<=e
break;
else
l1=abs(x1-xe);
l2=abs(x2-xe);
l3=abs(x3-xe);
if l1>l2 %取最小的区间进行下一步计算
if l1>l3
x1=x2;x2=xe;xmin=xe;x3=x3;ymin=ye; %去掉x1
else
x3=x2;x2=xe;xmin=xe;ymin=ye; %去掉x3
end
else
if l2>l3
x2=xe;xmin=xe;ymin=ye; %去掉x2
else
x3=x2;x2=xe;xmin=xe;ymin=ye; %去掉x3
end
end
y1=f(x1);y2=f(x2);y3=f(x3);
end
end
i
a1
xmin
ymin
toc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -