2012-05-29 30 views
4

我注意到在評估向量時,對我來說,一個不可預測的行爲是什麼。它看起來與直接在循環中建立索引完全不同。任何人都可以給我一些幫助嗎? 我知道它是如何使每個操作可能是解釋,所以我需要了解如何 感謝尋找它matlab:評估向量時的錯誤/精度

感謝提前告知一些關鍵

例如:

x=[0.05:.01:3]; 
n=size(x,2); 
y1 = (8*x-1)/(x)-(exp(x)); 

for i=1:n 
    y2(i)=(8*x(i)-1)/(x(i))-(exp(x(i))); 
end 

a1=[x;y1]; 
a2=[x;y2]; 

plot(x,y1, 'red') 
hold on 
plot(x,y2, 'blue') 

這裏劇情: http://i.stack.imgur.com/qAHD6.jpg

結果:

a2: 
0.05 -13.0513 
0.06 -9.7285 
0.07 -7.3582 
0.08 -5.5833 
0.09 -4.2053 
0.10 -3.1052 
0.11 -2.2072 
0.12 -1.4608 
0.13 -0.8311 
0.14 -0.2931 
0.15 0.1715 
0.16 0.5765 




a1: 
0.05 6.4497 
0.06 6.4391 
0.07 6.4284 
0.08 6.4177 
0.09 6.4068 
0.10 6.3958 
0.11 6.3847 
0.12 6.3734 
0.13 6.3621 
0.14 6.3507 
0.15 6.3391 
0.16 6.3274 
+1

+1非常好問的第一個問題。你給了一個小的可重複的代碼片段,並顯示你的結果。 –

回答

6

你想要的是:

y1 = (8*x-1)./(x)-(exp(x)); % note the ./ 

代替:

y1 = (8*x-1)/(x)-(exp(x)); 

作爲一個側面說明,您可以鍵入help /看到你原來的首個聲明是真的這樣做。它實際上在做(x'\(8*x-1)')'(注意反斜槓)。

+0

非常感謝克里斯。 我真的被這件簡單的事情困住了。 我沒有意識到,企圖分裂矩陣MATLAB只是做A * B^-1,其實那是非常有用的:) 反正即時消息感到驚訝,數值越高的結果非常相似 再次感謝 再見 – myradio

+1

數值越高'exp()'這個詞主導了你的結果,所以第一學期的重要性減少了。請記住,B \ A'比'A * inv(B)'稍微普遍一些,前者在某些情況下給出了一些有意義的地方,其中'B'不能被反轉。 –

3

錯誤出現在y1的第一個向量計算中。問題出在你除以x的部分。矢量/矩陣分割不同於單個單元分割,並將返回矢量/矩陣結果。

解決方案是對這些向量進行逐個元素的劃分。此向量記號快捷方式是使用./(點分):

y3 = (8*x-1)./(x)-(exp(x)); 

現在你會發現,Y2和Y3是相同的。