2-4、拟合

一、简介

  在科学计算中经常要建立实验数据的数学模型。给定函数的实验数据,需要用比较简单和合适的函数来逼近(拟合)实验数据。

  曲线拟合问题的数学描述如下:
  已知一组(二维)互不相同的数据 $( x_i , y_i ),i = 1,2,…,n $
  寻求一个函数(曲线) y = f ( x ) y = f (x) y=f(x),使 f ( x ) f (x) f(x) 在某种准则下与所有数据点最为接近,即曲线拟合得最好。

  实际中我们常采用最小二乘法作为上文提到的“某种准则”。

  本文主要介绍线性与非线性最小二乘拟合的基本概念与求解方法,其他相关数学原理可结合线性代数知识参考书本介绍,在此不赘述。

二、最小二乘拟合

  最小二乘拟合分为线性最小二乘拟合和非线性最小二乘拟合。

1、 线性最小二乘拟合

(1) 数学原理

  线性最小二乘拟合是解决曲线拟合问题最常用的方法,基本思路是:

  第一步: 先选定一组函数

$r_1(x), r_2(x), …r_m(x), m

  第二步: 确定用来确定待定系数 a 1 , a 2 , … , a m a1,a2, … ,am a1,a2,,am 的准则。如这里我们选取最小二乘准则作为确定待定系数的准则。

  最小二乘法:使 n n n 个点 ( x i , y i ) (x_i,y_i) (xi,yi) 与曲线 y = f ( x ) y=f(x) y=f(x) 的距离的平方和最小。 即:记 J ( a 1 , a 2 , … , a m ) = ∑ i = 1 n δ i 2 = ∑ i = 1 n [ f ( x i ) − y i ] 2 = ∑ i = 1 n [ ∑ k = 1 m a k r k ( x i ) − y i ] 2 J(a_1,a_2,…,a_m)=\sum_{i=1}^n\delta_i^2=\sum_{i=1}^n[f(x_i)-y_i]^2\\=\sum_{i=1}^n[\sum_{k=1}^ma_kr_k(x_i)-y_i]^2 J(a1,a2,,am)=i=1nδi2=i=1n[f(xi)yi]2=i=1n[k=1makrk(xi)yi]2

  寻找系数 a 1 , a 2 , … a m a_1,a_2, …a_m a1,a2,am 使 J ( a 1 , a 2 , … a m ) J(a_1,a_2, …a_m) J(a1,a2,am) 最小。

(2)求解方法

  matlab中已有封装好的函数,用以求解满足上述要求的系数。

a=polyfit(x,y,m) 

其中, a a a 为拟合多项式系数, x , y x,y x,y 为输入同长度的数组, m m m 为拟合多项式次数。

2、 非线性最小二乘拟合

(1)数学原理

  非线性最小二乘拟合基本方法与线性最小二乘拟合相同,差别在于非线性最小二乘拟合的拟合函数 f ( x ) f(x) f(x) x x x 的任意非线性函数。

(2)求解方法

  用matlab求非线性最小二乘拟合的两个函数为:lsqcurvefit、lsqnonlin,可参考matlab中自带的help文档中的用法。(文末例题中有例子)

三、例题

1、对下面数据作二次多项式拟合

I1234567891011
X_i00.10.20.30.40.50.60.70.80.91
Y_i0.4471.9783.286.167.087.347.669.569.489.3011.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、用下面一组数据拟合 c ( t ) = a + b e − 0.02 k t c(t)=a+be^{-0.02kt} c(t)=a+be0.02kt 中的参数 a , b , k a,b,k a,b,k

Tj1002003004005006007008009001000
Cj*0.0014.544.995.355.655.906.106.266.396.506.59

**分析:**该问题即求解最优化问题:
m i n ( 1 2 F ( a , b , k ) ) = 1 2 ∑ j = 1 10 [ a + b e − 0.02 k t j − c j ] 2 min(\frac 1 2F(a,b,k))=\frac 1 2 \sum_{j=1}^{10}[a+be^{-0.02kt_j}-c_j]^2 min(21F(a,b,k))=21j=110[a+be0.02ktjcj]2

**解法一:**用函数lsqcurvefit

这里写图片描述

**解法二:**用函数lsqnonlin

这里写图片描述

**注:**两个命令都要先建立M文件定义函数f(x),但定义f(x)的方式不同。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值