声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2112|回复: 10

[稳定性与分岔] ode中是否应该选择每一次计算的最后一行值作为下一次计算初值

[复制链接]
发表于 2010-12-9 16:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x

选择最后值作为下次初值

选择最后值作为下次初值

直接采用初值初值

直接采用初值初值

上面两幅图分别为采用每一次计算的最后一行值作为下一次计算初值,以及使用最开始初值得到的分岔计算结果,有很大差异。
应该采用哪一种方式是更加合理的选择呢?
回复
分享到:

使用道具 举报

发表于 2010-12-10 10:26 | 显示全部楼层
这个个人认为应该有两种可能
(1)系统本身就是对初值极为敏感的系统,不同的初值就可能导致系统解相差很大,这个你可以在多取几个初值算一下看看是否属于这种情况;
(2)可能庞加莱截面选取不一致产生的结果,你可以把计算稳定后的相图做出来比较一下看看是否属于这种情况;
(3)计算程序上存在问题;
目前个人只能想到这三种可能性
 楼主| 发表于 2010-12-12 13:22 | 显示全部楼层
回复 2 # gghhjj 的帖子

学长你好,按照你的建议我又重新算了一下:
1 采用默认精度reltol=1e-3,abstol=1e-6。初值分别采用0.001、0.005、0.01和0.05。对于y0保持不变,记作“直接结果”;对于y0在每一次循环后变化,记作“间接结果”。当采用直接结果时,系统在y0=0.001、0.01和0.05时规律基本相同,只是幅值上有差异,而y0=0.005与其他三者均不同,规律类似于间接结果;当采用间接结果时,y0的取值对分岔结果没有实质影响,规律几乎相同甚至幅值也相似。
2 这次我把控制参数的变化范围扩大到原来的3倍多(虽然实际上不可能出现),然后分别绘制其直接和间接结果的分岔图以及cz=0.0040时的轨迹图和poincare映射图。

直接分岔图.bmp

直接分岔图.bmp

间接分岔图.bmp

间接分岔图.bmp

cz=0.00400_直接poincare.bmp

cz=0.00400_直接poincare.bmp

cz=0.00400_直接轨迹.bmp

cz=0.00400_直接轨迹.bmp

cz=0.00400_间接轨迹.bmp

 cz=0.00400_间接轨迹.bmp

cz=0.00400_间接poincare.bmp

cz=0.00400_间接poincare.bmp

 楼主| 发表于 2010-12-12 13:28 | 显示全部楼层
