在实际应用中常常会遇到利用非线性最小二乘进行拟合函数的系数情况。这可以通过MATLAB中内置的函数lsqcurvefit实现,对其进行简单介绍如下:
1.自定义函数
首先,新建一个函数文件,如下图所示:
设置文件名为myfun.m,填写下述内容:
function F = myfun(cof,xdata) F = cof(1)*sin(xdata)+cof(2);
这个函数表示的为:
f(x)=asin(x)+b.
2.使用lsqcurvefit函数
接着,新建一个脚本,用来调用这个函数,以及使用lsqcurvefit命令进行优化测试。
在脚本中写入下述内容,注释中有详细解释:
%% xiaochen 2022年10月11日12:03:36 clc; clear all; close all; % 制作需要拟合的数据 xdata = [-5:0.1:5]; true_cof = [1,1]; % 假设真实的系数a = 1, b = 1 ydata = myfun(true_cof,xdata); ydata = ydata + rand(1,length(xdata)); predict_cof = [0,0];% 预测的系数a = 0, b = 0 %result_cof为拟合系数的结果 resnorm为残差 %myfun为要拟合的函数 %predict_cof为预测系数值 %xdata,ydata为拟合数据 [result_cof,resnorm] = lsqcurvefit(@myfun,predict_cof,xdata,ydata); % 使用拟合的系数计算y的值 ydata2 = myfun(result_cof,xdata); figure; plot(xdata, ydata, Marker="*"); hold on; plot(xdata, ydata2); legend('拟合数据','拟合结果');
拟合出来的结果如下图中所示,蓝色为原始的数据,橙色为拟合曲线。