声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 15708|回复: 126

[其他相关] 我这个非线性方程程序怎么求不出来啊 帮忙看看

 关闭 [复制链接]
发表于 2007-7-11 21:55 | 显示全部楼层 |阅读模式

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

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

x
我在解一个非线性方程组时,没有设置循环,怎么程序一直在运行
这是怎么回事啊     非线性方程还会出现这种错误?  
这是我的程序:
主程序
function Rotors_System_Func
clear
clc
global BN Nb1 Nb2 w1 w2 Ro1 Ri1 Ro2 Ri2
n_one_T=1;   
n_T=1;
%e217QT(85*15*28)
Ro1=48.828;
Ri1=68.672;
Nb1=10;
%6D2272822(110*140*19)
Ro2=66.515;
Ri2=58.5;
Nb2=34;
n_n=0;
w2_min=100;
w2_max=200;
w2_step=100;
w1_rpm=11000;
q_initial(1:8,1)=1e-11;
BN=Ri1/(Ri1+Ro1)*Nb1;
tic
w2_rpm=10400;
%for w2_rpm=w2_min:w2_step:w2_max
    n_n=n_n+1
    w2=w2_rpm/60;
    w1=w1_rpm/60;
    T_vc=2*pi/w2;
    dt=T_vc/n_one_T;
    time=n_T*T_vc;
    n=round(time/dt);
    t_span(1:n)=linspace(0,time,n);
    %options=odeset('RelTol',1e-5);
    [t,q]=ode45('Rotors_System_Sub_Func',t_span,q_initial);
%end
toc
%subplot(2,1,1);plot(w2_rpm,q(:,1),'k.')
%subplot(2,1,2);
plot(q(8000:100:10000,1),q(8000:100:10000,2))
这是子程序:
function dq=Rotors_System_Sub_Func(t,q)
global BN Nb1 Nb2 w1 w2 Ro1 Ri1 Ro2 Ri2
r01=2e-2;
r02=5e-2;
m1=7.86;
m2=11.93;
W1=m1*9.8;
W2=m2*9.8;
Fx11=0;
Fy11=0;
%Deformation=zeros(10,1);
for i=1:Nb1
    Deformation=zeros(Nb1,1);
    sita(i)=2*pi/Nb1*(i-1)+BN/Nb1*w1*2*pi*t;
    Deformation(i,1)=q(1,1)*cos(sita(i))+q(2,1)*sin(sita(i))-r01;
    if Deformation(i)<=0
        Deformation(i)=0;
    end
    Kb1=1.4656e6;
    Kb2=1.7518e6;
    fx11=Kb1*Deformation(i)^1.5*cos(sita(i));
    fy11=Kb1*Deformation(i)^1.5*sin(sita(i));
   
    Fx11=Fx11+fx11;
    Fy11=Fy11+fy11;
end
Fx12=Fx11;
Fy12=Fy11;
Fx21=0;
Fy21=0;
for j=1:Nb2
    sita(j)=2*pi/Nb2*(j-1)+(Ro2/(Ro2+Ri2)*w1+Ri2/(Ro2+Ri2)*w2)*2*pi*t;
    Deformation1(j,1)=q(3,1)*cos(sita(j))+q(4,1)*sin(sita(j))-r02;
    if Deformation1(j)<=0
        Deformation1(j)=0;
    end
   
    fx21=Kb2*Deformation1(j)^1.1*cos(sita(i));
    fy21=Kb2*Deformation1(j)^1.15*sin(sita(i));
   
Fx21=Fx21+fx21;
Fy21=Fy21+fy21;
end
Fx22=0;
Fy22=0;
for k=1:Nb1
    sita(k)=2*pi/Nb1*(k-1)+BN/Nb1*w2*2*pi*t;
    Deformation2(k,1)=q(3,1)*cos(sita(i))+q(4,1)*sin(sita(i))-r01;
    if Deformation2(k)<=0
        Deformation2(k)=0;
    end
   
    fx22=Kb1*Deformation2(k)^1.5*cos(sita(k));
    fy22=Kb1*Deformation2(k)^1.5*sin(sita(k));
   
    Fx22=Fx22+fx22;
    Fy22=Fy22+fy22;
