function [xo,fo]=opt_quadratic(f,x,TolX,TolFun,MaxIter ) ) ) ) ) ) )。
用%三点二次插值法求f(x )的最优解
%输出: xo是取最小值的点fo成为最小的函数值
if nargin 5 %在函数内实际得到输入的变量个数
MaxIter=100; %最大迭代次数默认为100
结束
if nargin 4
TolFun=1e-8; %函数值的误差为1e-8
结束
if nargin 3
TolX=1e-5; %自变量距离误差
结束
根据输入确定3点的初始值,求出对应的函数值
if长度(x ) 2
x012=x(1:3;
else
if长度(x )==2
a=x(1;
b=x(2;
else
a=x-10; b=x 10;
结束
x012=[a(ab )/2 b];
结束
f012=f(x012;
将三点的值初始化
x0=x012(1;
x1=x012(2;
x2=x012(3;
f0=f012(1;
F1=F012(2;
F2=F012(3;
求出取插值二项式最小值时的x3和与其对应的最小值f3
nd=[ F0-F2 f1-f0f2- f1 ] * [ x1 * x1x2* x2x0* x0; ) x1 x2 x0] ) );
x3=nd(1)/2/nd(2) 2;
f3=feval(f,x3 );
判断是否停止反复
ifmaxiter=0|ABS(x3-x1 ) tolx|ABS ) F3-F1 ) TolFun
xo=x3;
fo=f3;
else
根据求出多项式值和区间中的3点的值的大小比较,决定对应的新的3点
1个if x3 x1
if f3 f1
x012=[x0 x3 x1];
f012=[f0 f3 f1];
else
x012=[x3 x1 x2];
f012=[f3 f1 f2];
结束
else
if f3=f1
x012=[x1 x3 x2];
f012=[f1 f3 f2];
else
x012=[x0 x1 x3];
f012=[f0 f1 f3];
结束
结束
进行新的反复
[xo,fo]=opt_quadratic(f,x012,TolX,TolFun,MaxIter-1 );
结束
请说明这个程序。 基本上我明白了,但为什么怎么执行都错了。 你经常出现吗? subscriptindicesmusteitherberealpositiveintegersorlogicals。
Error in==Opt_Quadratic at 25
f012=f(x012; 以及f3=feval(f,x3 ); Error using==feval
argumentmustcontainastringorfunction _ handle。
有人能帮我吗?loveliness: