0

我正在尝试使用lsqcurvefitlinked with来拟合函数MultiStart。问题是获得的结果与训练数据高度不一致。

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

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

第一步(创建目标函数)

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

第三步(设定界限)

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 初始值和优化值。

在此处输入图像描述

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

任何帮助将不胜感激。

提前感谢您的宝贵时间。

4

0 回答 0