声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2159|回复: 4

[综合讨论] 这个最小二乘法模态参数识别程序哪里出错了?

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

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

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

x
%最小二乘法模态参数识别(复模态—频响函数实虚部)
clear
clc
close all hidden
format long
global mn
%fni=input('最小二乘法模态参数识别-输入数据文件名','s');
%fid=fopen(fni,'r')
%mn=fscanf(fid,'%f',1);     %模态阶数
%df=fscanf(fid,'%d',1);     %频率间隔
%f0=fscanf(fid,'%d',mn);    %模态频率初值数组
%d0=fscanf(fid,'%d',mn);    %模态阻尼比初值数组
%fno=fscanf(fid,'%d',1);    %读入输出数据文件名
%b=fscanf(fid,'%f',[2 inf]); %实测频响函数实部虚部数据
%status=fclose(fid);
mn=3;df=0.1953125;f0=[5 10 20];d0=[0.05 0.05 0.05];fno='out8_2a.mat';
%tt=0:0.01:20;
%y=(1-0.2*tt).*sin(2*pi*5*tt);
%yy=fft(y);y=yy(1:1000);
%H0=[real(y);imag(y)];
load y
b=[y(1:10);y(11:20)];
f=0:df:(length(b(1,:))-1)*df;
w=2*pi*f;
H=b(1,:)+b(2,:)*i;
w0=2*pi*f0;
for j=1:mn
    l=4*(j-1);
    x0(l+1:l+4)=[-w0(j)*d0(j),w0(j)*sqrt(1-d0(j)^2),1,1];
end
x=lsqcurvefit('fun82',x0,w,H);
for j=1:mn
    l=4*(j-1);
    c=x(l+1)+i*x(l+2);
    d=x(l+3)+i*x(l+4);
    F(j)=abs(c)/(2*pi);
    D(j)=-real(c)/abs(c);
    S(j)=d;
end
H1=fun82(x,w);
subplot(2,1,1);
plot(f,real(H),':',f,real(H1));
xlabel('频率(Hz)');
ylabel('实部');
legend('实测','拟合');
grid on;
subplot(2,1,2);
plot(f,imag(H),':',f,imag(H1),'r');
xlabel('频率(Hz)');
ylabel('虚部');
legend('实测','拟合');
grid on;
fid=fopen(fno,'w');
fprintf(fid,'   频率(Hz)   阻尼比(%%)   振型系数\n');
for k=1:mn
   fprintf(fid,'%10.4f  %10.4f  %10.6f\n',F(k),D(k)*100,imag(S(k)));
end
status=fclose(fid);


其中b=[y(1:10);y(11:20)];一旦改变y响亮的长度,比如改成b=[y(1:20);y(21:40)];就会出现错误。请教一下是怎么回事?

回复
分享到:

使用道具 举报

发表于 2013-11-2 09:38 | 显示全部楼层
求助完整格式:出错代码和出错提示
 楼主| 发表于 2013-11-2 12:34 | 显示全部楼层

??? Error using ==> qr
Complex sparse QR is not yet available.

Error in ==> aprecon at 57
   RPCMTX = qr(TM(:,p));

Error in ==> trdog at 47
         [R,permR] = feval(pcmtx,H,pcoptions,DM,DG,varargin{:});

Error in ==> snls at 334
      [sx,snod,qp,posdef,pcgit,Z] = trdog(x,g,A,D,delta,dv,...

Error in ==> lsqncommon at 153
    [xC,FVAL,LAMBDA,JACOB,EXITFLAG,OUTPUT,msg]=...

Error in ==> lsqcurvefit at 258
[xCurrent,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...

Error in ==> cx8_2a at 31
x=lsqcurvefit('fun82',x0,w,H);

这是把y向量的长度改成b=[y(1:20);y(21:40)];出现的错误
发表于 2013-11-7 15:41 | 显示全部楼层
bafenghan5 发表于 2013-11-2 12:34
??? Error using ==> qr
Complex sparse QR is not yet available.

感觉楼主提供的不够完整!? fun82? y?
无法复製楼主的情况, 又不曾有此经验, 实在无法猜测...
发表于 2013-12-8 19:57 | 显示全部楼层
估计是数据饱和或者是不收敛了!!希望楼主好好再调试一下程序……
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-28 19:50 , Processed in 0.061709 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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