syms x; %定义
f(x)=x^3-3*x+2; %目标函数
a1=0; a2=2; a3=3; %插值区间
k=0;
f1=subs(f,x,a1);%得到常量的函数值
f2=subs(f,x,a2);
f3=subs(f,x,a3);
while (1)
k = k+1;
p = a2;
C1= (a2-a3)*f1+(a3-a1)*f2+(a1-a2)*f3;
ap= 0.5*((a2^2-a3^2)*f1+(a3^2-a1^2)*f2+(a1^2-a2^2)*f3)/C1;
fp=f(ap);
if(abs(double(a2)-double(ap))<=0.05)%将a2,ap转换为数值型再取绝对值
break;
end
if ap>a2
if f2>=fp
a1=a2;
f1=f2;
a2=ap;
f2=fp;
else
a3=ap;
f3=fp;
end
else
if f2>=fp
a3=a2;
f3=f2;
a2=ap;
f2=fp;
else
a1=ap;
f1=fp;
end
end
end
三点二次插值的matlab代码实现
最新推荐文章于 2022-11-16 22:00:11 发布