2010-12-18 797 views
0

我要在MATLAB中編寫一個程序,它接受一個函數,將D值從10設置爲100(for循環),將函數與Simpson規則(while循環),然後顯示它。現在,這對於第一個7-8值來說工作得很好,但這需要更長的時間,並且最終耗盡內存,我不明白其中的原因。這是到目前爲止的代碼:MATLAB程序佔用我的內存越來越多

global D; 
s=200; 
tolerance = 9*10^(-5); 
for D=10:1:100 
    r = Simpson(@f,0,D,s); 
    error = 1; 
    while(error>tolerance) 
     s = 2*s; 
     error = (1/15)*(Simpson(@f,0,D,s)-r); 
     r = Simpson(@f,0,D,s); 
    end 
    clear error; 
    disp(r) 
end 
+1

在你的代碼沒有什麼很糟糕。你可以發佈'f'嗎? 「辛普森」是你的慣例嗎?看看Mathworks網站,它看起來像「quad」(http://www.mathworks.com/help/techdoc/ref/quad.html)是標準的辛普森規則函數。你也可以發佈。就一般風格的筆記而言,'D'必須是全球性的; 'clear error'可能是不必要的,你需要在'while'循環之前重新初始化's'嗎? – mtrw 2010-12-18 16:42:53

回答

2

mtrw's評論可能已經回答了這個問題部分:s應內部重新初始化for循環。張貼的代碼產生s每次誤差過大不可逆轉地增加,因此對於較大的D最大s到目前爲止將被使用。

此外,由於代碼重新評估整個集成,而不是從[0,d-1]你,除非你想明確地顯示你的Simpson功能的容錯浪費大量的資源再利用以前的集成 - s會爲了維持相同的低誤差(因爲你在更大的範圍內進行積分,你必須總結更多的點數),所以必須增加大量的D

最後,你的Simpson實施當然可以做有趣的東西爲好,這沒有人能告訴,沒有看到它...