matlab多元非线性回归Word文件下载.doc
- 文档编号:4642620
- 上传时间:2023-05-03
- 格式:DOC
- 页数:22
- 大小:235KB
matlab多元非线性回归Word文件下载.doc
《matlab多元非线性回归Word文件下载.doc》由会员分享,可在线阅读,更多相关《matlab多元非线性回归Word文件下载.doc(22页珍藏版)》请在冰点文库上搜索。
相关系数r2越接近1,说明回归方程越显著;
(r2越大越接近1越好)F越大,说明回归方程越显著;
(F越大越好)与F对应的概率p越小越好,一定要P<
a时拒绝H0而接受H1,即回归模型成立。
乘余(残差)标准差(RMSE)越小越好(此处是残差的方差,还没有开方)(前两个越大越好,后两个越小越好)
regress多元(可通过变形而适用于任意函数),15/23顺序(y,x---结果是先常数项,与polyfit相反)y为列向量;
x为矩阵,第一列为全1列(即对应于常数项),其余每一列对应于一个变量(或一个含变量的项),即x要配成目标函数的形式(常数项在最前)x中有多少列则结果的函数中就有多少项
首先要确定要拟合的函数形式,然后确定待定的系,从常数项开始排列,须构造x(每列对应于函数中的一项,剔除待定系数),拟合就是确定待定系数的过程(当然需先确定函数的型式)
重点:
regress(y,x)重点与难点是如何加工处理矩阵x。
y是函数值,一定是只有一列。
也即目标函数的形式是由矩阵X来确定
如s=a+b*x1+c*x2+d*x3+e*x1^2+f*x2*x3+g*x1^2,
一定有一个常数项,且必须放在最前面(即x的第一列为全1列)
X中的每一列对应于目标函数中的一项(目标函数有多少项则x中就有多少列)
X=[ones,x1,x2,x3,x1.^2,x2.*x3,x1.ˆ2](剔除待定系数的形式)
regress:
y/x顺序,矩阵X需要加工处理
nlinfit:
x/y顺序,X/Y就是原始的数据,不要做任何的加工。
(即regress靠矩阵X来确定目标函数的类型形式(所以X很复杂,要作很多处理)而nlinfit是靠程序来确定目标函数的类型形式(所以X就是原始数据,不要做任何处理)
例1
测16名成年女子的身高与腿长所得数据如下:
身高
143
145
146
147
149
150
153
154
155
156
157
158
159
160
162
164
腿长
88
85
91
92
93
95
96
98
97
99
100
102
配成y=a+b*x形式
>
x=[143145146147149150153154155156157158159160162164]'
;
y=[8885889192939395969897969899100102]'
plot(x,y,'
r+'
z=x;
x=[ones(16,1),x];
----常数项
[b,bint,r,rint,stats]=regress(y,x);
---处结果与polyfit(x,y,1)相同
b,bint,stats
得结果:
b=bint=
-16.0730-33.70711.5612------每一行为一个区间
0.71940.60470.8340
stats=0.9282180.95310.0000
即;
的置信区间为[-33.7017,1.5612],的置信区间为[0.6047,0.834];
r2=0.9282,F=180.9531,p=0.0。
p<
0.05,可知回归模型y=-16.073+0.7194x成立.
[b,bint,r,rint,stats]=regress(Y,X,0.05);
-----结果相同
[b,bint,r,rint,stats]=regress(Y,X,0.03);
polyfit(x,y,1)-----当为一元时(也只有一组数),则结果与regress是相同的,只是
命令中x,y要交换顺序,结果的系数排列顺序完全相反,x中不需要全1列。
ans=0.7194-16.0730--此题也可用polyfit求解,杀鸡用牛刀,脖子被切断。
3、残差分析,作残差图:
rcoplot(r,rint)
从残差图可以看出,除第二个数据外,其余数据的残差离零点均较近,且残差的置信区间均包含零点,这说明回归模型y=-16.073+0.7194x能较好的符合原始数据,而第二个数据可视为异常点(而剔除)
4、预测及作图:
)>
holdon
a=140:
165;
>
b=b
(1)+b
(2)*a;
plot(a,b,'
g'
例2
观测物体降落的距离s与时间t的关系,得到数据如下表,求s关于t的回归方程
t(s)
1/30
2/30
3/30
4/30
5/30
6/30
7/30
s(cm)
11.86
15.67
20.60
26.69
33.71
41.93
51.13
8/30
9/30
10/30
11/30
12/30
13/30
14/30
61.49
72.90
85.44
99.08
113.77
129.54
146.48
法一:
直接作二次多项式回归
t=1/30:
1/30:
14/30;
s=[11.8615.6720.6026.6933.7141.9351.1361.4972.9085.4499.08113.77129.54146.48];
>
[p,S]=polyfit(t,s,2)
p=489.294665.88969.1329
得回归模型为:
方法二----化为多元线性回归:
t=1/30:
s=[11.8615.6720.6026.6933.7141.9351.1361.4972.9085.4499.08113.77129.54146.48];
T=[ones(14,1),t'
(t.^2)'
]%?
?
是否可行?
等验证...----因为有三个待定系数,所以有三列,始于常数项
[b,bint,r,rint,stats]=regress(s'
T);
b,stats
b=9.1329
65.8896
489.2946
stats=1.0e+007*
0.00001.037800.0000
%结果与方法1相同
T=[ones(14,1),t,(t.^2)'
]%?
等验证...
polyfit------一元多次
regress----多元一次---其实通过技巧也可以多元多次
regress最通用的,万能的,表面上是多元一次,其实可以变为多元多次且任意函数,如x有n列(不含全1列),则表达式中就有n+1列(第一个为常数项,其他每项与x的列序相对应)?
?
此处的说法需进一步验证证……………………………
例3
设某商品的需求量与消费者的平均收入、商品价格的统计数据如下,建立回归模型,预测平均收入为1000、价格为6时的商品需求量.
需求量
75
80
70
50
65
90
110
60
收入
1000
600
1200
500
300
400
1300
1100
价格
5
7
6
8
4
3
9
选择纯二次模型,即
----用户可以任意设计函数
x1=[10006001200500300400130011001300300];
x2=[5766875439];
y=[10075807050659010011060]'
X=[ones(10,1)x1'
x2'
(x1.^2)'
(x2.^2)'
];
%注意技巧性?
[b,bint,r,rint,stats]=regress(y,X);
%这是万能方法?
需进一步验证
b,stats
b=
110.5313
0.1464
-26.5709
-0.0001
1.8475
stats=0.970240.66560.000520.5771
故回归模型为:
剩余标准差为4.5362,说明此回归模型的显著性较好.
--------(此题还可以用rstool(X,Y)命令求解,详见回归问题详解)
X=[ones(10,1)x1'
sin(x1.*x2)'
(x1.*exp(x2))'
[b,bint,r,rint,stats]=regress(y,X);
(个人2011年认为,regress只能用于函数中的每一项只能有一个待定系数的情况,不能用于aebx等的情况)
regress(y,x)
----re是y/x逆置的
---y是列向量
---须确定目标函数的形式
---x须构造(通过构造来反映目标函数)
---x中的每一列与目标函数的一项对应(剔除待定系数)
----首项为常数项(x的第一列为全1)
----有函数有n项(待定系数),则x就有n列
----regress只能解决每项只有一个待定系数的情况且必须有常数项的情况(且每项只有一个待定系数,即项数与待定系数数目相同)
***其重(难、关键)点:
列向量、构造矩阵(X):
目标函数中的每项与X中的一列对应。
(由X来确定目标函数的类型/形式)
三、非线性回归(拟合)
beta=nlinfit(x,y,‘程序名’,beta0)[beta,r,J]=nlinfit(X,y,fun,beta0)
X给定的自变量数据,Y给定的因变量数据,fun要拟合的函数模型(句柄函数或者内联函数形式),beta0函数模型中待定系数估计初值(即程序的初始实参)beta返回拟合后的待定系数其中beta为估计出的回归系数;
r为残差;
J为Jacobian矩阵
输入数据x、y分别为n*m矩阵和n维列向量,对一元非线性回归,x为n维列向量。
’model’为是事先用m-文件定义的非线性函数;
beta0为回归系数的初值
可以拟合成任意函数。
最通用的,万能的命令
x,y顺序,x不需要任何加工,直接用原始数据。
(也不需要全1列)---所编的程序一定是两个形参(待定系数/向量,自变量/矩阵:
每一列为一个自变量)
结果要看残差的大小和是否有警告信息,如有警告则换一个b0初始向量再重新计算。
本程序中也可能要用.*./.^如结果中有警告信息,则必须多次换初值来试算难点是编程序与初值
nlinfit多元任意函数,(自己任意设计函数,再求待定系数)顺序([b,r,j]=nlinfit(x,y,’…’,b0)y为列向量;
x为矩阵,无需加全1列,x,y就是原始的数据点,(x/y正顺序,所以x不要加全1列)需预先编程(两个参数,系数向量,各变量的矩阵/每列为一个变量)
存在的问题:
不同的beta0,则会产生不同的结果,如何给待定系数的初值以及如何分析结果的好坏,如出现警告信息,则换一个待定系数试一试。
因为拟合本来就是近似的,可能有多个结果。
1:
重点(难点)是预先编程序(即确定目标函数的形式,而regress的目标函数由x矩阵来确定,其重难点为构造矩阵a)
2:
x/y顺序—列向量----x/y是原始数据,不要做任何修改
3:
编程:
一定两个形参(beta,x)a=beta
(1);
b=beta
(2);
c=beta(3);
…x1=x(:
1);
x2=x(:
2);
x3=x(:
3);
即每一列为一个自变量
4:
regress/nlinfit都是列向量
5:
有n项(n个待定系数),x就有n列;
有m个变量则x就有m列
例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如下:
functionyy=myfun(beta,x)%一定是两个参数:
系数和自变量---一个向量/一个矩阵
a=beta
(1)
b=beta
(2)
c=beta(3)
x1=x(:
%系数是数组,b
(1),b
(2),…b(n)依次代表系数1,系数2,……系数n
x2=x(:
%自变量x是一个矩阵,它的每一列分别代表一个变量,有n列就可以最多n
x3=x(:
yy=beta
(1)+beta
(2)*x2+beta(3)*x3+beta(4)*(x2.^2)+beta(5)*(x3.^2);
(b(i)与待定系数的顺序关系可以任意排列,并不是一定常数项在最前,只是结果与自己指定的相对应)(x一定是一列对应一个变量,不能x1=x
(1),x2=x
(2),x3=x(3)……)
(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,1]'
%有多少个待定系数,就给多少个初始值。
[beta,r,j]=nlinfit(x,y,@myfun,beta0)
beta=-0.44205.51110.3837-8.1734-0.1340
此题也可用regress来求解,但结果是不一样的
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]'
n=length(x1);
x=[ones(n,1),x2'
x3'
(x2.^2)'
(x3.^2)'
[b,bint,r,rint,stats]=regress(y,x);
-3.3844
-1.8450
6.5137
0
-2.1773
stats=0.78591.22320.56740.0557
2011年题目改为:
y=a+b*x1+c*x2+d*(x3.^2)+e*(x1.^2)+f*sin(x2)
求非线性回归系数a,b,c,d,e,f
functionf=fxxnh(beta,x)%所编的程序一定是两个形参,第一个为待定系数向量,第二个为自变量矩阵
a=beta
(1);
b=beta
(2);
d=beta(4);
e=beta(5);
f=beta(6);
%系数向量中的一个元素代表一个待定系数
%自变量矩阵每一列代表一个自变量
f=a+b.*x1+c.*x2+d.*(x3.^2)+e.*(x1.^2)+f.*sin(x2);
但计算出现了问题
例2
混凝土的抗压强度随养护时间的延长而增加,现将一批混凝土作成12个试块,记录了养护日期(日)及抗压强度y(kg/cm2)的数据:
养护时间:
x=[234579121417212856]抗压强度:
y=[35+r42+r47+r53+r59+r65+r68+r73+r76+r82+r86+r99+r]建立非线性回归模型,对得到的模型和系数进行检验。
注明:
此题中的+r代表加上一个[-0.5,0.5]之间的随机数模型为:
y=a+k1*exp(m*x)+k2*exp(-m*x);
------有四个待定系数
Matlab程序:
x=[234579121417212856];
r=rand(1,12)-0.5;
y1=[354247535965687376828699];
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.50.50.50.5]);
---初值为0.2也可以,如为1则不行,则试着换系数初值----此处为一元,x’,y’行/列向量都可以
a=beta
(1),k1=beta
(2),k2=beta(3),m=beta(4)%testthemodel
xx=min(x):
max(x);
-----2:
56
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
图形:
此题不能用regress求解,因为有些式子中含有两个待定系数
例3
出钢时所用的盛钢水的钢包,由于钢水对耐火材料的侵蚀,容积不断增大.我们希望知道使用次数与增大的容积之间的关系.对一钢包作试验,测得的数据列于下表:
使用次数
增大容积
2
6.42
8.20
9.58
9.50
9.70
10.00
9.93
9.99
10
11
12
13
14
15
16
10.49
10.59
10.60
10.80
10.90
10.76
对将要拟合的非线性模型y=aeb/x,(如再加y=c*sin(x)+aeb/x)
建立m-文件volum.m如下:
functionyhat=volum(beta,x)
yhat=beta
(1)*exp(beta
(2)./x);
或
functionf=zhang1(beta,x)
f=a*exp(b./x);
---
2、输入数据:
x=2:
16;
y=[6.428.209.589.59.7109.939.9910.4910.5910.6010.8010.6010.9010.76];
beta0=[82]'
----初值[1,1]也可以
3、求回归系数:
[beta,r,J]=nlinfit(x'
y'
volum'
beta0);
%beta0初值为列/行向量都可以,还是为列吧。
beta
beta=
11.6037
-1.0641
即得回归模型为:
[YY,delta]=nlpredci('
x'
beta,r,J)
plo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 多元 非线性 回归
![提示](https://static.bingdoc.com/images/bang_tan.gif)