讓我們假設以恆定的時間步長實現該方法,比如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);
現在的一點是:你滿意與一階及時準確?
認爲如果您使用此方案來解決例如漢密爾頓主義者問題(比如說簡單的諧振子),它會給你的系統帶來人爲的激勵(正確地說,你可以看到你的正確哈密爾頓軌道偏移了)。簡單地說,經過一段時間你的解決方案是完全人造。事實上,當你解決實際問題時,你必須仔細考慮你的問題和你的物理,然後選擇一個合適的數值方案來解決你的方程。很快,你可能會被要求實施更準確的方案,如龍格庫塔(你可以更好地信任,但只是一點點,至少在原來的形式)。
我猜想至少有1e6個網頁在討論明確的歐拉數值方案和實現它的方法。請張貼您的解決方案中至少一些(有意義的)行。 – Acorbe
我看了很多這些,主要是像 't = 1; %0(t)的調整值y(0)= 2;%輸入您的初始條件 dt = 0.1;%輸入您的初始條件% %調整你的步長 T = 0:dt:5; %設置你的時間域,在這裏我有[0,5]' 但是當我使用它們時,它返回'ATTEMPTED ACCESS(0);必須是一個正整數或邏輯「' 我不知道爲什麼或者如何解決這個問題 –
對於那些對matlab知之甚少的人,你們都聲稱擁有並似乎實施了歐拉方法,對於第一個項目來說太雄心勃勃了。花費至少2個工作日熟悉Matlab並最終寫作一個簡單的函數,可能是找到一個多項式的根,然後繪製它們,然後你將會得到基本的(Matlab)詞彙表,開始考慮按照建議的方法實現歐拉方法。 –