(完整版)Matlab线性回归(拟合)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab 线性回归(拟合)

对于多元线性回归模型:

e x x y p p ++++=βββΛ110

设变量12,,,p x x x y L 的n 组观测值为

12(,,,)1,2,,i i ip i x x x y i n =L L .

记 ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=np n n p p x x x x x x x x x x ΛΛΛΛΛΛΛΛ212222*********,⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=n y y y y M 21,则⎪⎪⎪⎪⎪⎭

⎫ ⎝⎛=p ββββM 10 的估计值为 y x x x b ')'(ˆ1-==β

(11.2) 在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 即为(11.2)式给出的回归系数β的估计值.

[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)

非线性拟合

非线性拟合可以用以下命令(同样适用于线形回归分析):

1.beta = nlinfit(X,y,fun,beta0)

X给定的自变量数据,Y给定的因变量数据,fun要拟合的函数模型(句柄函数或者内联函数形式),

beta0函数模型中系数估计初值,beta返回拟合后的系数

2.x = 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=[0.5,0.4,0.3,0.2,0.1];

x2=[0.3,0.5,0.2,0.4,0.6];

x3=[1.8,1.4,1.0,1.4,1.8];

y=[0.785,0.703,0.583,0.571,0.126]’;

且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文件model.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=[0.5,0.4,0.3,0.2,0.1;0.3,0.5,0.2,0.4,0.6;1.8,1.4,1.0,1.4,1.8]';

y=[0.785,0.703,0.583,0.571,0.126]';

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代表加上一个[-0.5,0.5]之间的随机数

模型为: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)-0.5;

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,[0.5 0.5 0.5 0.5]);

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 = 87.5244

k1 = 0.0269

k2 = -63.4591

m = 0.1083

图形:

相关文档
最新文档