matlab+ecc,matlab的最基本问题:搞不清为什么会多出一个输出

我利用二次差值来求一个目标函数的最优解。求解的程序没有什么问题,但就是最后输出地时候会多输出出一个ans:,请大家帮我看看是什么原因。多谢了。

下面是定义的目标函数:

function y=fun01(x)

y = x^4 - 5*x^3 - 4*x^2 - 6*x + 60 ;

下面是差值的主程序:

%以为搜索中的二次插值法

%x1,x2,x3,h,p分别是函数y=f(x)单谷区间中的变量,并且有 x1 < x2 < x3 , 且 f(x1) > f(x2) < f(x3)。

%h 是搜索的步长,p 是差值的精度。

%所有函数在极值处都可以用二次函数来近似。

%利用此函数来求极值时需要在外面自行定义目标函数,并且是一函数文件的形式定义。

function [x0,y0]=eccz( fun , x1 , x2 , x3 , h , p )

y1 = feval( fun , x1 ); y2 = feval( fun , x2 ); y3 = feval( fun , x3 );

c1 = ( y3 - y1 )/( x3 - x1 ); c2 = ( ( y2 - y1 )/( x2 - x1 ) - c1 )/( x2 - x3);

xp = 0.5 * ( x1 + x3 - c1 / c2 ); yp = feval( fun , xp );

while abs(( y2 - yp )/y2) > p

if ( xp - x2 ) * h > 0

if y2 >= yp

x1 = x2; y1 = y2; x2 = xp; y2 = yp;

else

x3 = xp; y3 = yp;

end

else

if y2 >= yp

x3 = x2; y3 = y2; x2 = xp; y2 = yp;

else

x1 = xp; y1 = yp;

end

c1 = ( y3 - y1 )/( x3 - x1 ); c2 = ( ( y2 - y1 )/( x2 - x1 ) - c1 )/( x2 - x3);

xp = 0.5 * ( x1 + x3 - c1 / c2 ); yp = feval( fun , xp );

end

end

if y2 < yp

x0 = x2; y0 = y2;

else

x0 = xp; y0 = yp;

end

disp(['最优值的坐标是:' num2str(x0) ])

disp(['最优解是:' num2str(y0) ])

下面是在matlab里的输出结果:

>> eccz('fun02',4,4.5,5,0.01,0.001)

最优值的坐标是:4.7111

最优解是:-1

ans =

4.7111

最后面为什么会出现一个ans啊?在我的程序里我没有找到会出现它的地方(所有语句后面都打了分号的),但是就算出现了为什么只输出了x0而没有输出y0呢?请高手指点迷津。我是matlab7,会不会是版本的问题呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值