我需要绘制这个简单的系统:
x'‘= -x
使用中点Euler。
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*中点
当我画这个的时候,结果是一些可怕的发散线,而不是一个振荡函数。怎么啦?
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)发布于 2013-06-13 05:22:07
好吧,也许我是疯了,但我看到了一个关于如何提出问题的小问题。
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]);

哈哈!!
https://stackoverflow.com/questions/17070891
复制相似问题