二阶系统的中点欧拉方法,无法使其工作

时间:2013-06-12 16:41:48

标签: matlab debugging

我需要绘制这个简单的系统:

x''= -x

使用中点欧拉。

u1 = -x,u2 = -x'

u1'= u2
u2'= -x

u1(n + 1)= u1(n)+ h *?
u2(n + 1)= u2(n)+ h * f((1/2)*(u1(n)+ u1(n + 1))

我们不知道u1(n + 1)。我尝试用u1(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 + i)= u1(i)+ h * midpoint

当我绘制这个时,结果是一些可怕的分歧线,而不是振荡功能。怎么了?

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)

1 个答案:

答案 0 :(得分:0)

好吧,也许我受伤了,但我看到问题是如何构成的一个小问题。

u1 = -x , u2 = -x'

u1' = u2
u2' = -x

让我试一试:

u1 = -x
u2 = -x'

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

当我这样做的时候,我会得到一些甜蜜的甜蜜的声音!这是我的尝试,仅使用ode45,但您应该在符号更改方面有类似的运气。

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

Oscillations

HTH !!