2017-02-20 67 views
2

的實際代碼發佈前,讓我告訴你,我的電腦的處理器和內存信息是好的:解決方案需要大量的時間

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。

+0

我想說的是,大區間[0 10]是需要花費大量時間的原因 –

+0

在這裏,Windows 8和Matlab 2015b也是如此。對於'[0 8]'需要9.2秒,之後它「永遠」 –

回答

7

我得到了你的條件瞭解決方案: enter image description here

你的情況的問題是,ode45開始到6秒後分時間步長併成爲真正的小,有時(1e-51e-6) - 它使29 388 481迭代達到10秒!

因此有兩個重要的時刻:

所有的
  1. 首先,它是沒有必要使用[0 10]時間間隔。你可以在情節中看到你很早就得到了解決方案。

  2. 您的方法是係數敏感的:我嘗試使用係數a,bc的另一個值,它在幾秒鐘內計算出來。

+0

在此先感謝 –