2017-04-10 184 views
-1

我正在做一項任務,要求我使用MATLAB中的trapz函數來評估積分。我相信我已經正確地編寫了代碼,但程序返回的答案是非常不正確的。我試圖找到從01e^(-x^2)的積分。MATLAB trapz函數錯誤

x = linspace(0,1,2000); 
y = zeros(1,2000); 
for iCnt = 1:2000 
    y(iCnt) = e.^(-(x(iCnt)^2)); 
end 

a = trapz(y); 
disp(a); 

此代碼返回當前

1.4929e+03 

我在做什麼錯誤?

+0

從文檔: 「* trapz(Y)返回的Y通過梯形法**中的近似積分與單元間距***」。 –

+0

@OliverCharlesworth你能詳細說明一下嗎?我閱讀文檔,但我不明白單位間距是什麼意思 – Luke

+0

你可能需要除以2000然後,呃? –

回答

1

你只是需要還可以指定x值:

x = linspace(0,1,2000); 
y = exp(-x.^2); 
a = trapz(x,y) 

a = 

    0.7468 

更多細節:

  • 首先,在MATLAB中可以使用的載體,以避免for循環執行對數組(向量)進行操作。因此,整個四行代碼

    y =零(1,2000);對於iCnt = 1:2000 y(iCnt)= exp( - (x(iCnt)^ 2)); 結束

將被翻譯成一條線:

y = exp(-x.^2) 
  • 你定義x = linspace(0,1,2000)這意味着你需要計算範圍[0 1]給定函數的積分。因此,您計算y時會出現錯誤,將其返回至範圍[1 2000],這就是爲什麼您得到了大數字的原因。

  • 此外,在MATLAB中,您應該使用exp在MATLAB中沒有函數e。另外,如果在該範圍內繪製函數,則會看到結果有意義,因爲整個頁面的面積都是1x1。

enter image description here

+0

這非常有幫助,謝謝! – Luke

+0

當然,沒問題! – NKN