一、简介
在科学计算中经常要建立实验数据的数学模型。给定函数的实验数据,需要用比较简单和合适的函数来逼近(拟合)实验数据。
曲线拟合问题的数学描述如下:
已知一组(二维)互不相同的数据
寻求一个函数(曲线)
实际中我们常采用最小二乘法作为上文提到的“某种准则”。
本文主要介绍线性与非线性最小二乘拟合的基本概念与求解方法,其他相关数学原理可结合线性代数知识参考书本介绍,在此不赘述。
二、最小二乘拟合
最小二乘拟合分为线性最小二乘拟合和非线性最小二乘拟合。
1、 线性最小二乘拟合
(1) 数学原理
线性最小二乘拟合是解决曲线拟合问题最常用的方法,基本思路是:
第一步: 先选定一组函数
令
(其中
第二步: 确定用来确定待定系数
最小二乘法:使
寻找系数
(2)求解方法
matlab中已有封装好的函数,用以求解满足上述要求的系数。
a=polyfit(x,y,m)
其中,
2、 非线性最小二乘拟合
(1)数学原理
非线性最小二乘拟合基本方法与线性最小二乘拟合相同,差别在于非线性最小二乘拟合的拟合函数
(2)求解方法
用matlab求非线性最小二乘拟合的两个函数为:lsqcurvefit、lsqnonlin,可参考matlab中自带的help文档中的用法。(文末例题中有例子)
三、例题
1、对下面数据作二次多项式拟合
I | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
X_i | 0 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 | 1 |
Y_i | 0.447 | 1.978 | 3.28 | 6.16 | 7.08 | 7.34 | 7.66 | 9.56 | 9.48 | 9.30 | 11.2 |
解法一:
% 解超定方程的方法
x=0:0.1:1;
y=[-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2];
R=[(x.^2)', x', ones(11,1)];
A=R\y'
解法二:
%用多项式拟合的命令
x=0:0.1:1;
y=[-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2];
A=polyfit(x,y,2)
z=polyval(A,x);
plot(x,y,'k+',x,z,'r')
拟合结果图像:
2、用下面一组数据拟合
Tj | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 1000 |
---|---|---|---|---|---|---|---|---|---|---|
Cj*0.001 | 4.54 | 4.99 | 5.35 | 5.65 | 5.90 | 6.10 | 6.26 | 6.39 | 6.50 | 6.59 |
分析:该问题即求解最优化问题:
解法一:用函数lsqcurvefit
解法二:用函数lsqnonlin
注:两个命令都要先建立M文件定义函数f(x),但定义f(x)的方式不同。