Matlab - 使用lsqcurvefit

时间:2015-09-21 13:42:28

标签: matlab model-fitting function-fitting

我正在尝试使用与lsqcurvefit关联的MultiStart来填充函数。问题是获得的结果与训练数据高度不一致。

整个问题与两个串联的RC并联电路(通过实验获得-xdata,ydata-)的频率响应有关,并通过拟合适当的阻抗方程计算R,C值。

我遵循的步骤是(根据mathworks教程):

步骤I(创建目标函数)

function [Ztotal] = RQRQ_test(c,omega)
% c = [Rs CPE1 n1 Rct1 CPE2 n2 Rct2];
% τCPE1
YCPE1 = c(2)*(1i*omega).^c(3);
Y1 = YCPE1 + c(4).^-1;
Z1 = 1./Y1;
% τCPE2
YCPE2 = c(5)*(1i*omega).^c(6);
Y2 = YCPE2 + c(7).^-1;
Z2 = 1./Y2;
% Ztotal
Ztotal = (abs(Z1 + Z2 + c(1)))';

第二步(创建训练数据)

omega = logspace(5,-1,120); %xdata
Zexp = xlsread('(RQ)(RQ)_test.xlsx', 'D2:D121'); %ydata
c0 = [3 1e-04 0.9 20 1e-06 0.9 100]; %initial values of c

步骤III(设定界限)

lb = [2 1e-05 0.9 10 1e-06 0.9 50];
ub = [8 1e-01 1 100 1e-03 1 200];

第四步(设置问题)

problem = createOptimProblem('lsqcurvefit','x0',c0,'objective',@RQRQ_test,...
'lb',lb,'ub',ub,'xdata',omega,'ydata',Zexp);

第五步(运行MultiStart

[xmulti,errormulti] = run(ms,problem,50)

运行上述程序后,得到的结果如下:

MultiStart completed the runs from all start points.

All 50 local solver runs converged with a positive local solver exit flag.
xmulti =
    8.0000    0.0083    1.0000  100.0000    0.0008    0.9000   85.1574
errormulti =
   1.3146e+04

在下面附图中,直线和空心圆分别对应于c初始值和优化值。

enter image description here

我无法理解错误为何如此之大。我的代码或处理问题的方式有问题吗?这可能是由于我的matlab经验不足,但是我一直在努力寻找解决方案。

任何帮助都不仅仅是值得赞赏的。

提前感谢您的时间。

0 个答案:

没有答案