2014-11-03 30 views
0

可以說我創建了一個函數Sn = LeftRiemannSum(f,left,right,N),它計算左子區域從左到右的左Riemann和,並帶有N個子域.ie:限制到無窮的左黎曼加和MATLAB的MATLAB

Sn =所有子域i = 0到N-1的和(f(xi)h)。 f是我的函數,xi = left + i h,所以輸入參數left = x0和right = xN。

設F是我的匿名函數(例如F = @(X)(X *日誌(1 + X))。

我還估計Sn的用於改變N,從N = 10〜10萬。在函數內部我有一個for循環[for i = 0:(N-1)],所以我將有無限循環。 。

我可以以某種方式傳遞給函數的 '極限' 命令?任何線索?

感謝名單!

PS:我的功能LeftRiemann薩姆的代碼的主要部分如下:

for i=0:(N-1) 
    x=x0+i.*h; 
    y=f(x); 
    A=y.*h; 
    S=S+A 
    end 
    Sn=S 
+0

如果您檢查'doc limit'並從其中一個示例開始,以嘗試處理您的實際功能,會發生什麼情況? – 2014-11-03 13:45:08

+0

你能否澄清一下你的問題是否與符號數學工具箱的使用有關? – gire 2014-11-03 14:09:18

回答

0

如果N -> inf黎曼總和的值將是在時間間隔內的函數的積分[左,右] 。

一個可以引入一個檢查這樣的:

function Sn = LeftRiemannSum(f, left, right, N) 

if isinf(N) 
    Sn = exact integral of the function f in the interval [left, right] 
    return 
end 

% // Rest of the code 

這裏的挑戰是如何計算的f解析積分。除非您使用符號數學工具箱,否則Matlab算法的所有結果都將是近似值。

既然你不能真正運行你的循環直到無窮大,我看到兩個選項:

  1. 我將宣佈爲N一個限制,如果輸入的是大於極限拋出一個錯誤。
  2. Internaly將無窮大定義爲一個高數字,只要您收到inf作爲參數,您將其替換爲N = 1e200。考慮到使用這種策略,您的算法可能需要很長時間才能完成執行。
+0

提問者詢問如何使用屬於符號工具箱一部分的'limit'命令。因此,如果你沒有那個工具箱,我想如何處理這個問題(有些模糊)是有點不合適的。 – 2014-11-03 13:43:35

+0

@DennisJaheruddin我不認爲OP是指符號數學工具箱,因爲它沒有在問題中提到。只有OP可以澄清這一點。對於一個符號系統來說,傳遞'N = inf'不會造成任何問題。 – gire 2014-11-03 14:06:29