2012-10-25 76 views
-1

我到處搜索,找不到任何東西。在MATLAB中實現顯式歐拉方法(用於ODE)

首先,讓我說我從未使用過Mat實驗室,所以我不知道我在做什麼。

我嘗試了一些東西,但都沒有工作。顯然y(0)= 2試圖創建一個值爲2的0單元列表?

無論如何,有人可以幫助我嗎? 我需要在Mat實驗室中編寫一個靈活的歐拉方法來解決這樣的幾個方程。

1)y'= 5-3sqrt(y); Y(0)= 2

用H = 0.1,0.05,0.025,0.01 & & T = 0.5,1,1.5,2,2.5%,3

我不知道我我在做。

+1

我猜想至少有1e6個網頁在討論明確的歐拉數值方案和實現它的方法。請張貼您的解決方案中至少一些(有意義的)行。 – Acorbe

+0

我看了很多這些,主要是像 't = 1; %0(t)的調整值y(0)= 2;%輸入您的初始條件 dt = 0.1;%輸入您的初始條件% %調整你的步長 T = 0:dt:5; %設置你的時間域,在這裏我有[0,5]' 但是當我使用它們時,它返回'ATTEMPTED ACCESS(0);必須是一個正整數或邏輯「' 我不知道爲什麼或者如何解決這個問題 –

+2

對於那些對matlab知之甚少的人,你們都聲稱擁有並似乎實施了歐拉方法,對於第一個項目來說太雄心勃勃了。花費至少2個工作日熟悉Matlab並最終寫作一個簡單的函數,可能是找到一個多項式的根,然後繪製它們,然後你將會得到基本的(Matlab)詞彙表,開始考慮按照建議的方法實現歐拉方法。 –

回答

5

讓我們假設以恆定的時間步長實現該方法,比如dt>0。 如果我們想方程整合到一個時間T>0,我們考慮一個時間離散

tt = 0:dt:T; 

我們最好預先分配速度的目的我們的解決方案的載體,即

yy=zeros(1,length(tt)); 

yy將包含我們將生產的解決方案的第一個時序逼近(即,幾乎沒有符號濫用,即

yy(1)==y_r(t=0) 

yy(end)==y_r(t=T) + global error, 

其中功能y_r=y_r(t)是我們真正的解決方案)。

推測,我們在正常形式一階ODE,即

dy_r/dt = f(y_r;t) 

和初始基準

y_r(t=0)=y_0 

(即,我們有一個柯西問題)。因此,我們應該首先初始化我們解向量

yy(1) = y_0; 

那麼,我們可以找到未來時間的解決方案,即

N = length(tt); 
    for t = 2 : N  // we should look at future times, thus we start from 2 
         // NOTE: this is first order explicit Euler scheme. 
     yy(t) = yy(t-1) + dt*f(yy(t-1),t); 
    end 

我們就大功告成了。我們現在可以繪製解決方案。

plot(tt,yy); 

現在的一點是:你滿意一階及時準確

認爲如果您使用此方案來解決例如漢密爾頓主義者問題(比如說簡單的諧振子),它會給你的系統帶來人爲的激勵(正確地說,你可以看到你的正確哈密爾頓軌道偏移了)。簡單地說,經過一段時間你的解決方案是完全人造。事實上,當你解決實際問題時,你必須仔細考慮你的問題和你的物理,然後選擇一個合適的數值方案來解決你的方程。很快,你可能會被要求實施更準確的方案,如龍格庫塔(你可以更好地信任,但只是一點點,至少在原來的形式)。