接近Rosenbrock方法的问题

时间:2015-04-27 16:05:13

标签: matlab math

所以我有一个分配,我必须做一些...与代码斗争,以便我可以进一步了解它是如何工作/什么是方法的好参数。关于我在网上找到的所有内容都是关于rosenbrock功能的,我现在几乎可以肯定它与rosenbrock方法不同。

我刚才发现了这个问题,这与我的尝试非常相似(没有太大成功)

While loop Vectorization

到目前为止我的代码是:

function [T] = rosenbrock(f,xx0,maxLoop,error,d,a,b)
delta_F=10;
x0=xx0;
y0 = f(x0);
i=0;
vF=[];

while (delta_F > error) && (i < maxLoop)      
x1 = x0+d;
y0 = f(x0);
y1 = f(x1);
if y1 < y0
    x0= x1;
    d = a*d;
else
    vF = [vF;x1];
    d = -b*d;
end
i = i + 1;
if length(vF) > 1
    ultm = vF(end);
    pultm = vF(end-1);
    delta_F = abs(ultm+pultm)/2;
end
end

T=vF;

我用另一个脚本称之为:

x0=1;
error=1e-3;
maxLoop=500;
fun=@(x)(sin(x)); 
[S]=rosenbrock(fun, x0, maxLoop,error,1,2,-1.5)

它给了我荒谬的数字,如10 ^ 88等。问题的一部分是我真的不知道应该如何处理这个问题,我发现给我们的理论数量很少,并且不知道如何区分好结果和坏结果

即使我得到了...用这个方法的东西(到目前为止的想法是存储使用的点,以后我可以用它们做点什么),但我也不确定要做什么,比如,绘制到函数中,缺少事物。

重点是,代码不起作用,我不明白为什么,因为据我所知,它正在做应该做的事情,并且不知道接下来该做什么。我可以进一步解释,但它是用我自己的话来说,因为维基百科有一篇很糟糕的文章,正如我所说的其他一切都是关于rosenbrock函数,它似乎相似但不完全相同。

1 个答案:

答案 0 :(得分:0)

我在您的代码中发现了两个错误(在您复制的代码中):

  1. 您想要计算名为delta_F的步长。 &#34;德尔塔&#39; S&#34;总是计算为两个值的差值:

    delta_F = abs(ultm-pultm)/2;
    
  2. 您的函数调用错误。将&#34; b&#34; -value替换为0.5而不是-1.5。