2017-02-20 5 views
2

Перед проводком фактического кода, позвольте мне показать вам, что процессор моего компьютера и информационная памяти хорошие:решения дифференциального уравнения имеет огромное время

enter image description here

Вчера я писал о уравнении Лоренца (классическое уравнение из теория хаоса), где один большой парень помог мне и показать решение, вот оно:

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 начинает делить временный шаг, и он стал очень мал (1e-5 и 1e-6) в моменты времени после 6 секунд - это сделано 29 388 481 итераций для достижения 10 секунд!

Таким образом, есть два важных момента:

  1. Прежде всего, это не является необходимым использовать [0 10] интервал времени. Вы можете увидеть на сюжете, что вы получили решение гораздо раньше.

  2. Ваш метод коэффициент чувствительный: я пытался использовать другие значения коэффициентов a, b и c и вычисляет в течение нескольких секунд.

+0

благодарит заранее –