抛物线逼近法代码
function [x,f_x]=parabola(f,x1,x2,x3)
eps = 0.0001;
i=0;
f=@(x) x.^ 3 - x.^2 - 30*x; %创建题目要求匿名函数,方便使用
while 1
i=i+1;
f1=f(x1); f2=f(x2); f3=f(x3);
a=2*(f1*(x2-x3)+f2*(x3-x1)+f3*(x1-x2));
b=(f1*(x2^2-x3^2)+f2*(x3^2-x1^2)+f3*(x1^2-x2^2));
xp=b/a; %计算极小值点xp
fp=f(xp);
if abs(x2-xp)<eps %小于精度则跳出
x=xp;
f_x=fp;
break;
else %迭代过程
if fp>f2
if xp>x2
x3=xp;
else
x1=xp;
end
else
if xp>x2
x1=x2;
x2=xp;
else
x3=x2;
x2=xp;
end
end
end
end
disp(['抛物线逼近法最优解: x = ',num2str(x)]);
disp(['此时: f(x) = ',num2str(f_x)]) %使用disp函数和num2str()进行输出