You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:27:26