声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2056|回复: 3

[编程技巧] 请教:最小二乘法曲线拟合问题-怎么处理实数虚数

[复制链接]
发表于 2009-8-11 16:55 | 显示全部楼层 |阅读模式

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

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

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为复数。怎么解决这个问题啊。请高手指教啊!
untitled.jpg

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2009-8-11 17:57 | 显示全部楼层

回复 楼主 ouc209 的帖子

没资料试! 凭LZ的描述及个人直觉, 将a(7)改为real(a(7))试试!
 楼主| 发表于 2009-8-11 19:01 | 显示全部楼层

回复 沙发 ChaChing 的帖子

只改a(7)吗,a是一个数列
发表于 2009-8-11 23:53 | 显示全部楼层

回复 板凳 ouc209 的帖子

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)+real(a(7));试试!
不过个人没把握!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-4-27 23:08 , Processed in 0.100329 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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