Anaiad 发表于 2007-7-6 10:36

请教Matlab中参数的设置

看到一个画Lyapunov指数谱的程序,代码如下:
clear;
yinit = ;
orthmatrix = ;
a = 0.15;
b = 0.20;
c = 10.0;
y = zeros(12,1);
% 初始化输入
y(1:3) = yinit;
y(4:12) = orthmatrix;

tstart = 0; % 时间初始值
tstep = 1e-3; % 时间步长
wholetimes = 1e5; % 总的循环次数
steps = 10; % 每次演化的步数
iteratetimes = wholetimes/steps; % 演化的次数

mod = zeros(3,1);
lp = zeros(3,1);
% 初始化三个Lyapunov指数
Lyapunov1 = zeros(iteratetimes,1);
Lyapunov2 = zeros(iteratetimes,1);
Lyapunov3 = zeros(iteratetimes,1);

for i=1:iteratetimes
    tspan = tstart:tstep:(tstart + tstep*steps);   
    = ode45('Rossler_ly', tspan, y);
    % 取积分得到的最后一个时刻的值
    y = Y(size(Y,1),:);
    % 重新定义起始时刻
    tstart = tstart + tstep*steps;
    y0 = [y(4) y(7) y(10);
          y(5) y(8) y(11);
          y(6) y(9) y(12)];
    %正交化
    y0 = FourGS(y0);
    % 取三个向量的模
    mod(1) = sqrt(y0(:,1)'*y0(:,1));
    mod(2) = sqrt(y0(:,2)'*y0(:,2));
    mod(3) = sqrt(y0(:,3)'*y0(:,3));
    y0(:,1) = y0(:,1)/mod(1);
    y0(:,2) = y0(:,2)/mod(2);
    y0(:,3) = y0(:,3)/mod(3);
   
    lp = lp+log(abs(mod));
    %三个Lyapunov指数
    Lyapunov1(i) = lp(1)/(tstart);
    Lyapunov2(i) = lp(2)/(tstart);
    Lyapunov3(i) = lp(3)/(tstart);
   
    y(4:12) = y0';
end
问:参数设置中tspan是微分方程的积分限,可以是一个区间或离散的点,但是这里却是tspan = tstart:tstep:(tstart + tstep*steps),应该怎么理解呢?还望高手赐教!

happy 发表于 2007-7-6 16:43

原帖由 Anaiad 于 2007-7-6 10:36 发表 http://www.chinavib.com/forum/images/common/back.gif
参数设置中tspan是微分方程的积分限,可以是一个区间或离散的点,但是这里却是tspan = tstart:tstep:(tstart + tstep*steps),应该怎么理解呢?还望高手赐教!

T0 起始时间
TFINAL 终止时间
如果是 则表示给出 这个区间内,所有计算点的结果
如果是,则表示仅给出 T0 T1 ... TFINAL 这一系列点的结果

tstart:tstep:(tstart + tstep*steps) 表示在 为这个区间内,每隔tstep取一个点
换句话来说这个程序是按照tstep的时间不长输出结果

Anaiad 发表于 2007-7-7 11:35

谢谢happy的指点,但是在运行的时候会出现错误:
???In an assignmentA(I) = B, the number of elements in B and
I must be the same.

Error in ==> Rossler_ly at 25
dX(2) = x+a*y;

Error in ==> funfun\private\odearguments at 110
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, ...

Error in ==> rosslor at 31
    = ode45('Rossler_ly', tspan, y);
到底哪里出问题了呢?

Anaiad 发表于 2007-7-8 10:21

Rossler_ly吸引子程序:
function dX = Rossler_ly(t,X)
%
%Rossler吸引子,用来计算Lyapunov指数
%      a=0.15,b=0.20,c=10.0
%      dx/dt = -y-z,
%      dy/dt = x+ay,
%      dz/dt = b+z(x-c),
%2004.10.20 zya
%

a = 0.15;
b = 0.20;
c = 10.0;

x=X(1); y=X(2); z=X(3);
% Y的三个列向量为相互正交的单位向量
Y = [X(4), X(7), X(10);
    X(5), X(8), X(11);
    X(6), X(9), X(12)];
% 输出向量的初始化,必不可少
dX = zeros(12,1);

% Rossler吸引子
dX(1) = -y-z;
dX(2) = x+a*y;
dX(3) = b+z*(x-c);

% Rossler吸引子的Jacobi矩阵
Jaco = [0 -1 -1;
      1 a0;
      z 0x-c];
      
dX(4:12) = Jaco*Y;
调试了很多次还是出现上面的错误,哪位高手能指点一下?

[ 本帖最后由 Anaiad 于 2007-7-8 15:28 编辑 ]

eight 发表于 2007-7-9 21:37

原帖由 Anaiad 于 2007-7-8 10:21 发表 http://www.chinavib.com/forum/images/common/back.gif
Rossler_ly吸引子程序:
function dX = Rossler_ly(t,X)
%
%Rossler吸引子,用来计算Lyapunov指数
%      a=0.15,b=0.20,c=10.0
%      dx/dt = -y-z,
%      dy/dt = x+ay,
%      dz/dt = b+ ...


请看 置顶帖:版面导航区 一贴,然后找到常见错误整理的帖子,阅读一下

[ 本帖最后由 eight 于 2007-7-9 21:40 编辑 ]
页: [1]
查看完整版本: 请教Matlab中参数的设置