文档介绍:设有实验数据,寻找函数
其中是待定的参数,而就是最小二乘法所确定的最佳参数.
解决此类问题有以下几个步骤:(1)首先作出散点图,确定函数的类别;(2)根据已知数据确定待定参数的初始值,利用Matlab软件计算最佳参数;(3)根据可决系数,比较拟合效果,计算可决系数的公式为
其中
R2越趋近于1表明拟合效果越好.
如果是多项式函数,则称为多项式回归,此时的参数即多项式的系数;如果为指数函数、对数函数、幂函数或三角函数等,:
在Matlab中实现可决系数的计算的例子:
x=[2:16];
y=[,,,,,10,,,,,,,,,];
y1=x./(+*x); % 拟合曲线
R2=1-sum((y-y1).^2)/sum((y-mean(y)).^2)
幂函数
指数函数
双曲线函数
对数函数
指数函数
S形曲线
具有S形曲线的常见方程有:
罗杰斯蒂(logistic)模型:
龚帕兹(Gomperty)模型:
理查德(Richards)模型:
威布尔(Weibull)模型:
为了实现非线性拟合,首先要定义在线函数
1. inline 定义的函数:用于曲线拟合、数值计算
步骤:(1)建立M文件;
(2)fun=inline('f(x) ', '参变量','x')
例1. 建立函数: a,b,c为待定的参数
fun=inline('b(1)*(1-b(2)*exp(-b(3)*x))','b','x');
此处,将b看成参变量,b(1),b(2),b(3)为其分量.
若计算函数在x=0::1上的函数值,由于此时x为矩阵,只需将函数表达式中的某些量表示成向量有些*改成.*即可.
在实际问题中,有时散点图作出后未必是多项式的图形,可能像其他的曲线,这时可以猜测曲线类型,然后利用如下命令:
[beta,r,J] = nlinfit(x,y,fun,beta0)
其中,x,y为原始数据,fun是在M文件中定义的函数,beta0是函数中参数的初始值;beta为参数的最优值,r是各点处的拟合残差,J为雅克比矩阵的数值.
例2. 已知如下数据,求拟合曲线
k=[ 0,47,93,140,186,279,372,465,558,651];
y=[,,,,,,,,,];
plot(k,y,'*')
根据右图,我们猜测曲线为:
现在利用最小二乘法确定最佳参数:b1,b2,b3
b0=[43,,]; %初始参数值
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 = ,,
即拟合曲线为:
()
拟合结果如右图所示,红色为拟合曲线图形,*为原始散点图.
y1=*(1-*exp(-*k));
plot(k,y,'*',k,y1,'-or')
作图程序为:
()
练习:计算可决系数
,由于钢水对耐火材料的侵蚀,容积不断增大,:
钢包使用次数与增大容积
使用
次数
2
3
4
5
6
7
8
9
增大
容积
10
使用
次数
10
11
12
13
14
15
16
增大
容积
分别选择函数
拟合钢包容积与使用次数的关系,在同一坐标系内作出函数图形.
x1=[2:16];
y1=[,,,,,10,,,,,,,,,];
b01=[,]; %初始参数值
fun1=inline('x./(b(1)+b(2)*x)','b','x'); % 定义函数
[b1,r1,j1]=nlinfit(x1,y1,fun