MATLAB软件提供了基本的曲线拟合函数的命令。
曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息。
1.线性拟合函数:regress()
调用格式:
说明:b=[ε; β],regress(y,X)返回X与y的最小二乘拟合的参数值β、ε,y=ε+βX。β是p´1的参数向量;ε是服从标准正态分布的随机干扰的n´1的向量;y为n´1的向量;X为n´p矩阵。
bint返回β的95%的置信区间。
r中为形状残差,rint中返回每一个残差的95%置信区间。Stats向量包含R2统计量、回归的F值和p值。
例:
x=[ones(10,1) (1:10)\'];
结果得回归方程为:y=9.9213+1.0143x
2.多项式曲线拟合函数:polyfit()
调用格式:
说明:n:多项式的最高阶数;
x,y:将要拟合的数据,用数组的方式输入;
p:为输出参数,即拟合多项式的系数;
多项式在x处的值y可用下面程序计算:
例:
3.一般的曲线拟合:curvefit()
调用格式:
说明:Fun: 表示函数Fun(p,data)的M函数文件;
x,y:将要拟合的数据,用数组的方式输入;
p0: 表示函数待拟合参数的初值;
4.自定义函数拟合:nlinfit()
调用格式:
说明: beta:返回函数\'fun\'中的待定常数;
r: 表示残差;
J: 表示雅可比矩阵。
x,y: 要拟合的数据;
fun: 自定义函数;
beta0: 待定常数初值;
例:化工生产中获得的氯气的级分y随生产时间x下降,假定在x≥8时,y与x之间有非线性模型:
现收集了44组数据,利用该数据通过拟合确定非线性模型中的待定常数。
x
8
8
10
10
10
10
12
12
12
12
14
14
14
16
16
function yy=model(beta0,x)
拟合程序:
x=[8.00 8.00 10.00 10.00 10.00 10.00 12.00 12.00 12.00 14.00 14.00 14.00...
betafit = nlinfit(x,y,\'sta67_1m\',beta0)
结果:betafit =
4.多元非线性拟合:
(1).nlinfit()
调用格式:
说明: beta:返回函数\'fun\'中的待定常数;
r: 表示残差;
J: 表示雅可比矩阵。
X,Y: 要拟合的多元数据矩阵;
fun: 自定义函数;
beta0: 待定常数初值;
例:
x1 = [1150,1000,900,850,700,625,550,475,3350,3500,5900,
5800,5700,4600,4625,4725,11650,11200,11200 ]\';
x2 = [175,100,25,0,75,100,150,200,50,600,500,
225,100,1225,1600,2000,1200,1000,1550
]\';
x = [x1,x2];
y = [1.44E-02,1.80E-02,6.08E-02,5.59E-02,3.42E-02,7.74E-03,1.17E-03,
6.16E-03,1.91E-04,1.91E-04,1.02E-03,2.83E-03,9.52E-05,3.77E-04,
2.70E-04,1.87E-04,3.98E-04,4.04E-04,4.02E-04
]\';
beta0 = [0.1 0.1 1 1];
myfun
= @(a,x)4030.0./pi./4.2./(a(1).*x(:,1).^a(2).*a(3).*x(:,1).^a(4)).*exp(-(x(:,2).^2./2./(a(1).*x(:,1).^a(2)).^2+30.0.^2./2./(a(3).*x(:,1).^a(4)).^2));
[a,b,c,d,res] = nlinfit(x,y,myfun,beta0);
a,res
plot3(x1,x2,y,\'o\',x1,x2,myfun(a,x))
% 值的选取没有定法,与实际问题的模型有关。
(2).regress()
线性的不行,用二次函数。
format
A=[...
0.2
7.7
5.8
7.70
7.5
5.6
6.2
3.23
0.33
0.14
5.5
请发表评论