Matlab fminsearch报错:无法执行赋值,左右两侧维度不匹配
解决fminsearch曲线拟合时的维度不匹配错误
错误原因
fminsearch要求目标函数必须返回标量值,但你定义的Capa函数计算后返回的是72×1的向量(和你的数据样本长度一致),这就触发了维度不匹配的报错。
解决方案
将目标函数修改为计算残差的平方和(或均方误差),把向量结果转化为标量,让fminsearch可以正常处理。
修改后的完整代码
Idata = readtable('Data_batterie.xlsx','Sheet','C(T)','Range','A1:A72'); Idata = table2array(Idata); Tdata = readtable('Data_batterie.xlsx','Sheet','C(T)','Range','B1:B72'); Tdata = table2array(Tdata); Cdata = readtable('Data_batterie.xlsx','Sheet','C(T)','Range','E1:E72'); Cdata = table2array(Cdata); I = Idata; T = Tdata; C = Cdata; % 目标函数改为计算残差平方和,返回标量 Capa = @(x) sum((x(1).*(T+x(2))./(T+x(3)).*(x(4)+x(5).*I)+(x(6)+x(7).*atan(x(8)+x(9).*I)) - C).^2); x0 = [1.35803674e+00 6.26544343e+00 5.64908765e+00 4.22139110e+01 7.09357003e-01 -3.03109514e+01 -2.97030786e+00 -2.35995343e-01 1.13629716e-02]; bestx = fminsearch(Capa,x0);
关键说明
- 给变量赋值加上分号,避免控制台输出大量冗余数据
- 用
sum((残差).^2)将每个样本的残差转化为平方后求和,得到标量损失值,这是曲线拟合的标准损失函数形式 fminsearch会通过迭代调整参数x,最小化这个平方和,最终得到最优的拟合系数
内容的提问来源于stack exchange,提问作者Hurrdof
相关产品推荐
相关产品推荐

