Matlab线性回归(拟合)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab 线性回归(拟合)
对于多元线性回归模型:
e x x y p p ++++=βββ 110
设变量12,,,p x x x y 的n 组观测值为
12(,,,)1,2,,i i ip i x x x y i n =.
记 ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=np n n p p x x x x x x x x x x 2122221112
11111,⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=n y y y y 21,则⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=p ββββ 10 的估计值为 y x x x b ')'(ˆ1-==β
在Matlab 中,用regress 函数进行多元线性回归分析,应用方法如下:
语法:b = regress(y, x)
[b, bint, r, rint, stats] = regress(y, x)
[b, bint, r, rint, stats] = regress(y, x, alpha)
b = regress(y, x),得到的1+p 维列向量b 即为式给出的回归系数β的估计值.
[b, bint, r, rint, stats]=regress(y, x) 给出回归系数β的估计值b ,β的95%置信区间((1)2p +⨯向量)bint ,残差r 以及每个残差的95%置信区间(2⨯n 向量)rint ;向量stats 给出回归的R 2统计量和F 以及临界概率p 的值.
如果i β的置信区间(bint 的第1i +行)不包含0,则在显著水平为α时拒绝0i β=的假设,认为变量i x 是显著的.
[b, bint, r, rint, stats]=regress(y, x, alpha) 给出了bint 和rint 的100(1-alpha)%的置信区间.
三次样条插值函数的MATLAB 程序
matlab 的spline
x = 0:10; y = sin(x); %插值点
xx = 0:.25:10; %绘图点
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)
非线性拟合
非线性拟合可以用以下命令(同样适用于线形回归分析):
= nlinfit(X,y,fun,beta0)
X给定的自变量数据,Y给定的因变量数据,fun要拟合的函数模型(句柄函数或者内联函数形式),
beta0函数模型中系数估计初值,beta返回拟合后的系数
= lsqcurvefit(fun,x0,xdata,ydata)
fun要拟合的目标函数,x0目标函数中的系数估计初值,xdata自变量数据,ydata 函数值数据
X拟合返回的系数(拟合结果)
nlinfit
格式:[beta,r,J]=nlinfit(x,y,’model’, beta0)
Beta 估计出的回归系数
r 残差
J Jacobian矩阵
x,y 输入数据x、y分别为n*m矩阵和n维列向量,对一元非线性回归,x为n维列向量。model是事先用m-文件定义的非线性函数
beta0 回归系数的初值
例1已知数据:
x1=[,,,,];
x2=[,,,,];
x3=[,,,,];
y=[,,,,]’;
且y与x1,x2 , x3关系为多元非线性关系(只与x2,x3相关)为:
y=a+b*x2+c*x3+d*(x2.^2)+e*(x3.^2)
求非线性回归系数a , b , c , d , e 。
(1)对回归模型建立M文件如下:
function yy=myfun(beta,x)
x1=x(:,1);
x2=x(:,2);
x3=x(:,3);
yy=beta(1)+beta(2)*x2+beta(3)*x3+beta(4)*(x2.^2)+beta(5)*(x3.^2);
(2)主程序如下:
x=[,,,,;,,,,;,,,,]';
y=[,,,,]';
beta0=[1,1, 1,1, 1]';
[beta,r,j] = nlinfit(x,y,@myfun,beta0)
例题2:混凝土的抗压强度随养护时间的延长而增加,现将一批混凝土作成12个试块,记录了养护日期(日)及抗压强度y(kg/cm2)的数据:
养护时间:x =[2 3 4 5 7 9 12 14 17 21 28 56 ]
抗压强度:y =[35+r 42+r 47+r 53+r 59+r 65+r 68+r 73+r 76+r 82+r 86+r 99+r ]
建立非线性回归模型,对得到的模型和系数进行检验。
注明:此题中的+r代表加上一个[,]之间的随机数
模型为:y=a+k1*exp(m*x)+k2*exp(-m*x);
Matlab程序:
x=[2 3 4 5 7 9 12 14 17 21 28 56];
r=rand(1,12);
y1=[35 42 47 53 59 65 68 73 76 82 86 99];
y=y1+r ;
myfunc=inline('beta(1)+beta(2)*exp(beta(4)*x)+beta(3)*exp(-beta(4)*x)','beta','x');
beta=nlinfit(x,y,myfunc,[ ]);
a=beta(1),k1=beta(2),k2=beta(3),m=beta(4)
%test the model
xx=min(x):max(x);
yy=a+k1*exp(m*xx)+k2*exp(-m*xx);
plot(x,y,'o',xx,yy,'r')
结果:
a =
k1 =
k2 = -63.4591
m =
图形: