您的位置:首页 > 其它

取余运算的Lyapunov指数

2015-12-22 10:24 190 查看
一、取余运算

1、 画出取余运算的运动轨迹

N=100;              %给定迭代次数
x=ones(1,N)*0.6;    %对x赋初值
for i=2:N
x(i)=mod(2*x(i-1),1);
end
plot(x(2:N))        %从第二个点开始画图
xlabel('\fontsize{16}n')
ylabel('\fontsize{16}x')




问题:在50多步的时候,输出的结果与我们想象的有出入,并且导致之后的结果全为0。

原因:下图是x变量值的变化:



从表中可以发现在第43步时,已经产生了错误的结果,继而导致最终为0.

错误结果的产生与matlab中小数的存储方式有关

解决方案:为了消除有存储方式带来的误差,可以通过两种方式解决这个问题:

1、 通过使用取整函数roundn,对x进行百分位取整

2、 将数据扩大一个数量级,即令x为1-9之间的整数,在取余时,对10取余。

N=100;              %给定迭代次数
x=ones(1,N)*0.6;    %对x赋初值
for i=2:N
x(i)=roundn(mod(2*x(i-1),1),-2);%利用roundn函数取整到x的百分位
end
plot(x(2:N))        %从第二个点开始画图
xlabel('\fontsize{16}n')
ylabel('\fontsize{16}x')




2、计算Lyapunov指数(仿真方式)

取N=100,x0=0.6,∆x=0.1,则x1=0.7,

N=100;              %给定迭代次数
delta=0.1;
x0=ones(1,N)*0.1;    %对x赋初值
x1=ones(1,N)*(0.1+delta);
for i=2:N
x0(i)=roundn(mod(2*x0(i-1),1),-2);%利用roundn函数取整到x的百分位
x1(i)=roundn(mod(2*x1(i-1),1),-2);
end
L=log(abs(x1(N)-x0(N))/delta)/(N-1)

L =
0.0070


当N取的很大时,Lyapunov指数越来越小。

二、用Lyapunov第一方法求局部稳定性

与第一题无关
syms x y
f=[y-x*(x^2+y^2);-x-y*(x^2+y^2)];
v=[x,y];
R=jacobian(f, v); 				 %求雅克比矩阵
R=subs(R,[x,y],[0,0]);
eig(R)						 %雅克比矩阵的特征值

ans =
-i
i


特征值是一对实部为0的共轭复根,所以系统平衡状态0在李雅普诺夫意义下稳定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: