首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >二阶系统的中点欧拉法,不能正常工作

二阶系统的中点欧拉法,不能正常工作
EN

Stack Overflow用户
提问于 2013-06-13 00:41:48
回答 1查看 696关注 0票数 0

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

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*中点

当我画这个的时候,结果是一些可怕的发散线,而不是一个振荡函数。怎么啦?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2013-06-13 05:22:07

好吧,也许我是疯了,但我看到了一个关于如何提出问题的小问题。

代码语言:javascript
复制
u1 = -x , u2 = -x'

u1' = u2
u2' = -x

让我试试这个:

代码语言:javascript
复制
u1 = -x
u2 = -x'

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

当我这样做的时候,我得到了一些甜美的振荡!这是我的尝试,只是使用ode45,但你应该有类似的运气与标志的变化。

代码语言:javascript
复制
[t2,y2] = ode45(@(t,x) [x(2) -x(1)]',[0 250],[0 1]);

哈哈!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17070891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档