Azzera filtri
Azzera filtri

plotting maximal lyapunov exponent using ode45

4 visualizzazioni (ultimi 30 giorni)
i m in need to plot the lyapunov exponent 'f vs lyapunov,' but i am unable to run the program due to some error in the program. can anyone pls help me to get the plot and any suggestions to make it perfect.
with kind regards
matlab codes:
clc
global f
for f=0.0:0.1:30
f
initialx(1)=0.0100;initialx(2)=0.01;
lyap(1)=.01;
[t,x]=ode45('loreeneq',0:1:500,[initialx(1),initialx(2)]);
lyap1=lyap([t,x(:,1)]);
plot(f,lyap1,'r');
hold on
drawnow
end
xlabel ('f');ylabel('lyap')
--------------------------------------------------------------------------
function dxdt=loreeneq(t,x)
global r
dxdt1=10*(x(2)-x(1));
dxdt2=(r*x(1))-x(2)-(x(1)*x(3));
dxdt3=(x(1)*x(2))-(2.67*x(3));
dxdt=[dxdt1;dxdt2;dxdt3];
  2 Commenti
Walter Roberson
Walter Roberson il 9 Gen 2012
It is faster for us if you show us the error message and the line it is complaining about.
Rizwana Junaid
Rizwana Junaid il 10 Gen 2012
sorry i had pasted wrong main file. my code is
matlab codes:
clc
global r
for r=0.0:0.1:30
r
lyap(1)=.01;
[t,x]=ode45('loreeneq',0:1:500,[.01,.01,.01]);
lyap1=lyap([t,x(:,1)]);
plot(r,lyap1,'r');
drawnow
end
xlabel ('r');ylabel('lyap')
----------------------------------------------------------------------
function dxdt=loreeneq(t,x)
global r
dxdt1=10*(x(2)-x(1));
dxdt2=(r*x(1))-x(2)-(x(1)*x(3));
dxdt3=(x(1)*x(2))-(2.67*x(3));
dxdt=[dxdt1;dxdt2;dxdt3];
---------------------------------------------------------
error is:
f =
0
??? Subscript indices must either be real positive integers or logicals.
Error in ==> mlcmainbifr at 10
lyap1=lyap([t,x(:,1)]);

Accedi per commentare.

Risposta accettata

Walter Roberson
Walter Roberson il 9 Gen 2012
In the top portion you have "global f", but you do not use "f" in the other portion. In the bottom portion you have "global r" but you do not use "r" in the other portion.
"global" shares by variable name. There is not just one global variable available. If you want to use the value of f in the bottom routine and you want to pass it via a global then you need to use "global f" in the bottom routine and reference f there instead of r.
If that is what you are trying to do then there are better approaches, which the ode45 documentation links to when it says to see the documentation on "parameterizing functions"

Più risposte (0)

Categorie

Scopri di più su Matrix Computations in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by