声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3530|回复: 13

[随机振动] 虚拟激励法程序求助

[复制链接]
发表于 2008-12-14 11:34 | 显示全部楼层 |阅读模式

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

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

x
学习林家浩教授和张亚辉教授的专著《随机振动的虚拟激励法》时,编制的程序和书上的结果对不上,请大家帮忙看看。
clear;
clc;
n=4;
II=sqrt(-1);
%主结构质量、阻尼、刚度矩阵

M=eye(n)*1.0e+4;
K=eye(n)*1.6*1.0e+7;
%主结构刚度矩阵聚合
zk=zeros(n);

for j=1:(n-1)
zk(j,j)=K(j,j)+K(j+1,j+1);
zk(j,j+1)=-K(j+1,j+1);
zk(j+1,j)=-K(j+1,j+1);
end
zk(n,n)=K(n,n);
k=zk;
m=M;
%求解各阶模态频率
[tzxl,tzz]=eig(k,m);
d=diag(sqrt(tzz));
%振型规一化
for i=1:n
   [tzz1(i),j]=min(d);
   tzxl1(:,i)=tzxl(:,j);
   d(j)=max(d)+1;
end
%振型归一化取第一层振型为1
for j=1:n
   tzxl1(:,j)=tzxl1(:,j)/tzxl1(1,j);
end

w0=tzz1;
w=tzz1/(2*pi);
zhx=tzxl1;
广义阻尼矩阵   
各阶模态阻尼比都取
%阻尼比
ks0=0.05;
ks=ones(n,1)*ks0;
第n阶广义质量:   
%求广义质量
Mn=zhx'*m*zhx;
阻尼矩阵为:
%求阻尼矩阵
C=zeros(n);
for i=1:n
   C(i,i)=2*ks(i)*w0(i)*Mn(i,i);
