原帖由 咕噜噜 于 2007-6-15 21:31 发表
也有可能加上abs意义变了,不过记得我以前这么编过这个程序
是的,加上abs,物理意义没有了,讲不通。实数肯定没问题,关键是sqrt函数里面是个负数,开根号出来是个虚数,加abs出来的东西就没有物理意义,当然sqrt里面是负数,开根号出来(应该是角速度)本身是个虚数就没有物理意义,加abs出来的肯定也不是个玩意,嘿。gghhjj把sqrt开根号出来的数(实数或复数)实部为0的点去掉了,这个物理上也说不通啊,在摆到最高点如果速度为零,这样的点肯定要的。还有,把所有实部不为零的点画出来,有可能实部不为零,但是虚部也不为零的情况,应该也是没有物理意义,我想是这样的。不知道对否:@)
我想应该是把sqrt开根号出来没有物理意义的点,即角速度为虚数的点剔除,不应该剔除实部为零的点。
借gghhjj兄的程序,改了一点点,出来的结果好像没啥变化::loveliness:
for H=[0:0.2:1,1.5,2:5] %取这几个总能量值画相图(用能量法画的),就是相图里面一条曲线对应一个H值。
theta0=-3*pi:0.001:3*pi; %theta0为大角度振动摆角范围
theta1=sqrt(2*(H-1+cos(theta0))); %计算不同角度下的角速度theta1
theta=[theta0',theta1'];
theta2=theta(imag(theta(:,2))==0,:);
%%就上面这里改了一点点,呵呵,不过不知道为什么写成theta2=theta(imag(theta(:,2))==0,imag(theta(:,2))==0);不行?
%%这是Matlab的基本问题,在n×2矩阵中取一些行组成的矩阵难道只需要控制了第一个列元素就可以,后面的第2列元素会从矩阵中所有
%%列中把跟前面取出来的第一列若干行对应的后面第2列元素取出来的?就是第二列用:就可,把控制条件再在第二列位置写一次就不行?
%%加了再控制一次怎么还出错啊?这样两列元素个数只会是相等的啊,按道理不会报错啊
plot(theta2(:,1),theta2(:,2),'.','MarkerSize',1) %绘制大角度振动的相图(上半部分)
axis 'equal'
hold on
plot(theta2(:,1),-theta2(:,2),'.','MarkerSize',1) %绘制大角度振动的相图(下半部分)
axis 'equal'
hold on
end
[ 本帖最后由 wh1125 于 2007-6-16 21:53 编辑 ] |