function dy=regulator001(t,y)
dy =zeros(5,1);
dy(1)=1.4*y(1)/0.00016387*(2.649*2.3/4*y(4)-0.5495*0.00023*(y(1)-101325)^0.5-sign(y(1)-y(2))*0.00055*abs(y(1)-y(2))^0.5);
dy(2)=1.4*y(2)/(0.00032823-y(4)*0.0139)*(sign(y(1)-y(2))*0.00055*abs(y(1)-y(2))^0.5+0.0139*y(5));
dy(3)=1.4*y(3)/(0.0006+y(4)*0.0139)*(-sign(y(3)-101325)*0.0000038*abs(y(3)-101325)^0.5-0.0139*y(5));
dy(4)=y(5);
dy(5)=(9.8*0.1491+700*(0.05-y(4))-(y(2)-y(3))*0.0139)/0.1491;
运行时的命令及初始条件如下:[T,Y]=ode45('regulator001',[0 0.1],[103768.49 103768.49 101325 .35665927e-2 0]);
subplot(1,2,1);plot(T,Y(:,1),'r');subplot(1,2,2);plot(T,Y(:,4),'b')
但是,会出现提示:Warning: Imaginary parts of complex X and/or Y arguments ignored.此提示说明过程中有复数出现。虽然开分数次方会出现复数,但是本人已经用符号函数sign和abs处理,不应当出现复数。希望有牛人能解答。(神奇的是:将程序第三行的参数0.00023改为0.0002就不会出现复数。)
| 更多同济资讯请访问同济大学论坛 | 直接去论坛查看 举报不良信息 广告投放联系 |
最新回复
judejiangs (2008-5-04 21:12:39)
pm2004 (2008-5-05 19:38:04)
QUOTE:
没有修改什么 方程可以解出来但是[T,Y]里肯定是有复数的
sign的参数如果是复数 比如sign(3+4i),那么得出的结果是0.6+0.8i.不是你想的只有正负1
你自己可以在只取其real部分来判断其符号,但是即使这样结果还是带复数的。千万别以为后面部分的系数里不带复数 解出来的值就没有虚数
如果复数部分对你的结果没有啥影响那就用real函数只取T Y的实部好了
不过画出的图是不一样的
这个论坛不能直接传图片我就懒得上图了