nevers 发表于 2007-12-12 23:05

关于用matlab求解随机振动传递函数无穷限积分编程

最近在学习随机振动的知识,在编写一个关于频域分析均方响应的程序,对于传递函数Hn(w)小于w5次时,可以利用常用的积分公式求传递函数的无穷限

积分,但是当w大于6次后,不太了解积分公式,各位高手有没有编过类似的求传递函数无穷限积分的程序?我自己有编了quad,quadl数值积分w小于5的一小程序,

但是结果与利用常用积分公式求解出来结果相差很大,各位前辈有涉及过这方面的知识没?有没有编写这个直接利用数值积分求无穷限积分的程序?敬请指教,谢谢

sigma665 发表于 2007-12-13 09:09

"我自己有编了quad"

matlab里有自己带的啊,那个不好用吗

[ 本帖最后由 sigma665 于 2007-12-13 10:02 编辑 ]

nevers 发表于 2007-12-13 09:38

很不好用,也有可能是我自设的积分上下限不太正确,你一般把积分的上下限定为多少?

-1e15~1e25?精度总是设置得不太对,与利用积分公式的结果对比相差很大。

[ 本帖最后由 nevers 于 2007-12-13 09:40 编辑 ]

sigma665 发表于 2007-12-13 10:03

原帖由 nevers 于 2007-12-13 09:38 发表 http://www.chinavib.com/forum/images/common/back.gif
-1e15~1e25?
这么大应该够了吧

nevers 发表于 2007-12-13 12:22

znc=0.15;
zn=0.05;
pm=1;
pk=0.2;
w1=2;
pw=0.1
   
% 频域H1(w)传递函数系数
syms w
B10=-w1^2*(pw^2+pm*pk+pk);
B11=-2*w1*(zn*pw+znc*pm+2*znc);
B12=-1;
B13=0;

A0=w1.^4.*((1+pk).*(pw.^2+pm.*pk)-pk.^2.*pm);
A1=2.*w1.^3.*(1+pk).*(zn.*pw+znc.*pm)+2.*w1.^3.*(zn+znc).*(pw.^2+pm.*pk)-4.*pk.*pm.*znc.*w1.^3;
A2=w1^2*((pw^2+pm*pk)+1+pk+4*(zn+znc)*(zn*pw+znc*pm)-4*znc^2*pm);
A3=2.*w1.*(zn.*pw+znc.*pm+zn+znc);
A4=1;

B1=B10+B11.*(w*i)+B12.*(w.*i).^2;
A=A0+A1.*(i.*w)+A2.*(i.*w)^2+A3.*(i.*w)^3+A4.*(i.*w).^4;
hw1=B1./A;
hw1abs=abs(hw1);
hw1abs2=(hw1abs).^2;
r1=inline(hw1abs2);
qhw01=quadl(r1,-1e15,+1e15,1e-6);   %采用自适应LOBATTO方法计算无穷限积分,精值计算方法

分别计算了积分区间由-1e10~1e25的结果,但是结果相差较远,传递函数不收敛导致??

[ 本帖最后由 nevers 于 2007-12-13 12:24 编辑 ]

天勾 发表于 2012-4-1 12:23

不懂。。。
页: [1]
查看完整版本: 关于用matlab求解随机振动传递函数无穷限积分编程