如何在Matlab中使用指定函数拟合衰减指数函数并求解对应参数
实现思路
你需要拟合的是三参数非线性指数函数,使用fminsearch实现最小二乘拟合是符合要求的最优方案:先构造拟合值和真实值的残差平方和作为目标损失函数,再用fminsearch搜索使损失最小的参数a、b、c即可。
完整可运行代码
% 1. 导入测量数据(删除了你之前无效的前两行x、y赋值) x = [12.5,11.8,10.8,10.9,6.5,6.2,6.1,5.423,4.625]; y = [0,0.61,1.3,1.4,14.9,18.5,20.1,29.7,58.2]; % 2. 定义损失函数:输入参数向量params = [a,b,c],输出残差平方和 loss_fun = @(params) sum( (y - (params(1)*exp(-params(2)*x) + params(3))).^2 ); % 3. 设定参数初始猜测值(需根据数据分布合理设置,避免陷入局部最优) % 初始值逻辑:x趋近于0时y≈a+c≈58,x趋近于正无穷时y≈c≈0,b取经验值0.2 params0 = [60, 0.2, 0]; % 4. 调用fminsearch求解最优参数 params_opt = fminsearch(loss_fun, params0); a = params_opt(1) b = params_opt(2) c = params_opt(3) % 5. 绘制拟合结果对比 x_fit = linspace(min(x), max(x), 100); y_fit = a*exp(-b*x_fit) + c; plot(x, y, 'o', x_fit, y_fit, '-', 'LineWidth',1.5) xlabel('Conductivité') ylabel('Inductance') legend('原始测量点','拟合曲线') grid on
注意事项
运行代码后会直接输出拟合得到的a、b、c数值,同时弹出拟合对比图验证效果。如果拟合结果偏差较大,可以调整初始猜测值params0重新运行即可。
内容的提问来源于stack exchange,提问作者Ines Mir
相关产品推荐
相关产品推荐

