猴王 发表于 2007-7-2 10:50

请各位对照我师兄的论文看看我的程序

我首先模拟的是一个结构的加速度图形,但和师兄的不一样,然后通过小波分析采用bior6.8 分析它的损伤信号,但关键是损伤5%不知道该怎么加进去,这是我的硕士论文还请各位高手帮忙,小弟感激不尽,以下是我的程序,做如下说明:

说明:
在下面的程序中,其中的k就是以后将要出现5%损伤的一个系数,不知道怎么是他成为损伤5%的信号,在m文件中主要对应的解得方程是mx''+cx'+kx=f
danziyoudukuangjia.m

function xdot=danziyoudukuangjia(t,x)
F=20*sin(25*t);
M=31.2;
C=0.01;
K=67.51;
xdot=;

执行文件:
执行文件说明:
在这个程序里面我加入了冲击信号x2,这是为了符合师兄论文中,30s出现损伤的条件,但请注意我并没有改变刚度来实现,这是现在最大的问题,再就是,我师兄的加速度信号中也还有5%的k的损伤,我也没有加进去,请各位高手帮忙啊
clc;clear all;
close all;
t0=0;
   tf=60;
   x0=';
   =ode45('danziyoudukuangjia',,x0);
   d=x(:,1);
   v=x(:,2);
   
t=0:0.005:60;
F=20*sin(25*t);                              
M=31.2;
C=0.01;
K=67.51;
s1=(1/M)*(F-C*v.'-K*d.');

T=12001;
t=0:0.005:60;
x2=zeros(1,T);
x2(6001)=1;
s=s1+0.01*randn(1,12001)+x2;

%subplot(311);plot(t,s);
%AXIS();%单层框架加速度信号输出

%下面进行离散的单尺度小波变换并生成,各尺度上的信号

=wavedec(s,5,'bior6.8');%对第一信号进行3尺度一维离散小波分解,采用墨西哥小帽函数
%提取结构的低频和高频信号
ca3=appcoef(c,l,'bior6.8',5);%提取第三尺度系数的低频
=detcoef(c,l,);%提取第一、二、三尺度系数的高频
%重构信号的低频和高频部分
a3=wrcoef('a',c,l,'bior6.8',3);
d1=wrcoef('d',c,l,'bior6.8',1);
d2=wrcoef('d',c,l,'bior6.8',2);
d3=wrcoef('d',c,l,'bior6.8',3);
d4=wrcoef('d',c,l,'bior6.8',4);
d5=wrcoef('d',c,l,'bior6.8',5);
%显示多尺度一维信号的分解结果

subplot(611);plot(t,a3);title('信号的低频细节部分');%AXIS();
subplot(612);plot(t,d1);title('Detailsd1');%AXIS();
subplot(613);plot(t,d2);title('Detailsd2');%AXIS();
subplot(614);plot(t,d3);title('Detailsd3');%AXIS();
subplot(615);plot(t,d4);title('Detailsd4');%AXIS();
subplot(616);plot(t,d5);title('Detailsd5');%AXIS();

zhlong 发表于 2007-7-2 11:01

在function xdot=danziyoudukuangjia(t,x) 中
添加下面这句:
K=(t<=30)*K+(t>30)*K*0.95
能否实现你的以K的减少来表现损伤出现这个目的。

VibrationMaster 发表于 2007-7-2 11:42

将 "K=67.51;"这句话改成如下就可以了
if(t<30)
      K=67.51;
else
      K=67.51*0.95;
end

VibrationMaster 发表于 2007-7-2 11:46

本帖最后由 wdhd 于 2016-9-9 13:18 编辑

原帖由 zhlong 于 2007-7-2 11:01 发表
在function xdot=danziyoudukuangjia(t,x) 中
添加下面这句:

能否实现你的以K的减少来表现损伤出现这个目的。
我不是很喜欢这种写程序的风格,虽然程序比较短,但是意义不明显. 等过几天之后,你自己再看的时候,自己也要想一想是什么意思.

猴王 发表于 2007-7-2 15:15

回复 #3 VibrationMaster 的帖子

