声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2000|回复: 3

[计算数学] ode数值积分出现复数解是怎么造成的

[复制链接]
发表于 2012-8-15 12:29 | 显示全部楼层 |阅读模式

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

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

x
系统运动微分方程



  1. function  uu = equ_6_11(T,u)
  2.   m1 = 1.44*10^5;               
  3.   m2 = 1.0*10^4;              
  4.   c1 = 4.3*10^5;            
  5.   c2 = 3*10^5;            
  6.   Ke = 5.0*10^7;         
  7.   
  8.   e0 = 0.8*10^-3;                                                                                
  9.   
  10.   Rr = 0.6;        
  11.   Lr = 0.3;        
  12.   delta_0 = 2.0*10^-3;  
  13.   
  14.   cz = 0.4*10^-3;        
  15.   
  16.   Rb = 0.2;         
  17.   Lb = 0.3;                                    
  18.   
  19.   mu = 24*10^-3;        
  20.   mu_0 = 4*pi*10^-7;   
  21.   kj = 0.8;              

  22. global Ij
  23.   Fj = kj * Ij;            
  24.   kr = 5*10^8;        
  25.   f = 0.01;            
  26.   
  27.   omega = 13;            
  28.   e = sqrt(u(1).^2 + u(3).^2);                          
  29.   F_coeffi = Rr * Lr *pi *mu_0 *Fj^2 /delta_0.^2;
  30.   Fx = F_coeffi * (1/2 * e + 5/8 * e.^3) * u(1)./e;
  31.   Fy = F_coeffi * (1/2 * e + 5/8 * e.^3) * u(3)./e;      
  32.                                                                                                                                                                            
  33.   sigma = mu * omega * Rb * Lb * (Rb/cz)^2 * (Lb/2/Rb)^2;      
  34.   
  35.   A1 = u(7) + 2*u(6);
  36.   A2 = u(5) - 2*u(8);
  37.   
  38.   alpha = atan(A1./A2) - pi/2* sign(A1./A2) - pi/2* sign(A1);
  39.   
  40. E = sqrt(u(5).^2 +u(7).^2);                    
  41. E_minus = sqrt(1 -E.^2);

  42. B1 = u(7)*cos(alpha) - u(5)*sin(alpha);
  43. B2 = u(5)*cos(alpha) + u(7)*sin(alpha);
  44.   
  45.   G = 2./E_minus * ( pi/2 + atan(B1./ E_minus) );
  46.   V = (2 + B1 * G) ./  E_minus.^2;
  47.   S = B2 ./ ( 1 - B2.^2 );
  48.   
  49.   F_oil_same = -sqrt( A2.^2 + A1.^2 ) ./ E_minus.^2;
  50.   
  51.   f_x = F_oil_same * ( 3* u(5) *V - sin(alpha) * G - 2 *cos(alpha)*S );
  52.   f_y = F_oil_same * ( 3* u(7) *V + cos(alpha) * G - 2 *sin(alpha)*S );   
  53.   
  54.   fx = sigma * f_x;
  55.   fy = sigma * f_y;              
  56.   
  57. H = 1/2 * (sign(abs(e-1)) + sign(e-1));
  58. Fx_rub = -delta_0 * (e-1)*kr./e * (u(1) - f.* u(3))*H;
  59. Fy_rub = -delta_0 * (e-1)*kr./e * (f.* u(1) + u(3))*H;
  60.    
  61.   
  62.   
  63.   uu = zeros(8,1);
  64.   uu(1) = u(2);
  65.   uu(2) = -c1/(m1*omega) * u(2) - Ke/(m1*omega^2) * (u(1) - u(5)) + ...
  66.       e0 * cos(T)/delta_0 + Fx/(m1*omega^2*delta_0)  + Fx_rub/(m1*omega^2*delta_0) ;
  67.   uu(3) = u(4);
  68.   uu(4) = -c1/(m1*omega) * u(4) - Ke/(m1*omega^2) * (u(3) - u(7)) + ...
  69.       e0 * sin(T)/delta_0 + Fy/(m1*omega^2*delta_0)  + Fy_rub/(m1*omega^2*delta_0);
  70.   uu(5) = u(6);
  71.   uu(6) = -c2/(m2*omega) * u(6) - Ke/(2*m2*omega^2) * (u(5) - u(1)) + fx/(m2*omega^2*delta_0);
  72.   uu(7) = u(8);
  73.   uu(8) = -c2/(m2*omega) * u(8) - Ke/(2*m2*omega^2) * (u(7) - u(3)) + fy/(m2*omega^2*delta_0);
  74.   
  75.   
复制代码


求解


  1. period = 2*pi;
  2. step = period/200;
  3. tspan = 0:step:period;
  4. global Ij
  5. Ij = 600;
  6. s = [1.101267007 -0.117826981 2.501571845 0.837573562 0.360137403 -0.017557353 1.715633159 0.535182987];
  7.   
  8.     y0 = [s(1) s(2) s(3) s(4) s(5) s(6) s(7) s(8)];
  9.     [t,x] = ode45('equ_6_11',tspan,y0);

复制代码


在此初值条件下得到的结果为复数,首次遇到这样的情况。如改用其他初值,如s = [0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1]则可以顺利求解。
然而,这一组初值是通过迭代获得,无法更改,其结果对后续运算也会产生影响。
请教大家,为什么会出现复数解,应采用何种方法加以解决。
回复
分享到:

使用道具 举报

发表于 2012-8-15 13:39 | 显示全部楼层
代码没错呀,这多试几次看看。。
 楼主| 发表于 2012-8-16 09:55 | 显示全部楼层
回复 2 # jxldc.com 的帖子

代码没有毛病。问题主要是在采用第一组初值时,得到的结果是复数的,不知道这是什么原因造成的。
发表于 2012-8-19 08:06 | 显示全部楼层
感觉 应该是没什么问题的
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-19 10:35 , Processed in 0.046238 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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