2013-06-12 25 views
0

我需要繪製這個簡單的系統:採用中點歐拉二階系統中點歐拉法,不能讓它的工作

X「」 = -x

U1 = -x和u2 = -x」

U1' = U2
U2' = -x

U1(N + 1)= U1(N)+ H +?我們不知道u1(n + 1)和u2(n + 1)= u2(n)+ h * f((1/2)*(u1(n)+ u2(n + 1) (n + 1)= u1(n)+ h * u2(n)

u2(1 + i)= u2(i)+ h *(( - 1/2)* (u1(n)+ u1(n + 1))

然後我們有u2(i + 1)和u2(i)。中點值是(u2(1 + i) - u(i))/ 2

U1(q + 1)= U1(ⅰ)+ H *中點

當我繪製這樣的結果是一些可怕發散林e,不是振盪功能。哪裏不對?

clear all, close all, clc 

h = 0.0005; % steplength 
nos = 500000; % number of steps 

x = zeros(1,nos); 
xp = zeros(1,nos); 
energy=zeros(1,nos); 

% Starting positions 
x(1) = 1; 
xp(1) = 0; 

for i=1:nos-1  



    xpp = -x(i); 

    xTAYLOR = x(i) + h*xp(i); 

    xp(1+i) = x(i) + (-1*((1/2)*(x(i) + xTAYLOR))); 

    xpHALF = (xp(1+i) - x(i))/2; 

    x(1+i) = x(i) + h*xpHALF; 


end 

plot(x) 
+0

當我運行你最小的例子,我得到[這個數字](http://oi39.tinypic.com/35hqsm1.jpg) - 是你的*可怕的分歧線*? – Schorsch

+0

爲什麼當一個簡單的歐拉能夠完成這項工作時,你使用中點歐拉方法 – Rasman

回答

0

好的,也許我很受打擊,但我看到一個問題是如何構成的輕微問題。

u1 = -x , u2 = -x' 

u1' = u2 
u2' = -x 

讓我試試這個:

u1 = -x 
u2 = -x' 

u1' = -x' = u2 
u2' = -x'' = x = -u1 

當我這樣做,我得到一些甜蜜的oscilations!這是我的嘗試,只是使用ode45,但你應該有與運動符號相似的運氣。

[t2,y2] = ode45(@(t,x) [x(2) -x(1)]',[0 250],[0 1]); 

Oscillations

HTH!