请继续请教,我现在的问题是,加速度图形现在和师兄的图形现在差别还是很大,还有执行文件中k=61.75还是加入那个循环语句啊,一旦在执行文件和m文件中都加入了循环语句,损伤就看不出来了,这是我修改后的程序:
clc;clear all;
close all;
t0=0;
   tf=60;
   x0=';

   =ode45('danziyoudukuangjia',,x0);
   d=x(:,1);
   v=x(:,2);
   
t=0:0.005:60;

F=20*sin(25*t);                              
M=31.2;
C=0.01;
K=67.51;
s1=(1/M)*(F-C*v.'-K*d.');

T=12001;
t=0:0.005:60;
x2=zeros(1,T);
x2(6001)=1;

s=s1+0.01*randn(1,12001)+x2;



%subplot(311);plot(t,s);
%AXIS();%单层框架加速度信号输出


%下面进行离散的单尺度小波变换并生成,各尺度上的信号


=wavedec(s,5,'bior6.8');%对第一信号进行3尺度一维离散小波分解,采用墨西哥小帽函数

%提取结构的低频和高频信号
ca3=appcoef(c,l,'bior6.8',5);%提取第三尺度系数的低频
=detcoef(c,l,);%提取第一、二、三尺度系数的高频

%重构信号的低频和高频部分
a3=wrcoef('a',c,l,'bior6.8',3);
d1=wrcoef('d',c,l,'bior6.8',1);
d2=wrcoef('d',c,l,'bior6.8',2);
d3=wrcoef('d',c,l,'bior6.8',3);
d4=wrcoef('d',c,l,'bior6.8',4);
d5=wrcoef('d',c,l,'bior6.8',5);

%显示多尺度一维信号的分解结果


subplot(611);plot(t,a3);title('信号的低频细节部分');%AXIS();

subplot(612);plot(t,d1);title('Detailsd1');%AXIS();

subplot(613);plot(t,d2);title('Detailsd2');%AXIS();

subplot(614);plot(t,d3);title('Detailsd3');%AXIS();

subplot(615);plot(t,d4);title('Detailsd4');%AXIS();

subplot(616);plot(t,d5);title('Detailsd5');%AXIS();
您改后运行了吗,我运行后检测不到损伤了,请指教

[ 本帖最后由 zhangnan3509 于 2007-7-10 17:17 编辑 ]

猴王 发表于 2007-7-2 15:22

贴错了

m文件修改:
function xdot=danziyoudukuangjia(t,x)
F=20*sin(25*t);
M=31.2;
C=0.01;
if(t<30)
      K=67.51;
else
      K=67.51*0.95;
end
xdot=;



执行文件:
clc;clear all;
close all;
t0=0;
   tf=60;
   x0=';
   =ode45('danziyoudukuangjia',,x0);
   d=x(:,1);
   v=x(:,2);
   
t=0:0.005:60;
F=20*sin(25*t);                              
M=31.2;
C=0.01;
if(t<30)
      K=67.51;
    else
      K=67.51*0.95;
          end
s1=(1/M)*(F-C*v.'-K*d.');
%T=12001;
%t=0:0.005:60;
%x2=zeros(1,T);
%x2(6001)=1;
s=s1+0.01*randn(1,12001);%+x2;

%subplot(311);plot(t,s);
%AXIS();%单层框架加速度信号输出

%下面进行离散的单尺度小波变换并生成,各尺度上的信号

=wavedec(s,5,'bior6.8');%对第一信号进行3尺度一维离散小波分解,采用墨西哥小帽函数
%提取结构的低频和高频信号
ca3=appcoef(c,l,'bior6.8',5);%提取第三尺度系数的低频
=detcoef(c,l,);%提取第一、二、三尺度系数的高频
%重构信号的低频和高频部分
a3=wrcoef('a',c,l,'bior6.8',3);
d1=wrcoef('d',c,l,'bior6.8',1);
d2=wrcoef('d',c,l,'bior6.8',2);
d3=wrcoef('d',c,l,'bior6.8',3);
d4=wrcoef('d',c,l,'bior6.8',4);
d5=wrcoef('d',c,l,'bior6.8',5);
%显示多尺度一维信号的分解结果