end
c=(zhx')\C/zhx;
参数
eg即
%过滤白噪声参数
eg=0.6;
wg=15.708;
S0=0.001574;
%按照书上的要求,取频率和时间的最大值和步长
%频率间隔
dw=0.3;
%最大频率范围
maxw=45;
%最大时间值
maxt=40;
%时间间隔
dt=0.2;

%各层各时间点频率点的功率谱密度,循环变量:层数,时间点,频率点
Pwt=zeros(n,maxt/dt,maxw/dw);
%频率点数循环变量wn
wn=1;

%对频率进行循环,求解各频率点的时间历程
for w=0:dw:maxw
x1=1+4*eg^2*(w/wg)^2;
x2=(1-(w/wg)^2)^2+4*eg^2*(w/wg)^2;
Sgw=x1*S0/x2;
s=sqrt(Sgw);
%采用精细积分法进行求解时间历程,得到位移和速度时程
[disp,velp]=JINGXI67(M,zk,c,dt,maxt,w,s,n);
Ywt=disp;
for kkk=1:maxt/dt
%求确定频率下各时间点的功率谱
Yw=Ywt(:,kkk);
  每一时刻和频率点的位移向量,对其进行求共轭和装置得到协方差矩阵,对角上的元素即是每一时刻的各层的功率谱
y1=conj(Yw);
y2=transpose(Yw);

%确定时间点确定频率下的功率谱Yw,取对角线元素
Syyw=y1*y2;
   for kk=1:n
   Pwt(kk,kkk,wn)=Syyw(kk,kk);
   end
end
wn=wn+1;
end






%求解完成后实际上wn为maxw/dw+2,实际频率点个数为maxw/dw+1
%各层的时变方差,循环变量为:层数,时间点
Fangcha=zeros(n,maxt/dt);
for tn=1:maxt/dt
%求解各层的时变方差
for kk=1:n
xx1=zeros(wn-1,1);
%每一个时刻的方差对各频率点进行积分,频率点数取maxw/dw+1,即wn-1
   for wn0=1:wn-1
   xx1(wn0)=Pwt(kk,tn,wn0);
   end
%采用复合梯形求积公式对功率谱进行积分得到方差
Fangcha(kk,tn)=(xx1(1)+xx1(wn-1)+2*sum(xx1(2:wn-1-1)))*dw;
end
end

%画图
c1=(1:maxt/dt)*dt;
d1=Fangcha(1,:)/S0;
d2=Fangcha(2,:)/S0;
d3=Fangcha(3,:)/S0;
d4=Fangcha(4,:)/S0;
figure(3)
plot(c1,d1,'k',c1,d2,'r',c1,d3,'m',c1,d4,'r-')



精细积分的程序
function [disp,velp]=JINGXI67(m,k,c,dt,maxt,w,s,n)
%虚数单位
II=sqrt(-1);
%  中的
IIW=II*w;
I=eye(n);
Z=zeros(n);
离散化n自由度结构受均匀调制演变随机激励 时的运动微分方程可表示为:

其中 为平稳高斯白噪声随机过程向量, 为调制函数。该方程可表示为

其中I为单位矩阵,记
, ,

程序中的A即上面的矩阵A,AF即G
A=[Z,I;-m\k,-m\c];
AF=-1*[zeros(n,1);ones(n,1)];
对线性体系来说,方程为线性向量常微分方程其解为

对上式进行离散化 为时间步长

矩阵T 可用数值方法精细算得 采用函数EXPHDT计算,H即输入的矩阵A,dt即为时间间隔
%采用科茨公式求解非齐次项
%求解积分点的矩阵指数
EXPDT=EXPHDT(A,dt);
EXP0_75DT=EXPHDT(A,0.75*dt);
EXP0_50DT=EXPHDT(A,0.50*dt);
EXP0_25DT=EXPHDT(A,0.25*dt);
第二项 等价于单个函数的积分,采用科茨公式进行积分,具有5阶精度


zeroq=zeros(n,maxt/dt);
disp=zeroq;  
velp=zeroq;  

zerop=zeros(n,1);
dispt=zerop;
velpt=zerop;
UK=[dispt;velpt];

for i=1:maxt/dt
%给出各积分点的X坐标,即时间
t= ;t0_25= ;t0_50= ;t0_75= ;t1=
t=(i-1)*dt;
t0_25=t+0.25*dt;
t0_50=t+0.50*dt;
t0_75=t+0.75*dt;
t1=i*dt;
%调制函数
求解gt= ;gt0_25= ;gt0_50= ;gt0_75= ;gt1= 。
gt=4*(exp(-0.0995*t)-exp(-0.199*t));
gt0_25=4*(exp(-0.0995*t0_25)-exp(-0.199*t0_25));
gt0_50=4*(exp(-0.0995*t0_50)-exp(-0.199*t0_50));
gt0_75=4*(exp(-0.0995*t0_75)-exp(-0.199*t0_75));
gt1=4*(exp(-0.0995*t1)-exp(-0.199*t1));
即AF*exp(IIW*t); 即AF*exp(IIW*t0_25)
FTK=AF*exp(IIW*t)*gt*s;
FT0_25K=AF*exp(IIW*t0_25)*gt0_25*s;
FT0_50K=AF*exp(IIW*t0_50)*gt0_50*s;
FT0_75K=AF*exp(IIW*t0_75)*gt0_75*s;
FTK1=AF*exp(IIW*t1)*gt1*s;

% 即TUK= EXPDT*UK   EXPDT即
TUK=EXPDT*UK;
%采用科茨公式求解非齐次项

X1=7*EXPDT*FTK;
X2=32*EXP0_75DT*FT0_25K;
X3=12*EXP0_50DT*FT0_50K;
X4=32*EXP0_25DT*FT0_75K;
X5=7*FTK1;
TKTK1=1/90*dt*(X1+X2+X3+X4+X5);
即TKTK1

UK1=TUK+TKTK1;
%保存各时刻的位移和速度向量
disp(:,i)=UK1(1:n,:);
velp(:,i)=UK1(n+1:2*n,:);
%将UK1赋给UK进入下一轮循环
UK=UK1;
end




求解
function [T]=EXPHDT(A,dt)
%计算矩阵指数
N=20;
m=2^N;
t=dt/m;
I=eye(size(A));
Ta=A*t+(A*t)^2*(I+(A*t)/3+(A*t)^2/12)/2;
%计算指数矩阵T
for i=1:20
  Ta=2*Ta+Ta^2;
end
T=I+Ta;

[ 本帖最后由 hustdd 于 2008-12-14 11:48 编辑 ]

程序详细说明.doc

181 KB, 下载次数: 104

程序详细说明

EXPHDT.txt

182 Bytes, 下载次数: 84

求指数函数的程序

JINGXI67.txt

1.21 KB, 下载次数: 71

精细积分程序

P67精细积分.txt

2.04 KB, 下载次数: 72

主程序

精细直接积分法的积分方法选择.doc

54.22 KB, 下载次数: 83

这个实际上是pdf格式,得改下后缀名

评分

1

查看全部评分

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2009-7-15 12:20 | 显示全部楼层
楼主说“程序中的A即上面的矩阵A,AF即G”,但实际上程序中写的G为[0;I],未包含g(t),但楼主在程序中积分时是包含了g(t),不知道有没有影响。
发表于 2009-8-8 20:01 | 显示全部楼层
楼主和楼上的能不能留个联系方式,大家交流一下
我的QQ353999102
E-mail:wzy5221027@163.com
发表于 2009-8-12 00:08 | 显示全部楼层
我们学部的林家浩教授,呵呵。。。
发表于 2009-8-28 12:25 | 显示全部楼层
好帖子,学习了!
发表于 2009-11-11 12:25 | 显示全部楼层
好久没上,我的邮箱:iamcsw@126.com,讨论讨论
发表于 2010-12-1 23:11 | 显示全部楼层
顶一个,有用
发表于 2010-12-5 23:37 | 显示全部楼层
学习了,还是蛮有用的
回复 支持 1 反对 0

使用道具 举报

发表于 2010-12-6 13:52 | 显示全部楼层
这本书我也有看过!很麻烦
发表于 2013-1-5 11:46 | 显示全部楼层
发表于 2013-4-26 09:35 | 显示全部楼层
内容不错,谢谢分享
发表于 2015-12-18 10:12 | 显示全部楼层
需要逆虚拟激励法 这个怎么编呢
发表于 2015-12-18 10:14 | 显示全部楼层
需要逆虚拟激励法 这个怎么编呢?
发表于 2020-6-25 12:58 | 显示全部楼层
我怎么弄不明白呢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-4-20 18:25 , Processed in 0.059191 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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