2013-02-16 73 views
-2

我已经为牛顿算法编写了下面的代码,通过使用两个不同的起点来最小化错误。它们不应该在误差函数等值线的椭圆的主轴上。使用Matlab的牛顿法

R=[0.5 -0.25;-0.25 0.5]; 
P=[0;-0.866]; 
Pt=transpose(P); 
Rinv=[2.67 1.33;1.33 2.67]; 
M=6; %number of iterations 
mu=1/2; %step size 
for k=1:M 
    W(1)=1.16; %initial weight value 
    W(2)=2.32; 
    G(k)=2*R*W(k)-2*P; 
end 
for k=2:M 
    W(1)=1.16; 
    W(2)=2.32; 
    W(k+1)=W(k)-mu*Rinv*G(k); 
end 
for k=1:M 
    Wtrans(k)=trans(W(k)); 
    E(k)=Wtrans(k)*R*W(k)-2*Pt*W(k)+2; % error function. 
end 
plot(E(k)); 

有人可以让我让这个代码有什么问题吗?我无法策划它!

回答

0

当你到达你的代码的最后一行,k是不是1:像你米认为,只是简单标量值M.待办事项图(E),而不是图(E(K))

+0

我试着..我仍然无法绘制它! – Renee 2013-02-16 04:18:49

+0

我运行了你的代码。在您尝试绘制之前,您没有提到您有错误。第10行(G(k)= 2 * R * W(k)-2 * P)失败:R * W(k)是一个2x2矩阵,您试图减去2x1向量。尺寸不一致。代码中还有更多错误(例如,即使使用该值,也不会为k> 2定义W(k))。您必须逐个解决您的错误,理解来自MATLAB的错误消息,并使用whos来打印您操作的所有变量的尺寸以了解错误。但是当你到达最后,你会想要绘制(E),而不是绘制(E(k))。 – Lolo 2013-02-16 05:35:51

+0

我建议你接受这个答案,如果你无法解决我提到的这些错误之一,你会打开关于那个特定错误的另一个问题,包括你从MATLAB获得的错误信息,以及错误信息为什么没有意义您。 – Lolo 2013-02-16 05:37:23