subplot(611);plot(t,a3);title('信号的低频细节部分');%AXIS();
subplot(612);plot(t,d1);title('Detailsd1');%AXIS();
subplot(613);plot(t,d2);title('Detailsd2');%AXIS();
subplot(614);plot(t,d3);title('Detailsd3');%AXIS();
subplot(615);plot(t,d4);title('Detailsd4');%AXIS();
subplot(616);plot(t,d5);title('Detailsd5');%AXIS();
报错内容:
??? Error: File: C:\MATLAB6p5\work\danziyoudukuangjia.m Line: 1 Column: 5
Missing operator, comma, or semicolon.
Error in ==> C:\MATLAB6p5\toolbox\matlab\funfun\private\odearguments.m
On line 76==>   if (nargin(ode) == 2)         
Error in ==> C:\MATLAB6p5\toolbox\matlab\funfun\ode45.m
On line 155==> [neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, args, ...

猴王 发表于 2007-7-2 15:24

继续请教阿

现在报错出了这些错误,我每天上网的时间有限制,我在外省,也没有些知道材料,劳烦各位费心,小弟感激不尽

猴王 发表于 2007-7-2 17:16

问题解决,信号中的无法检测出损伤信号!!!

现在信号中的刚度损伤信号无法检测了,我现在迷糊了,到底k的循环语句是加在m文件里面还是加在执行文件里面,还是都加,请指教,时间比较紧阿,麻烦各位了,我上传我做出来图形现在传不上来,顺便请各位告诉我怎么把自己的图形,贴到回复里面啊

[ 本帖最后由 zhlong 于 2007-7-2 17:23 编辑 ]

zhlong 发表于 2007-7-2 17:23

回复 #8 猴王 的帖子

如何发图片见下贴18楼
http://forum.vibunion.com/forum/thread-44251-2-4.html

zhlong 发表于 2007-7-2 17:33

回复 #8 猴王 的帖子

我试了一下没有出现你的报错信息,不过得到的图形还是和上次差不多。
我觉得你是不是应该考虑一下你的动力学方程是不是对的

VibrationMaster 发表于 2007-7-2 18:57

本帖最后由 wdhd 于 2016-9-9 13:18 编辑

原帖由 猴王 于 2007-7-2 17:16 发表
现在信号中的刚度损伤信号无法检测了,我现在迷糊了,到底k的循环语句是加在m文件里面还是加在执行文件里面,还是都加,请指教,时间比较紧阿,麻烦各位了,我上传我做出来图形现在传不上来,顺便请各位告诉我怎 ...
1。只加在ode所调用的文件
2。把刚度减小的狠一些,比如减少到5%
3。可暂时将阻尼设成0,然后再逐渐加大
4。执行文件中计算s1(加速度)的方式是不恰当的,应该根据v由差分来计算。

[ 本帖最后由 zhlong 于 2007-7-2 19:33 编辑 ]

猴王 发表于 2007-7-2 19:39

本帖最后由 wdhd 于 2016-9-9 13:18 编辑

原帖由 VibrationMaster 于 2007-7-2 18:57 发表

1。只加在ode所调用的文件
2。把刚度减小的狠一些,比如减少到5%
3。可暂时将阻尼设成0,然后再逐渐加大
4。执行文件中计算s1(加速度)的方式是不恰当的,应该根据v由差分来计算。
十分感谢您的耐心指教,针对您的第一个改正,也就是我在计算s1的时候根本不用再把k,m.c,f进行另外的附值,那我的执行文件应该怎么来完成,第二,刚度如果减小到5%那这个结构就失去了它的使用价值,也就是我的检测就毫无意义,第三,阻尼可以设成0,阻尼的大小主要影响到其图形的能量,我觉得这个对奇异点的影响应该不大,第四,可不可以请您对差分作个示范,我这里的教材,就个matlab和有限元的联系,劳烦您了,算了,我去镇上看看,有没有卖的吧,再次十分感谢您的回复指导

zhlong 发表于 2007-7-2 19:45

s1=diff(v);
不过这个和你原来计算的似乎差别不大。

猴王 发表于 2007-7-2 19:46

回复 #11 VibrationMaster 的帖子

是不是在执行文件中还是这样的格式呢F=20*sin(25*t);                              
M=31.2;
C=0.01;
K=67.51
而function里面,k就是那个循环语句

猴王 发表于 2007-7-2 19:51

回复 #11 VibrationMaster 的帖子

请您,能不能给我做个把k损伤5%加入信号的示范,我这里实在材料相当少
页: [1] 2 3 4
查看完整版本: 请各位对照我师兄的论文看看我的程序