一些关于poincare和分岔图计算、绘制方面的问题请教(非重复提问)
首先,要说的是我现在了解到的所有关于poincare、分岔图等相关算法、绘制等信息几乎均是通过振动论坛获得,很感谢那些无私奉献代码、回答我问题的 前辈和同学们。进入正题:1 poincare映射图究竟是 x,y的组合还是 x,dx/dt的组合?
因为之前的印象一直是第一种,但最近再用到时看到有的文献是采用横向振动的位移(x,y),有的是采用速度和加速度(x,dx/dt)。陷入疑惑,对于转子-轴承系统而言,哪一种才是真正的poincare映射图,或者二者皆是。
2 关于计算不同参数下运动微分方程、保存计算结果并绘制分岔图的若干问题。
a 对于matlab,计算微分方程采用ode系列,一般性方程ode45,刚性则采用ode15s(我算过几个刚性的,这个求解器是速度比较快的)。如果画分岔图的话没有问题,只是时间非常长,这里涉及到一个问题,对于不同的参数得到的计算结果,大家是否每次都予以保留。假如程序如下(也是论坛上的一个关于分岔图绘制例子)
function xdot=dddd(t,x,flag,omega)
eta=0.1 ; a= -48.704; b= 24.35e4;gamma= 1;
xdot=;
clear;clc;close all;
omega=0.01:0.01:4;
for h=1:length(omega)
T=2*pi/omega(h);
=ode45('dddd',,,[],omega(h));
plot(omega(h),x(10000:100:end,2),'k.');hold on
end
我们知道,matlab计算耗时较长,即使如上的220个周期也需要相当的时间,要是赶上刚性方程,则时间有可能更长。如果不保存结果,那么下次计算又是一笔较大的时间开支。我的问题是,大家都采用什么方法对结果保存。是保存到excel文件还是txt文档,或者是不同的.mat文件。如果是excel,那么它的存储范围有限制,好像是65536行,列我记不清了。而一旦涉及到求解周期较多或是步长较大时,其无法保存结果,并且读取也是非常耗时。同学说可以采用不同的.mat文件,但一想到一个文件中可能有1000或者10000个.mat,那将是一件特别恐怖的事情。我目前想到只有txt文档是比较好的选择了,毕竟不受大小限制。如果各位有什么好的建议,希望告知。
b 周期步长和周期数
一般要过滤掉瞬态响应,大概100至200个周期即可(我个人这么认为)。我的问题是,如果做分岔图,大概需要多少个周期的计算是足够的。外文文献通常都是在1500-2500之间,真的需要这么多吗?
c 图形绘制问题
matlab出图一般不够美观,要是发国内期刊倒是问题不大(一些有名的期刊现在对图形也有外观上的要求了),涉及到国外期刊则较难过关。对于轨迹图、时域频域图和poincare映射图都可以通过origin实现,它作出的图也确实非常漂亮。但分岔图应该如何作出我没有搞懂。如果将不同参数下计算结果相同的周期点保存到一个文件中以供origin使用也是一件十分耗时的事情。请大家给出更好的建议。
3 什么样的参数范围能够出现分岔现象
简单的方法是将范围尽量扩大,但代价是耗时。我目前的方法是画稳态后轨迹图,间隔可以取大一些,从中寻找规律。不知道大家有没有更有效的方法。
我说的可能有点多,但确实都是在研究过程中发现的问题。一般来说,计算不是太大的难点,关键在于后期处理,毕竟不是计算完了就什么事都没有了。另外,我曾经在论坛上看到过有人写的fortran计算相关程序,由于matlab时间比较折磨人,所以想借鉴学习fortran,希望知道的同学或者前辈能够提供一个链接或者一份很简单的例子,但包括计算和保存数据等信息和说明。我是真的想学习,摆脱各位回答上面的疑问并给出更好的建议,麻烦大家了。
本帖最后由 Vickyvictoria 于 2010-10-22 10:45 编辑
回复 chunshui2003 的帖子
1 poincare映射图究竟是 x,y的组合还是 x,dx/dt的组合?
因为之前的印象一直是第一种,但最近再用到时看到有的文献是采用横向振动的位移(x,y),有的是采用速度和加速度(x,dx/dt)。陷入疑惑,对于转子-轴承系统而言,哪一种才是真正的poincare映射图,或者二者皆是。
个人理解两种组合都是合理的,对于一个n维相空间非线性问题,其截面是n-1维的超平面
从poincare映射的定义看,在选取poincare截面的时候不一定要选择超平面,只要保证相轨迹和所选取的截面相交就行
从图形上来说,超平面我们很难或者无法用图形的形式表征出来,所以一般在处理这个问题的时候
poincare截面一般都是选其中2维的截面,x,y,dx/dt,dy/dt等都属于相空间的一维,所以(x,y)和(x,dx/dt)属于这个范畴内,两种选取方法都应该是合理的
在转子动力学中,因为(x,y)正好和轴心轨迹对应,所以更加直观,所以更多的采用这种平面 本帖最后由 Vickyvictoria 于 2010-10-22 10:47 编辑
a 对于matlab,计算微分方程采用ode系列,一般性方程ode45,刚性则采用ode15s(我算过几个刚性的,这个求解器是速度比较快的)。如果画分岔图的话没有问题,只是时间非常长,这里涉及到一个问题,对于不同的参数得到的计算结果,大家是否每次都予以保留。假如程序如下(也是论坛上的一个关于分岔图绘制例子)
对于是否保存结果这个问题,一般情况视情况而定
如果系统比较复杂,计算周期很长,一般都会选择保存,否则的话就不保存了
数据管理有的时候也是挺麻烦的
我的问题是,大家都采用什么方法对结果保存。是保存到excel文件还是txt文档,或者是不同的.mat文件。如果是excel,那么它的存储范围有限制,好像是65536行,列我记不清了。而一旦涉及到求解周期较多或是步长较大时,其无法保存结果,并且读取也是非常耗时。同学说可以采用不同的.mat文件,但一想到一个文件中可能有1000或者10000个.mat,那将是一件特别恐怖的事情。我目前想到只有txt文档是比较好的选择了,毕竟不受大小限制。如果各位有什么好的建议,希望告知。这个问题可能还是个人习惯为主,我要保存的话一般保存为dat格式
其处理方法和txt文档是完全一样的
一般不建议保存为excel或者mat格式
毕竟非线性计算得到的结果都是很大的,几百兆一个文件有的时候都算是小的
当然如果非要用excel或者mat格式进行保存的话,可以进行有选择性的保存
比如尽量减小周期数量、以及每个周期保存的点数等,满足最小分析要求的点数和周期就行
b 周期步长和周期数
一般要过滤掉瞬态响应,大概100至200个周期即可(我个人这么认为)。我的问题是,如果做分岔图,大概需要多少个周期的计算是足够的。外文文献通常都是在1500-2500之间,真的需要这么多吗?具体滤掉多少瞬态结果,这个和系统有很大的关系,一般需要试算才能确定比较合理的数值
试算的时候个人习惯一般滤掉200-400周期,然后选择尽量大的分岔参数变化步长进行试计算
然后再看不同分岔参数下的庞加莱映射图,就能够较好的看出是否收敛的足够好
外文文献通常都是在1500-2500之间主要是因为国外一般比较严谨
达到很少有系统在1500-2500周期后还存在较大瞬态影响的
所以这样选择对结果的正确性有较好的保障
c 图形绘制问题
matlab出图一般不够美观,要是发国内期刊倒是问题不大(一些有名的期刊现在对图形也有外观上的要求了),涉及到国外期刊则较难过关。对于轨迹图、时
域频域图和poincare映射图都可以通过origin实现,它作出的图也确实非常漂亮。但分岔图应该如何作出我没有搞懂。如果将不同参数下计算结果相
同的周期点保存到一个文件中以供origin使用也是一件十分耗时的事情。请大家给出更好的建议。这个没有太好的办法,其实就算是matlab绘图也存在类似的问题
这主要是因为分岔图一般都是由大量的映射点组成的
所以这就必然导致绘图软件要花费大量的时间去处理
最好的办法是在保证图片质量的基础上适当
减少映射点数,一般情况下一个分岔参数下的映射点数超过50个点就基本能够满足需要了
100个点的话一般就能够获得一个不错的效果
所以在获取稳态数据的时候不要保留过多的周期 3 什么样的参数范围能够出现分岔现象
简单的方法是将范围尽量扩大,但代价是耗时。我目前的方法是画稳态后轨迹图,间隔可以取大一些,从中寻找规律。不知道大家有没有更有效的方法。这个也就只有你说的办法了,除非你对该系统的分岔特性比较了解
话说回来,如果已经比较深入的掌握了其分岔特性,可能再去分析也就没有太大的意义了
我说的可能有点多,但确实都是在研究过程中发现的问题。一般来说,计算不是太大的难点,关键在于后期处理,毕竟不是计算完了就什么事都没有了。另外,我曾经在论坛上看到过有人写的fortran计算相关程序,由于matlab时间比较折磨人,所以想借鉴学习fortran,希望知道的同学或者前辈能够提供一个链接或者一份很简单的例子,但包括计算和保存数据等信息和说明。我是真的想学习,摆脱各位回答上面的疑问并给出更好的建议,麻烦大家了。
个人一般都采用fortran程序来算,相对matlab的效率大概能够提高3倍
其实fortran也很简单,主要是掌握一些基本的格式要求
如果有学习fortran的话,个人建议学fortran77,相对来说fortran77格式比较规范
代码读起来也比较容易,另外在学一下95的矩阵运算和公共变量传递方面的知识就本就够了,当然是用的时候可以使用Ivf等较高版本的编译器,它们是向前兼容的
至于具体应用其实主要就两个方面
1. 算法:主要的算法和matlab类似可以调用imsl库中龙格库塔法的函数
或者自己编写newmark等方法的程序就可以了
2. 数据格式:这个需要好好学习一下,一边回后续的数据处理打下基础 回复 chunshui2003 的帖子
感谢Vickyvictoria的回答,看来普遍采用轴心轨迹的想法没有问题。 Vickyvictoria 发表于 2010-10-22 10:50 static/image/common/back.gif
这个问题可能还是个人习惯为主,我要保存的话一般保存为dat格式
其处理方法和txt文档是完全一样的
.dat的格式我还没有尝试过,多谢你的提醒,很好的建议。 Vickyvictoria 发表于 2010-10-22 10:56 static/image/common/back.gif
具体滤掉多少瞬态结果,这个和系统有很大的关系,一般需要试算才能确定比较合理的数值
试算的时候个人习惯 ...
恩,你说的很有道理,一般200-400个周期应该是足够了。
另外,请教一下,你说的收敛足够好是什么意思?是去掉瞬态响应后结果已经达到一定的规律,还是其他? Vickyvictoria 发表于 2010-10-22 11:06 static/image/common/back.gif
这个没有太好的办法,其实就算是matlab绘图也存在类似的问题
这主要是因为分岔图一般都是由大量的映射点组 ...
谢谢,关于单个分岔参数下映射点个数的规律问题以前不是很了解,现在比较清楚了。
还想问一下,你画分岔图依然采用matlab还是其他软件呢? Vickyvictoria 发表于 2010-10-22 11:08 static/image/common/back.gif
这个也就只有你说的办法了,除非你对该系统的分岔特性比较了解
话说回来,如果已经比较深入的掌握了其分岔 ...
恩,这个也是没办法,如果扩大参数范围画分岔图观察十分耗时。还是将间隔取大一点,根据以往看文献描述轨迹图的经验进行判断。虽然粗放了一些,不过效率还是有保障的。 Vickyvictoria 发表于 2010-10-22 11:13 static/image/common/back.gif
个人一般都采用fortran程序来算,相对matlab的效率大概能够提高3倍
其实fortran也很简单,主要是掌握一 ...
谢谢Vickyvitoria的建议。这下更坚定将matlab程序改成fortran的决心。正如你所说,77的格式较为规范,现在比较直观的体会就是在循环方面,一目了然。而现在的fortran版本为 VF6.5,应该也是够用了。
另外,之前还没有听过imsl数据库,也不知道直接可以调用RK法。还在看算法编程书,想抄到fortran上当子程序调用。现在思路有清晰了一些。 前面的话都是在引用Vickyvitoria的话进行回答。
现在要说的是,真的非常感谢Vickyvitoria学姐(应该是学姐吧)的建议和帮助。你的几句话很有可能让我少走好多弯路,节约很多时间。
希望今后学姐多给予一些指点。
祝学姐身体健康、学业有成!
页:
[1]
2