马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
由于要对测量所得阻抗曲线进行拟合,阻抗由电阻,电容,电感组成,所以会出现复数。
matlab程序如下:
function z = myfun(a, f);
f1 = f;
w=2*pi*f1;
s=i*w;
z=s*a(1)./(s.^2*a(1)*a(2)+s*a(1)/a(3)+1)+s*a(4)*a(5)./(s*a(4)+a(5))+s*a(6)+a(7);(这就是阻抗表达式)
aa=load('R_mode.dat');
bb=load('ph_mode.dat');
lth=length(aa);
f=aa(1:end,1);%频率
z=aa(1:end,2);%阻抗模值
ph=bb(1:end,2);%相位角
x=z.*sin(ph*2*pi/360);
r=z.*cos(ph*2*pi/360);
R=r+i*x;
a0= [1,1,1,1,1,1,4]; % 初始值
option=optimset('MaxFunEvals',1e10,'maxiter',1e10);
[a, resnorm] = lsqcurvefit(@myfun_liu,a0, f, R, [], [], option);
%画图
f1 = f;
w=2*pi*f1;
s=i*w;
zz=s*a(1)./(s.^2*a(1)*a(2)+s*a(1)/a(3)+1)+s*a(4)*a(5)./(s*a(4)+a(5))+s*a(6)+a(7);
plot(f,z,'r',f,abs(zz));
所作出图形如下:蓝线是拟合出来的,红线是实测的。
两条曲线吻合很好。但是:a(1:7)应该是实数,但是拟合出来的a为复数。怎么解决这个问题啊。请高手指教啊! |