微分方程的求解需要很长的时间

时间:2017-02-20 06:27:13

标签: matlab performance ode

在发布实际代码之前,让我告诉您我的计算机的处理器和内存信息是否正常:

enter image description here

昨天我发布了Lorenz方程式(混沌理论中的经典方程式),其中一个伟大的人帮助我并展示解决方案,这里是:

function f=lorenz(t,x,a,b,c)
        % solve differential equation like this
        %dx/dt=a*(y-x)
        %dy/dt=-x*z+b*x-y
        %dz/dt=xy-c*z/3
        f=zeros(3,1);% preallocate result
        f(1)=a*(x(2)-x(1));
        f(2)=-x(1)*x(3)+b*x(1)-x(2);
        f(3)=x(1)*x(2)-c*x(3)/3;
        end

和测试程序(脚本):

% test program
x0=[-2 -3.5 21];% initial  point
a=input(' enter first coefficient : ');
b=input(' enter second coefficient: ');
c=input(' enter third coefficient : ');
[t,x] = ode45(@(t,x) lorenz(t,x,a,b,c),[0 10],x0);
plot(t,x(:,1),'r'); 
title(' solution of x part');
grid on

但在运行这些线之后

test_program
 enter first coefficient : 10
 enter second coefficient: 28
 enter third coefficient : -8
它还在运行,他说在他的个人电脑上需要2秒钟,所以真的很奇怪会发生什么?为什么不在我的电脑上编译?即使你看到它我的笔记本电脑有很好的参数,请帮助我 - 即使现在它正在运行所以我应该使用ctrl-c取消。

1 个答案:

答案 0 :(得分:7)

我为您的条件找到了解决方案: enter image description here

您的问题是<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=[KEY]" type="text/javascript"></script> 开始划分时间步长,并且在6秒后它变得非常小(ode451e-5) - 它1e-6迭代达到10秒!

所以有两个重要时刻:

  1. 首先,没有必要使用29 388 481时间间隔。你可以在情节中看到你很早就得到了解决方案。

  2. 您的方法对系数非常敏感:我尝试使用系数[0 10]ab的其他值,并在几秒钟内计算出来。

    < / LI>