程序如下,和在本版块http://forum.vibunion.com/thread-98188-1-1.html中的类似,区别在于这里采用内嵌函数,麻烦学长给看一下:


  1. function  [time,y] = qiujie
  2. tic
  3. period = 2*pi;               %%%因为对时间t采用了无量纲化,cos(oemga*t)变成了cos(T),所以周期变为2*pi/1,暂时这样
  4. tspan = (0:period/100:1000*period);
  5. y0 = [0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001];

  6. e0 = 0.6*10^-3; Lb = 100*10^-3;         %Situ_H_imp
  7.       
  8. cz = 0.0002:0.0001:0.0200;

  9. options = odeset('Reltol',1e-3,'Abstol',1e-6);

  10. row = length(cz);
  11. column = length(80100:100:100001);

  12. U = zeros(row,column);

  13. for i = 1:length(cz)
  14.     disp(cz(i))
  15. [time,y] = ode15s(@equ_elastic_without_UMP,tspan,y0,options,e0,cz(i),Lb);
  16. y0 = y(end,:);

  17. U(i,:) = y(80100:100:end,1)';

  18. plot(y(80100:end,1),y(80100:end,3));
  19. saveas(gcf,sprintf('Lb=1.00,e0=0.0006,without_UMP,cz=%6.5f_traj_Situ_H_imp.bmp',cz(i)),'bmp');             % Situ_H



  20. plot(y(80100:100:end,1),y(80100:100:end,3),'r.','markersize',5);
  21. saveas(gcf,sprintf('Lb=1.00,e0=0.0006,without_UMP,cz=%6.5f_poincare_Situ_H_imp.bmp',cz(i)),'bmp');             % Situ_H


  22. end

  23. plot(cz,U,'r.','markersize',5);
  24. saveas(gcf,'分岔图.bmp','bmp');
  25. toc




  26. %%%%%%%%         运动微分方程          %%%%%%%%%

  27. function  uu = equ_elastic_without_UMP(T,u,e0,cz,Lb)

  28. m1 = 60;               %转子质量 kg
  29.   m2 = 25;               %轴颈质量 kg
  30.   c1 = 4000;             %转子阻尼 N.s/m
  31.   c2 = 1200;             %轴承阻尼 N.s/m
  32.   Ke = 6.2*10^6;          %转轴刚度 N/m
  33. %   e0 = 0.6*10^-3;        %转子质量偏心 m
  34. %   Rr = 60*10^-3;         %转子半径 m
  35. %   Lr = 150*10^-3;        %转子长 m
  36.   delta_0 = 4.5*10^-3;   %均匀气隙大小 m
  37. %   cz = 0.2*10^-3;        %轴颈间隙 m
  38.   Rb = 50*10^-3;         %轴承半径 m
  39. %   Lb = 20*10^-3;        %轴承长 m
  40.   mu = 18*10^-3;         %绝对润滑油粘度 无单位

  41.   
  42.   omega = 13;            %大轴旋转角速度
  43.   
  44. %   global cz
  45.   
  46.   
  47.   sigma = mu * omega * Rb * Lb * (Rb/cz)^2 * (Lb/2/Rb)^2;        %Sommerfeld修正系数
  48.   
  49.   A1 = u(7) + 2*u(6);
  50.   A2 = u(5) - 2*u(8);
  51.   
  52.   alpha = atan(A1./A2) - pi/2* sign(A1./A2) - pi/2* sign(A1);
  53.   
  54. E = sqrt(u(5).^2 +u(7).^2);                     %轴颈轴心轨迹
  55. E_minus = sqrt(1 -E.^2);

  56. B1 = u(7)*cos(alpha) - u(5)*sin(alpha);
  57. B2 = u(5)*cos(alpha) + u(7)*sin(alpha);
  58.   
  59.   G = 2./E_minus * ( pi/2 + atan(B1./ E_minus) );
  60.   V = (2 + B1 * G) ./  E_minus.^2;
  61.   S = B2 ./ ( 1 - B2.^2 );
  62.   
  63.   F_oil_same = -sqrt( A2.^2 + A1.^2 ) ./ E_minus.^2;
  64.   
  65.   f_x = F_oil_same * ( 3* u(5) *V - sin(alpha) * G - 2 *cos(alpha)*S );
  66.   f_y = F_oil_same * ( 3* u(7) *V + cos(alpha) * G - 2 *sin(alpha)*S );     %油膜力的无量纲表达式
  67.   
  68.   fx = sigma * f_x;
  69.   fy = sigma * f_y;              %非线性油膜力
  70.   
  71.   uu = zeros(8,1);
  72.   uu(1) = u(2);
  73.   uu(2) = -c1/(m1*omega) * u(2) - Ke/(m1*omega^2) * u(1) + Ke * cz/(m1*omega^2*delta_0)*u(5) + e0 * cos(T)/delta_0 ;
  74.   uu(3) = u(4);
  75.   uu(4) = -c1/(m1*omega) * u(4) - Ke/(m1*omega^2) * u(3) + Ke * cz/(m1*omega^2*delta_0)*u(7) + e0 * sin(T)/delta_0 ;
  76.   uu(5) = u(6);
  77.   uu(6) = -c2/(m2*omega) * u(6) + Ke * delta_0/(2*m2*omega^2*cz) * u(1) - Ke/(2*m2*omega^2) * u(5) + fx/(m2*omega^2 *cz);
  78.   uu(7) = u(8);
  79.   uu(8) = -c2/(m2*omega) * u(8) + Ke * delta_0/(2*m2*omega^2*cz) * u(3) - Ke/(2*m2*omega^2) * u(7) + fy/(m2*omega^2 *cz);

复制代码
发表于 2010-12-13 09:22 | 显示全部楼层
可看看龙格库塔法的计算过程,肯定要用到前一步的计算值的。
 楼主| 发表于 2010-12-13 09:49 | 显示全部楼层
回复 5 # octopussheng 的帖子

谢谢学长的回答,我想了想确实应该是这样。毕竟最后的结果是稳态的。
另外,再请教一下,根据上面的最后的轨迹图和poincare图能否判断此时系统处于混沌状态。因为看着映射图像,但轨迹图又好像是拟周期运动。
发表于 2010-12-13 11:34 | 显示全部楼层
不像是混沌运动的庞加莱映射。
也不像拟周期,因为庞加莱映射不封闭
 楼主| 发表于 2010-12-13 15:40 | 显示全部楼层
回复 7 # octopussheng 的帖子

学长你好,这个东西我已经弄了好久了。但正如你所说,映射图和轨迹图总也对不上,我作图的部分应该是没有问题吧

  1. tspan = (0:period/100:1000*period);
  2. plot(y(80100:end,1),y(80100:3))          % 轴心轨迹图
  3. plot(y(80100:100:end,1),y(80100:100:end,3))        % poincare映射图
复制代码
一个周期划分100个点,1000个周期,选取稳态后的积分点进行绘制。我现在有点糊涂了,难道是选取点出了问题吗?
请学长帮忙分析一下原因。
发表于 2010-12-14 16:39 | 显示全部楼层
plot(y(80100:end,1),y(80100:3)) 似有问题

是否应该是plot(y(80100:end,1),y(80100:end,3))
 楼主| 发表于 2010-12-14 20:22 | 显示全部楼层
回复 9 # octopussheng 的帖子

这里是笔误。忘记end了,y(1)是x1,y(3)是y1。另外,学长,希望你看一下我发的另一个帖子,帮忙判断一下哪种分岔程序更为合理。
http://forum.vibunion.com/thread-98401-1-1.html
发表于 2010-12-15 12:55 | 显示全部楼层
绘图部分应是没有问题的。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 18:07 , Processed in 0.125853 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表