guoshandong 发表于 2011-4-27 10:26:56

二次插值最优程序

这是编程得二次插值求最优的程序
function =opt_quadratic(f,x,tolx,tolfun,maxiter)
% 用二次插值求f(x)最优解
% f:函数名
% x:给出搜索区间
% tolx:最优值点间的误差阈值
% tolfun:函数的误差阈值
% maxiter:最大迭代次数
% xo:最优化点值
% fo:函数在点xo处的函数值
% 根据输入确定三点的初始值,并求出对应的函数值
if length(x)>2
    x012=x(1:3);
else
    if length(x)==2
    a=x(1);
    b=x(2);
    else
    a=x-10;
    b=x+10;
    end
x012=;
end
f012=f(x012);
% 初始化三点值
x0=x012(1);
x1=x012(2);
x2=x012(3);
f0=f012(1);
f1=f012(2);
f2=f012(3);
% 求出插值二项式的取最小值处的x3以及相应的最小值f3
nd=*';
x3=nd(1)/2/nd(2);
f3=feval(f,x3);
% 判断是否迭代终止
if maxiter<=0||abs(x3-x1)<tolx||abs(f3-f1)<tolfun
    xo=x3;
    yo=f3;
elseif x3<x1
    if f3<f1
      x012=;
      f012=;
    else
      x012=;
      f012=;
    end
else
    if f3<=f1
    x012=;
    f012=;
    else
    x012=;
    f012=;
    end
% 进行新一轮的迭代
=opt_quadratic(f,x012,tolx,tolfun,maxiter-1);
end


调用程序如下:
f1502=inline('(x.*x-2).^2/2-1','x');
a=0;
b=5;
tolx=1e-5;
tolfun=1e-8;
maxiter=100;
=opt_quadratic(f1502,,tolx,tolfun,maxiter)

为什么老是出现如下错误:
Error in ==> opt_quadratic at 11
if length(x)>2
??? Output argument "xo" (and maybe others) not assigned during call to "D:\Program
Files\MATLAB\R2010b\bin\最优化计算\opt_quadratic.m>opt_quadratic".
Error in ==> Untitled at 7
=opt_quadratic(f1502,,tolx,tolfun,maxiter)

活耗子 发表于 2011-4-27 13:29:25

你在程序中没有把要输出的结果赋值给xo,yo,或者你的判断条件可能冲突,输出不了xo,yo
if maxiter<=0||abs(x3-x1)<tolx||abs(f3-f1)<tolfun,

guoshandong 发表于 2011-4-29 18:10:04

2# 活耗子
单纯看这个错误的信息的话,我也晓得,就是这个看来看去,算法一点问题没有,不晓得改哪里?

messenger 发表于 2011-5-1 16:54:45

你确定“算法一点问题没有”?

sxgywjj2009 发表于 2011-5-13 17:04:19

是你调用的时候跟主函数不一致造成的。fun=inline('(x.*x-2).^2/2-1','x');
a=0;
b=5;
x=;
tolx=1e-5;
tolfun=1e-8;
maxiter=100;
=opt_quadratic(fun,x,tolx,tolfun,maxiter)
页: [1]
查看完整版本: 二次插值最优程序