第七讲 非线性拟合
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ans: p =2.7937 -0.1540 即拟合函数为:y=2.7937x-0.154
(图6.1)
上述函数的拟合效果如何?我们可以通过计算误差 平方和的大小进行考察(两种方法): (1)sum((2.7937*x-0.154-y).^2)=0.9136 (2)sum((polyval(p,x)-y).^2) )=0.9136
x , y ), ( x , y ), , ( x , y ) 1 1 2 2 n n 已知离散点上的数据集[( 求得一解析函数y=f(x),使f(x)在原离散点xi上尽可能接 近给定yi的值,这一过程叫曲线拟合. 最常用的曲线拟合 是最小二乘法曲线拟合,拟合结果可使误差的平方和最 小,即找出使下式最小的f(x) :
在实际问题中,有时散点图作出后未必是多项式的 图形,可能像其他的曲线,这时可以猜测曲线类型, 然后利用如下命令: [beta,r,J] = nlinfit(x,y,fun,beta0) 其中,x,y为原始数据,fun是在M文件中定义的函数, beta0是函数中参数的初始值;beta为参数的最优值,r 是各点处的拟合残差,J为雅克比矩阵的数值. 例2. 已知如下数据,求拟合曲线
注意:如果出现复数解,则只取实部
0 . 0 0 9 9 k 即拟合曲线为: y 4 2 . 6 6 4 3 ( 1 0 . 5 4 8 3 e )
(图6.3)
拟合结果如右图 所示,红色为拟 合曲线图形,*为 原始散点图.
作图程序为:
50 45 40 35 30 25 20 15 0 100 200 300 400 500 600 700
使用 2 次数 3 4 5 6 9. 7 7 8 9 增大 6.4 8.2 9. 9. 58 5 容积 2 使用 10 次数 11 10 9.9 9.9 3 9
12 13 14 15 16
增大 10. 10. 10 10 10 10 10. 容积 49 59 .6 .8 .6 .9 76
x y 分别选择函数 ax b
5 4 3 2 y -1.6x 13.74x 44.0733x 65.665x 42.63 11
x
y
37
3.4
37.5
3
38
3
38.5
2.27
39
2.1
39.5
40
40.5
1.7
41
1.8
41.5
1.9
42
42.5
43
2.9
源自文库
1.83 1.53
2.35 2.54
解:首先作出散点图: x=37:0.5:43; y=[3.4,3,3,2.27,2.1,1.83,1.53,1.7,1.8,1.9,2.35,2.54,2.9]; plot(x,y,’*’) 发现:有点像抛物线,故选 二次函数拟合. p=polyfit(x,y,2) (图6.2) 2 即为所求拟合曲线 y 0.166x 13.3866x 271.6231 误差平方和:R=sum((polyval(p,x)-y).^2)= 0.2523 p = 0.1660 -13.3866 271.6231
(图6.4) y1=42.6643*(1-0.5483*exp(-0.0099*k)); plot(k,y,'*',k,y1,'-or')
练习:计算可决系数
例3.炼钢厂出钢时所用盛钢水的钢包,由于钢水对耐 火材料的侵蚀,容积不断增大,我们希望找出使用次 数与增大容积之间的函数关系.实验数据如下: 表4.2 钢包使用次数与增大容积
ya ( 1 be) y ae
cx
b x
拟合钢包容积与使用次数的关系 ,在同一坐标系内 作出函数图形.
下面给出分式函数拟合程序:
x1=[2:16]; y1=[6.42,8.2,9.58,9.5,9.7,10,9.93,9.99,10.49,10.59,10.6,10.8 ,10.6,10.9,10.76]; b01=[0.1435,0.084]; %初始参数值 fun1=inline('x./(b(1)+b(2)*x)','b','x'); % 定义函数 [b1,r1,j1]=nlinfit(x1,y1,fun1,b01); y=x1./(0.1152+0.0845*x1); %根据b1写出具体函数 plot(x1,y1,'*',x1,y,'-or'); 可决系数计算: 初始参数b0的计算, 由于确定两个参数值,因此我 们选择已知数据中的两点(2,6.42)和(16,10.76)代 入方程,得到方程组:
威布尔(Weibull)模型:
k x y exp( e )
1 / y /[ 1 exp( x )]
y exp( t )
为了实现非线性拟合,首先要定义函数 1. inline 定义的函数:用于曲线拟合、数值计算 步骤:(1)建立M文件;
幂函数
y axb
指数函数 y aeb x
双曲线函数
y
x ax b
对数函数
y a b ln x
指数函数
y ae
b x
S形曲线
y
1 a bex
具有S形曲线的常见方程有: 罗杰斯蒂(logistic)模型
:
y
1 e x
龚帕兹(Gomperty)模型: 理查德(Richards)模型:
k=[ 0,47,93,140,186,279,372,465,558,651]; y=[18.98,27.35,34.86,38.52,38.44,37.73,38.43,43.87,42.77,46.22];
plot(k,y,'*')
根据右图,我们猜测曲线为:
b k 3 y b (1 b e ) 1 2
最小
解决此类问题有以下几个步骤:(1)首先作出散点 图,确定函数的类别;(2)根据已知数据确定待定 参数的初始值,利用Matlab软件计算最佳参数;(3) 根据可决系数,比较拟合效果。
可决系数的计算公式为 其中
1 n y yi n i 1
R 1
2
(y
i 1 n i 1
n
i
ˆ i )2 y
(2)fun=inline('f(x) ', '参变量','x')
cx y a ( 1 be ) a,b,c为待定的参数 例1. 建立函数:
fun=inline('b(1)*(1-b(2)*exp(-b(3)*x))','b','x'); 此处,将b看成参变量,b(1),b(2),b(3)为其分量. 若计算函数在x=0:0.1:1上的函数值,由于此时x为矩阵, 只需将函数表达式中的某些量表示成向量有些*改成.* 即可.
2 min | f ( x ) y | i i i 1 n
通常,在解决实际问题时先将已知数据的散点图 画出,然后设计拟合的曲线类型,最后根据某种准则 选定最佳的曲线. 1.多项式拟合 多项式拟合就是选择适当的多项式对数据集进行拟合, 其命令为:格式:p=polyfit(X,Y,n).
说明:求出已知数据(X,Y)的n阶拟合多项式f(x)按 降幂排列的系数p,X必须是单调的. 例1.对以下数据作出散点图,然后用多项式拟合: (0.5,1.75),(1,2.75),(1.5,3.81),(2,4.8),(2.5,7),(3,8.6) 解:x = [0.5,1.0,1.5,2.0,2.5,3.0]; y = [1.75,2.45,3.81,4.80,7.00,8.60]; plot(x,y) 发现:这些点大致地位于某条直 线附近,故可考虑线性拟合: p=polyfit(x,y,1)
[x,y]=solve('6.42*(2*a+b)=2','10.76*(16*a+b)=16')
b cx ln( y / a 1 ) y a ( 1 be) ln
cx
取点:(2,6.42),(8,9.93),(10,10.49)代入上述方程
[a,b,c]=solve('log(b)+c*2=log(6.42/a-1)','log(b)+c*10=log(10.49/a-1)','log(b)+c*8=log(9.93/a-1)')
2.非线性拟合
设有实验数据 ( ,寻找函数 x , y ), ( i 1,2, , n ) i i
f ( x, y)
, ( i 1 , 2 , , n )处的函数值与观测数据偏差 使得函数在点 x i f ( x, y ) 的平方和达到最小.即求满足如下条件的函数 使得
2 ( f ( x , y ) y ) i i i 1 n
2 ( y y ) i
R2越趋近于1表明拟合效果越好.
在Matlab中实现可决系数的命令: R2=1-sum((y-y1).^2)/sum((y-mean(y)).^2) 如果是多项式函数,则称为多项式回归,此时 的参数即多项式的系数;如果为指数函数、对数函 数、幂函数或三角函数等,则称为非线性拟合.下面 的图形给出了常见曲线与方程的对应关系:
第六讲 曲线拟合
在生产和科学实验中,自变量x与因变量y之间的函 数关系式有时不能直接写出表达式,而只能得到函数在 若干个点的函数值或导数值. 当要求知道观测点之外的 函数值时,需要估计函数在该点的数值. 这就要根据观 测点的值,构造一个比较简单的函数y=φ(x),使函数在 观测点的值等于已知的数值或导数值,寻找这样的函数 φ(x),办法是很多的. 根据测量数据的类型有如下两种处理观测数据的方法: ① 测量值是准确的,没有误差,一般用插值. ② 测量值与真实值有误差,一般用曲线拟合. 一. 曲线拟合
2 6 . 42 2a b 16 10 . 76 16a b
. 42 ( 2a b ) 2 a 0 . 084 6 10 . 76 ( 16a b ) 16 b 0 . 1435
上述方程组有两种解法:手工,Matlab,下面介 绍Matlab 解方程组的方法
如果用二次函数进行拟合,则有: p=polyfit(x,y,2) p = 0.5614 0.8287 1.1560 2 0 . 5614x 0 . 8287x 1.156 即拟合函数为:y 此时误差平方和为: sum((polyval(p,x)-y).^2) =0.1781
根据误差平方和最小原则:二次函数优于线性函数
是否有误差等于零的多项式?有,那就是该数据点 的插值多项式(五次多项式)
p = -1.6000 13.7400 -44.0733 65.6650 -42.6317 11.3500 此时多项式在x处的函数值为: polyval(p,x) ans =1.7500 2.4500 3.8100 4.8000 7.0000 8.6000 通常,给出两点的坐标,我们可以得到一条直线; 若给出三点的坐标,我们可以得到一条抛物线;…,给 出n个点的坐标,我们可以得到一个n-1阶的多项式. 是否多项式的阶数越高越好呢?非也!在解决实际问 题时,只要达到所需的精度,应尽量选择简单的函数. 例2. 某种合金中的主要成分为A,B两种金属,经过试 验发现:这两种金属成分之和x与合金的膨胀系数y有 如下关系,建立描述这种关系的数学表达式.
现在利用最小二乘法确定最 佳参数:b1,b2,b3
b0=[43,0.6,0.1]; %初始参数值 fun=inline('b(1)*(1-b(2)*exp(-b(3)*k))','b','k'); [b,r,j]=nlinfit(k,y,fun,b0); b %最佳参数 R=sum(r.^2) %误差平方和 b = 42.6643,0.5483,0.0099