注册 登录
编程论坛 Matlab

求指导。。。本程序for循环中的程序是什么意思?怎样理解?

anpengqiang 发布于 2013-09-25 16:31, 668 次点击
%随机减量法模态参数识别预处理
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear
clc
close all hidden
format long
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fni=input('随机减量法模态参数识别预处理-输入数据文件名:','s');
fid=fopen(fni,'r');
sf = fscanf(fid,'%f',1);     %采样频率
np = fscanf(fid,'%d',1);     %输出数据长度
fno = fscanf(fid,'%s',1);    %输出数据文件名
x = fscanf(fid,'%f',[1,inf]);%输入时程信号数据存成行向量
status=fclose(fid);
%建立离散输出时间向量
t=0:1/sf:(np-1)/sf;
%取输入数据长度
nt=length(x);
%设置截取振幅为输入信号标准差的1.5倍
s=1.5*std(x);
%获取输入信号的子样本函数进行叠加
m=0;
y=zeros(1,np);
for k=2:nt-np
  a=abs(x(k-1)-s);
  b=abs(x(k)-s);
  c=abs(x(k+1)-s);
  if b<a & b<c
    y(1:np)=y(1:np)+x(k:k+np-1); m=m+1;
  end
end
%对叠加结果做平均
y=y./m;
%绘制自由振动时程曲线图
plot(t,y);
xlabel('时间 (s)');  
ylabel('幅值');
grid on;                        

%打开文件输出随机减量法计算的结果               
fid=fopen(fno,'w');   
for k=1:np                           
  fprintf(fid,'%f\n',y(k));
end                           
status=fclose(fid);
1 回复
#2
3037709572013-09-25 17:08
是这个循环:
for k=2:nt-np %做循环k从2到nt-np,步长为1
  a=abs(x(k-1)-s);%计算一个行向量中连续(从第一个元素开始)三个元素分别与振幅之间的绝对值。
  b=abs(x(k)-s); %第二个元素与振幅之间的绝对值
  c=abs(x(k+1)-s);%第三个元素与振幅之间的绝对值

  if b<a & b<c  %如果行向量中连续三个元素中的第二个元素与振幅之间的绝对值最小则执行下面的语句
    y(1:np)=y(1:np)+x(k:k+np-1);%这个应该是行向量相加的运算
    m=m+1;%记录这种操作的次数,为对叠加结果做平均而准备的m
  end
end

还是这个循环:
for k=1:np % k从1开始到np结束,步长为1.                      
  fprintf(fid,'%f\n',y(k));%这个应该是将计算结果循环写入文件当中去。
end  
1