end
P=1470;
Cx11=1.500;Cy11=1.500;
Cx12=2.500;Cy12=2.500;
Cx21=2.000;Cy21=2.000;
Cx22=7.000;Cy22=7.000;
dq(1:4,1)=q(5:8,1);
dq(5:8,1)=1000*[
          -1/m1*((Cx11+Cx12)*q(5,1)+Fx11+Fx12-(W1+Fx21+Cx21*q(7,1)));...
          -1/m1*((Cy11+Cy12)*q(6,1)+Fy11+Fy12-(Fy21+Cy21*q(8,1)));
          -1/m2*((Cx21+Cx22)*q(7,1)+Fx21+Fx22-(P+W2));
          -1/m2*((Cy21+Cy22)*q(8,1)+Fy21+Fy22)]
回复
分享到:

使用道具 举报

发表于 2007-7-11 22:06 | 显示全部楼层
你的子程序里面还有有循环啊
 楼主| 发表于 2007-7-11 22:12 | 显示全部楼层

回复 #2 无水1324 的帖子

那就几个赋值语句   循环数设置也不是很大, 不会影响很多的啊
我是说主程序里没有设置循环

这个程序我算了一晚上都算完
大师指点一下
发表于 2007-7-11 22:29 | 显示全部楼层
你这里n等于1。
我现在没有时间实验室马上停电,明天再说了
 楼主| 发表于 2007-7-11 22:47 | 显示全部楼层

回复 #4 无水1324 的帖子

刚开始我取了400个周期,一个周期取了200个点,用12个多小时也没运行结束,

一狠心     我今天下午把取极限小,取一个周期,一个周期作为一个步长  
算了十几分钟也没算出来

最后我郁闷的就没再弄它
发表于 2007-7-12 08:51 | 显示全部楼层
我算了一下,同样的问题。
n=round(time/dt);这个是等于1?

在这里有什么意思?
 楼主| 发表于 2007-7-12 09:00 | 显示全部楼层

回复 #6 无水1324 的帖子

其实就是一个time/dt,也没什么意思呵呵  
n就是总采样点数
发表于 2007-7-12 09:01 | 显示全部楼层
算不出来,来了就算,到现在也没算出来
循环问题吧
 楼主| 发表于 2007-7-12 09:11 | 显示全部楼层

回复 #8 咕噜噜 的帖子

主程序先开始我设了一个200次循环,算不出来我改成3次,最后我改成一次,
再最后我把一个周期的采样点由100取为1,:'( 它还是出不来    呵呵
最最后我只有请教大家了 。。。:@L
按说子程序就几十个赋值运算不会影响主程序运行的啊
发表于 2007-7-12 09:25 | 显示全部楼层

回复 #7 sssssxxxxx921 的帖子

采样点数怎么是1呢?
确实你这个问题,需要到matlab板块看看。有一个讲关于提高matlab运行速度的
发表于 2007-7-12 09:33 | 显示全部楼层
会不会是你的参数赋值有问题,你看看我的这里出来的一部分数据
dq =1.0e+028 *【0.0000  -0.0000  -0.0000  0.0000  -0.0013  0.0063  -6.0939  0.0735】
这么大的数据,有可能一部分比较大,另一部分很小,被当作零了,出现死循环
 楼主| 发表于 2007-7-12 09:52 | 显示全部楼层

回复 #10 无水1324 的帖子

为了看是不是运行速度的问题我取了极限小值,算的点数少了   用的时间不是少很多吗呵呵
 楼主| 发表于 2007-7-12 09:54 | 显示全部楼层

回复 #11 咕噜噜 的帖子

前四个为0,后四个数量级很大   也看到了  
我也想过这个问题   但我看了赋值应该没问题的,
我再仔细核对一下单位
发表于 2007-7-12 10:48 | 显示全部楼层

回复 #12 sssssxxxxx921 的帖子

这个道理是对的。
 楼主| 发表于 2007-7-12 11:05 | 显示全部楼层
:victory: 呵呵  这几天脑袋都大了   一边是VC  一边是Matlab的   
什么都没学精通 :@o
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-18 08:32 , Processed in 0.068677 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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