文档库 最新最全的文档下载
当前位置:文档库 › matlab多元非线性回归教程

matlab多元非线性回归教程

matlab多元非线性回归教程
matlab多元非线性回归教程

matlab 回归(多元拟合)教程

前言

1、学三条命令

polyfit(x,y,n)---拟合成一元幂函数(一元多次) regress(y,x)----可以多元,

nlinfit(x,y,’fun ’,beta0) (可用于任何类型的函数,任意多元函数,应用范围最主,最万能的)

2、同一个问题,这三条命令都可以使用,但结果肯定是不同的,因为拟合的近似结果,没有唯一的标准的答案。相当于咨询多个专家。

3、回归的操作步骤:

根据图形(实际点),选配一条恰当的函数形式(类型)---需要数学理论与基础和经验。(并写出该函数表达式的一般形式,含待定系数)------选用某条回归命令求出所有的待定系数。所以可以说,回归就是求待定系数的过程(需确定函数的形式)

一、回归命令

一元多次拟合polyfit(x,y,n);一元回归polyfit;多元回归regress---nlinfit(非线性)

二、多元回归分析

对于多元线性回归模型(其实可以是非线性,它通用性极高):

e x x y p

p ++

++

=

βββ 1

10

设变量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 2

1

22221

1121111

1,??

??

?

??

??=n y y y y 21,则??????

? ??=p ββββ 10 的估计值为排列方式与线性代数中的线性方程组相同(),拟合成多元函数---regress

使用格式:左边用b=[b, bint, r, rint, stats]右边用=regress(y, x)或regress(y, x, alpha) ---命令中是先y 后x,

---须构造好矩阵x(x 中的每列与目标函数的一项对应) ---并且x 要在最前面额外添加全1列/对应于常数项

---y 必须是列向量

---结果是从常数项开始---与polyfit 的不同。)

其中: b 为回归系数,β的估计值(第一个为常数项),bint 为回归系数的区间估计,r: 残差 ,rint: 残差的置信区间,stats: 用于检验回归模型的统计量,有四个数值:相关系数r2、F 值、与F 对应的概率p 和残差的方差(前两个越大越好,后两个越小越好),alpha: 显著性水平(缺省时为0.05,即置信水平为95%),(alpha 不影响b,只影响bint(区间估计)。它越小,即置信度越高,则bint 范围越大。显著水平越高,则区间就越小)(返回五个结果)---如有n 个自变量-有误(n 个待定系数),则b 中就有n+1个系数(含常数项,---第一项为常数项)(b---b 的范围/置信区间---残差r---r 的置信区间rint-----点估计----区间估计

此段上课时不要:---- 如果i β的置信区间(bint 的第1i +行)不包含0,则在显著水平为α时拒绝0i β=的假设,认为变量i x 是显著的.*******(而rint 残差的区间应包含0则更好)。b,y 等均为列向量,x 为矩阵(表示了一组实际的数据)必须在x 第一列添加一个全1列。----对应于常数项-------而nlinfit 不能额外添加全1列。结果的系数就是与此矩阵相对应的(常数项,x1,x2,……xn )。(结果与参数个数:1/5=2/3-----y,x 顺序---x 要额外添加全1列)

而nlinfit:1/3=4------x,y 顺序---x 不能额外添加全1列,---需编程序,用于模仿需拟合的函数的任意形式,一定两个参数,一为系数数组,二为自变量矩阵(每列为一个自变量)

有n 个变量---不准确,x 中就有n 列,再添加一个全1列(相当于常数项),就变为n+1列,则结果中就有n+1个系数。

x 需要经过加工,如添加全1列,可能还要添加其他需要的变换数据。

相关系数r2越接近1,说明回归方程越显著;(r2越大越接近1越好)F 越大,说明回归方程越显著;(F 越大越好)与F 对应的概率p 越小越好,一定要P

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名成年女子的身高与腿长所得数据如下:

配成y=a+b*x形式

>> x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]';

>> y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]';

>> 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.7071 1.5612------每一行为一个区间 0.7194 0.6047 0.8340 stats = 0.9282 180.9531 0.0000

即7194.0?,073.16?10=-=ββ;0

?β的置信区间为[-33.7017,1.5612], 1?β的置信区间为[0.6047,0.834]; r 2=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)

Residual Case Order Plot

R e s i d u a l s

Case Number

从残差图可以看出,除第二个数据外,其余数据的残差离零点均较近,且残差的置信区间均包含零点,这说明回归模型 y=-16.073+0.7194x 能较好的符合原始数据,而第二个数据可视为异常点(而剔除)

4、预测及作图:

>> plot(x,y,'r+') >> hold on >> a=140:165; >> b=b(1)+b(2)*a; >> plot(a,b,'g')

例2

观测物体降落的距离s 与时间t 的关系,得到数据如下表,求s 关于t 的回归方程

2?ct bt a s

++=

法一:直接作二次多项式回归 t=1/30:1/30:14/30;

>> [p,S]=polyfit(t,s,2)

p =489.2946 65.8896 9.1329 得回归模型为 :

1329.98896.652946.489?2++=t t s

方法二----化为多元线性回归:

2?ct bt a s

++=

t=1/30:1/30:14/30;

s=[11.86 15.67 20.60 26.69 33.71 41.93 51.13 61.49 72.90 85.44 99.08 113.77 129.54 146.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.0000 1.0378 0 0.0000 得回归模型为 :

22946.4898896.651329.9?t t s ++=>> T=[ones(14,1),t, (t.^2)'] %???是否可行???等验证... polyfit------一元多次

regress----多元一次---其实通过技巧也可以多元多次

regress 最通用的,万能的,表面上是多元一次,其实可以变为多元多次且任意函数,如x 有n 列(不含全1列),则表达式中就有n+1列(第一个为常数项,其他每项与x 的列序相对应)??????此处的说法需进一步验证证……………………………

例3

设某商品的需求量与消费者的平均收入、商品价格的统计数据如下,建立回归模型,预测平均收入为1000、价格为6时的商品需求量. 需求量 100 75 80 70 50 65 90 100 110 60 收入

1000

600

1200

500

300

400

1300

1100

1300

300

价格

5 7

6 6 8

7 5 4 3 9

选择纯二次模型,即

2

2

22211122110x x x x y βββββ++++=----用户可以任意设计函数

>> x1=[1000 600 1200 500 300 400 1300 1100 1300 300]; >> x2=[5 7 6 6 8 7 5 4 3 9];

>> y=[100 75 80 70 50 65 90 100 110 60]';

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.9702 40.6656 0.0005 20.5771

故回归模型为:22

21218475.10001.05709.261464.05313.110x x x x y +--+= 剩余标准差为4.5362, 说明此回归模型的显著性较好.

--------(此题还可以用 rstool(X,Y)命令求解,详见回归问题详解)

>> X=[ones(10,1) x1' x2' (x1.^2)' (x2.^2)',sin(x1.*x2)',(x1.*exp(x2))']; >> [b,bint,r,rint,stats]=regress(y,X); >> b,stats

(个人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:regress:有n项(n个待定系数),x就有n列;nlinfit:有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如下:

function yy=myfun(beta,x) %一定是两个参数:系数和自变量---一个向量/一个矩阵

a=beta(1)

b=beta(2)

c=beta(3)

x1=x(:,1); %系数是数组,b(1),b(2),…b(n)依次代表系数1, 系数2,……系数n

x2=x(:,2); %自变量x是一个矩阵,它的每一列分别代表一个变量,有n列就可以最多n x3=x(:,3);

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.4420 5.5111 0.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);

>> b,stats

b =

-3.3844

-1.8450

6.5137

-2.1773

stats = 0.7859 1.2232 0.5674 0.0557

2011年题目改为:y=a+b*x1+c*x2+d*(x3.^2)+e*(x1.^2)+f*sin(x2)

求非线性回归系数a , b , c , d , e,f

function f=fxxnh(beta,x) %所编的程序一定是两个形参,第一个为待定系数向量,第二个为自变量矩阵

a=beta(1);

b=beta(2);

c=beta(3);

d=beta(4);

e=beta(5);

f=beta(6);%系数向量中的一个元素代表一个待定系数

x1=x(:,1);%自变量矩阵每一列代表一个自变量

x2=x(:,2);

x3=x(:,3);

f=a+b.*x1+c.*x2+d.*(x3.^2)+e.*(x1.^2)+f.*sin(x2);

但计算出现了问题

例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]); ---初值为0.2也可以,如为1则不行,则试着换系数初值----此处为一元,x’,y’行/列向量都可以

a=beta(1),k1=beta(2),k2=beta(3),m=beta(4)%test the model

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

出钢时所用的盛钢水的钢包,由于钢水对耐火材料的侵蚀,容积不断增大.我们希望知道使用次数与增大的容积之间的关系.对一钢包作试验,测得的数据列于下表:

对将要拟合的非线性模型y=ae b/x,(如再加y= c*sin(x)+aeb/x)

建立m-文件volum.m如下:

function yhat=volum(beta,x)

yhat=beta(1)*exp(beta(2)./x);或 function f=zhang1(beta,x) a=beta(1); b=beta(2); f=a*exp(b./x);--- 2、输入数据: >> x=2:16;

>> y=[6.42 8.20 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.60 10.80 10.60 10.90 10.76]; >> beta0=[8 2]';----初值[1,1]也可以 3、求回归系数:

>> [beta,r ,J]=nlinfit(x',y','volum',beta0); %beta0初值为列/行向量都可以,还是为列吧。 >> beta beta = 11.6037 -1.0641

即得回归模型为:x

e y 10641

.16036.11-

=

4、预测及作图:

>> [YY,delta]=nlpredci('volum',x',beta,r ,J) >>plot(x,y,'k+',x,YY ,'r')

或>> plot(x,y,'ro') >> hold on >> xx=2:0.05:16;

>> yy=beta(1)*exp(beta(2)./xx); >> plot(xx,yy,'g')

又或>> plot(x,y,'ro') >> hold on >> xx=2:0.05:16;

>> yy=volum(beta,xx);--------通过调用用户自编的函数

>> plot(xx,yy,'g')

246810121416

>> [beta,r ,J]=nlinfit(x',y','volum',[1,1]); %下面换了多个初值,结果都是一样的。>> beta

beta =11.6037 -1.0641

>> [beta,r ,J]=nlinfit(x',y','volum',[1,5]);

>> beta

beta = 11.6037 -1.064

>> [beta,r ,J]=nlinfit(x',y','volum',[10,5]);

beta =11.6037 -1.0641

>> [beta,r ,J]=nlinfit(x',y','volum',[10,50]);

beta =11.6037 -1.0641

以下用来lsqcurvefit求解,结果是一样的。

>> [beta,a,b,exitflag]=lsqcurvefit('volum',[8,2],x',y')

Optimization terminated: relative function value

changing by less than OPTIONS.TolFun.

beta = 11.6037 -1.0641

exitflag = 3

>> [beta,a,b,exitflag]=lsqcurvefit('volum',[1,1],x',y') %换不同的初值,结果是一样的。

beta = 11.6037 -1.0641

exitflag = 3

>> [beta,a,b,exitflag]=lsqcurvefit('volum',[10,1],x',y')

beta = 11.6037 -1.0641

exitflag = 3

>> [beta,a,b,exitflag]=lsqcurvefit('volum',[10,5],x',y')

beta = 11.6037 -1.0641

exitflag = 3

>> [beta,a,b,exitflag]=lsqcurvefit('volum',[10,50],x',y')

beta = 11.6037 -1.0641

exitflag = 3

例4

财政收入预测问题:财政收入与国民收入、工业总产值、农业总产值、总人口、就业人口、固定资产投资等因素有关。下表列出了1952-1981年的原始数据,试构造预测模型。财政收入预测问题:财政收入与国民收入、工业总产值、农业总产值、总人口、就业人口、固定资产投资等因素有关。下表列出了1952-1981年的原始数据,试构造预测模型。

解设国民收入、工业总产值、农业总产值、总人口、就业人口、固定资产投资分别为x1、x2、x3、x4、x5、x6,财政收入为y,设变量之间的关系为:y= ax1+bx2+cx3+dx4+ex5+fx6 使用非线性回归方法求解。

1.对回归模型建立M文件model.m如下:

function yy=model(beta0,X) %一定是两个参数,第一个为系数数组,b(1),b(2),…b(n) %分别代表每个系数,而第二个参数代表所有的自变量,%是一个矩阵,它的每一列分别代表一个自变量。

a=beta0(1);

b=beta0(2); %每个元素

c=beta0(3);

d=beta0(4);

e=beta0(5);

f=beta0(6);

x1=X(:,1); %每一列

x2=X(:,2);

x3=X(:,3);

x4=X(:,4);

x5=X(:,5);

x6=X(:,6);

yy=a*x1+b*x2+c*x3+d*x4+e*x5+f*x6;

2. 主程序liti6.m如下:

X=[598.00, 349.00 ,461.00, 57482.00, 20729.00, 44.00;

586, 455, 475, 58796, 21364, 89;

707, 520, 491, 60266, 21832, 97;

737, 558, 529, 61465, 22328, 98;

825, 715, 556, 62828, 23018, 150;

837, 798, 575, 64653, 23711, 139;

1028, 1235, 598, 65994, 26600, 256;

1114, 1681, 509, 67207, 26173, 338;

1079, 1870, 444, 66207, 25880, 380;

757, 1156, 434, 65859, 25590, 138;

677, 964, 461, 67295, 25110, 66;

779, 1046, 514, 69172, 26640, 85;

943, 1250, 584, 70499, 27736, 129;

1152, 1581, 632, 72538, 28670, 175;

1322, 1911, 687, 74542, 29805, 212;

1249, 1647, 697, 76368, 30814, 156;

1187, 1565, 680, 78534, 31915, 127;

1372, 2101, 688, 80671, 33225, 207;

1638, 2747, 767, 82992, 34432, 312;

1780, 3156, 790, 85229, 35620, 355;

1833, 3365, 789, 87177, 35854, 354;

1978, 3684, 855, 89211, 36652, 374;

1993, 3696, 891, 90859, 37369, 393;

2121, 4254, 932, 92421, 38168, 462;

2052, 4309, 955, 93717, 38834, 443;

2189, 4925, 971, 94974, 39377, 454;

2475, 5590, 1058, 96259, 39856, 550;

2702, 6065, 1150, 97542, 40581, 564;

2791, 6592, 1194, 98705, 41896, 568;

2927, 6862, 1273, 100072, 73280, 496];

y=[184.00 216.00 248.00 254.00 268.00 286.00 357.00 444.00 506.00 ...

271.00 230.00 266.00 323.00 393.00 466.00 352.00 303.00 447.00 ...

564.00 638.00 658.00 691.00 655.00 692.00 657.00 723.00 922.00 ...

890.00 826.00 810.0]';

beta0=[0.50 -0.03 -0.60 0.01 -0.02 0.35];

betafit = nlinfit(X,y,'model',beta0)

结果为

betafit =

0.5243

-0.0294

-0.6304

0.0112

-0.0230

0.3658

(结果也可能是:0.3459 -0.0180 -0.3700 0.0030 -0.0020 0.4728)

即y= 0.5243x1-0.0294x2-0.6304x3+0.0112x4-0.0230x5+0.3658x6

此题也可以用regress来求解(我自己做的,不一定对???)----结果有些不同,含有一个常数

>> clear

>> x=xlsread('cz.xls'); %已经把所有的有效数据拷入到cd.xls文件中去了。

>> y=x(:,7);

>> x(:,7)=[ ];

>> z=ones(30,1);

>> x=[z,x];

>> [b,bint,r,rint,states]=regress(y,x);

>> b,states

b =

159.1440

0.4585

-0.0112

-0.5125

0.0008

-0.0028

0.3165

stats =

1.0e+003 *

0.0010 0.2283 0 1.0488

X,y的原始数据:

help nlinfit/ help nlinfit

Examples:

Use @ to specify MODELFUN:

load reaction;

beta = nlinfit(reactants,rate,@mymodel,beta);

where MYMODEL is a MA TLAB function such as:

function yhat = mymodel(beta, x)

yhat = (beta(1)*x(:,2) - x(:,3)/beta(5)) ./ ...

(1+beta(2)*x(:,1)+beta(3)*x(:,2)+beta(4)*x(:,3));

Examples

FUN can be specified using @:

nlintool(x, y, @myfun, b0)

where MYFUN is a MA TLAB function such as:

function yhat = myfun(beta, x)

b1 = beta(1);

b2 = beta(2);

yhat = 1 ./ (1 + exp(b1 + b2*x));

fun = inline('1 ./ (1 + exp(b(1) + b(2)*x))', 'b', 'x')

nlintool(x, y, fun, b0)

每一列为一个变量,所以有n个自变量,就有n列X1,x2,…xn, y都为列向量

四、非线性回归或曲线回归问题

配曲线的一般方法是:

(一)先对两个变量x 和y 作n 次试验观察得n i y x i i ,...,2,1),,(=画出散点图,

散点图

(二)根据散点图确定须配曲线的类型. 通常选择的六类曲线如下: (1)双曲线

x

b a y +=1 (2)幂函数曲线y=a b

x , 其中x>0,a>0

(3)指数曲线y=a

bx

e

其中参数a>0.

(4)倒指数曲线y=a x

b e /其中a>0,

(5)对数曲线y=a+blogx,x>0 (6)S 型曲线x

be a y -+=

1

(三)然后由n 对试验数据确定每一类曲线的未知参数a 和b. 解例2.由散点图我们选配倒指数曲线y=a x b e /

根据线性化方法,算得4587.2?,1107.1?=-=A b 由此 6789.11??==A

e a

最后得 x

e y 1107.16789

.11-

=

Matlab多元线性回归

Matlab多元线性回归 [ b , bint , r , rint , stats ]=regress ( y , x ) , 其中b 是回归方程中的参数估计值,bint 是b 的置信区间,r 和rint 分别表示残差及残差对应的置信区间。StatS 数组包含三个数字,分别是相关系数,F 统计量及对应的概率p 值。拟合结果: Y=b(1)x(1)+b(2)x(2)+b(3)x(3)+…+b(n)x(n) b(1)是系数,x(1)为全1的一个列向量。 注意:不是插值。 x=[1097 1284 1502 1394 1303 1555 1917 2051 2111 2286 2311 2003 2435 2625 2948 3155 3372];%因变量时间序列数据 y=[698 872 988 807 738 1025 1316 1539 1561 1765 1762 1960 1902 2013 2446 2736 2825];%自变量时间序列数据 X=[ones(size(x')),x']; [b,bint,r,rint,stats]=regress(y',X,0.05);%调用一元回归分析函数 rcoplot(r,rint)%画出在置信度区间下误差分布. 举例: x = 1 2 4 9 1 4 3 7 1 5 9 0 1 9 1 8 >> y=[10 3 90 48]'; >> [ b , bint , r , rint , stats ]=regress ( y , x ) 得到的结果 b = -186.8333 16.0238 21.8571 8.5952 bint = NaN NaN NaN NaN NaN NaN

实例matlab-非线性规划-作业

实例matlab-非线性规划-作业

现代设计方法-工程优化理论、方法与设计 姓名 学号 班级 研 问题 : 某厂向用户提供发动机,合同规定,第一、二、三季度末分别交货40台、60台、80台。每季度的生产费用为 (元),其中x 是该季生产的台数。若交货后有剩余,可用于下季度交货,但需支付存储费,每台每季度c 元。已知工厂每季度最大生产能力为100台,第一季度开始时无存货,设a=50、b=0.2、c=4,问工厂应如何安排生产计划,才能既满足合同又使总费用最低。讨论a 、b 、c 变化对计划的影响,并作出合理的解释。 问题的分析和假设: 问题分析:本题是一个有约束条件的二次规划问题。决策变量是工厂每季度生产的台数,目标函数是总费用(包括生产费用和存储费)。约束条件是生产合同,生产能力的限制。在这些条件下需要如何安排生产计划,才能既满足合同又使总费用最低。 问题假设: 1、工厂最大生产能力不会发生变化; 2、合同不会发生变更; 3、第一季度开始时工厂无存货; 4、生产总量达到180台时,不在进行生产; 5、工厂生产处的发动机质量有保证,不考虑退货等因素; 6、不考虑产品运输费用是否有厂家承担等和生产无关的因素。 符号规定: x1——第一季度生产的台数; x2——第二季度生产的台数; 180-x1-x2——第三季度生产的台数; y1——第一季度总费用; y2——第二季度总费用; y3——第三季度总费用; y ——总费用(包括生产费用和存储费)。 ()2bx ax x f +=

建模: 1、第一、二、三季度末分别交货40台、60台、80台; 2、每季度的生产费用为 (元); 3、每季度生产数量满足40 ≤x1≤100,0≤x2≤100,100≤x1+x2 ≤180; 4、要求总费用最低,这是一个目标规划模型。 目标函数: y1 2111x b x a Z ?+?= y2()4012222-?+?+?=x c x b x a Z y3()()()10018018021221213 -+?+--?+--?=x x c x x b x x a Z y x x x x x x Z Z Z Z 68644.04.04.0149201 212221321--+++=++= 40≤x1≤100 0≤x2≤100 100≤x1+x2≤180 ()2 bx ax x f +=

matlab多元线性回归模型

云南大学数学与统计学实验教学中心 实验报告 一、实验目的 1.熟悉MATLAB的运行环境. 2.学会初步建立数学模型的方法 3.运用回归分析方法来解决问题 二、实验内容 实验一:某公司出口换回成本分析 对经营同一类产品出口业务的公司进行抽样调查,被调查的13家公司,其出口换汇成本与商品流转费用率资料如下表。试分析两个变量之间的关系,并估计某家公司商品流转费用率是6.5%的出口换汇成本. 实验二:某建筑材料公司的销售量因素分析 下表数据是某建筑材料公司去年20个地区的销售量(Y,千方),推销开支、实际帐目数、同类商品

竞争数和地区销售潜力分别是影响建筑材料销售量的因素。1)试建立回归模型,且分析哪些是主要的影响因素。2)建立最优回归模型。 提示:建立一个多元线性回归模型。

三、实验环境 Windows 操作系统; MATLAB 7.0. 四、实验过程 实验一:运用回归分析在MATLAB 里实现 输入:x=[4.20 5.30 7.10 3.70 6.20 3.50 4.80 5.50 4.10 5.00 4.00 3.40 6.90]'; X=[ones(13,1) x]; Y=[1.40 1.20 1.00 1.90 1.30 2.40 1.40 1.60 2.00 1.00 1.60 1.80 1.40]'; plot(x,Y,'*'); [b,bint,r,rint,stats]=regress(Y,X,0.05); 输出: b = 2.6597 -0.2288 bint = 1.8873 3.4322 -0.3820 -0.0757 stats = 0.4958 10.8168 0.0072 0.0903 即==1,0?6597.2?ββ,-0.2288,0?β的置信区间为[1.8873 3.4322],1,?β的置信区间为[-0.3820 -0.0757]; 2r =0.4958, F=10.8168, p=0.0072 因P<0.05, 可知回归模型 y=2.6597-0.2288x 成立. 1 1.5 2 2.5 散点图 估计某家公司商品流转费用率是6.5%的出口换汇成本。将x=6.5代入回归模型中,得到 >> x=6.5; >> y=2.6597-0.2288*x y = 1.1725

matlab建立多元线性回归模型并进行显著性检验及预测问题

matlab建立多元线性回归模型并进行显着性检验及预测问题 例子; x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]'; X=[ones(16,1) x]; 增加一个常数项Y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]'; [b,bint,r,rint,stats]=regress(Y,X) 得结果:b = bint = stats = 即对应于b的置信区间分别为[,]、[,]; r2=, F=, p= p<, 可知回归模型y=+ 成立. 这个是一元的,如果是多元就增加X的行数! function [beta_hat,Y_hat,stats]=regress(X,Y,alpha) % 多元线性回归(Y=Xβ+ε)MATLAB代码 %? % 参数说明 % X:自变量矩阵,列为自变量,行为观测值 % Y:应变量矩阵,同X % alpha:置信度,[0 1]之间的任意数据 % beta_hat:回归系数 % Y_beata:回归目标值,使用Y-Y_hat来观测回归效果 % stats:结构体,具有如下字段 % =[fV,fH],F检验相关参数,检验线性回归方程是否显着 % fV:F分布值,越大越好,线性回归方程越显着 % fH:0或1,0不显着;1显着(好) % =[tH,tV,tW],T检验相关参数和区间估计,检验回归系数β是否与Y有显着线性关系 % tV:T分布值,beta_hat(i)绝对值越大,表示Xi对Y显着的线性作用% tH:0或1,0不显着;1显着 % tW:区间估计拒绝域,如果beta(i)在对应拒绝区间内,那么否认Xi对Y显着的线性作用 % =[T,U,Q,R],回归中使用的重要参数 % T:总离差平方和,且满足T=Q+U % U:回归离差平方和 % Q:残差平方和 % R∈[0 1]:复相关系数,表征回归离差占总离差的百分比,越大越好% 举例说明 % 比如要拟合y=a+b*log(x1)+c*exp(x2)+d*x1*x2,注意一定要将原来方程线化% x1=rand(10,1)*10; % x2=rand(10,1)*10; % Y=5+8*log(x1)+*exp(x2)+*x1.*x2+rand(10,1); % 以上随即生成一组测试数据 % X=[ones(10,1) log(x1) exp(x2) x1.*x2]; % 将原来的方表达式化成Y=Xβ,注意最前面的1不要丢了

利用Matlab进行线性回归分析之欧阳歌谷创编

利用Matlab进行线性回归分析 欧阳歌谷(2021.02.01) 回归分析是处理两个及两个以上变量间线性依存关系的统计方法。可以通过软件Matlab实现。 1.利用Matlab软件实现 在Matlab中,可以直接调用命令实现回归分析, (1)[b,bint,r,rint,stats]=regress(y,x),其中b是回归方程中的参数估计值,bint是b的置信区间,r和rint分别表示残差及残差对应的置信区间。stats包含三个数字,分别是相关系数,F统计量及对应的概率p值。 (2)recplot(r,rint)作残差分析图。 (3)rstool(x,y)一种交互式方式的句柄命令。 以下通过具体的例子来说明。 例现有多个样本的因变量和自变量的数据,下面我们利用Matlab,通过回归分析建立两者之间的回归方程。 % 一元回归分析 x=[1097 1284 1502 1394 1303 1555 1917 2051 2111 2286 2311

2003 2435 2625 2948 3, 55 3372];%自变量序列数据 y=[698 872 988 807 738 1025 1316 1539 1561 1765 1762 1960 1902 2013 2446 2736 2825];%因变量序列数据 X=[ones(size(x')),x'],pause [b,bint,r,rint,stats]=regress(y',X,0.05),pause%调用一元回归分析函数rcoplot(r,rint)%画出在置信度区间下误差分布。 % 多元回归分析 % 输入各种自变量数据 x1=[5.5 2.5 8 3 3 2.9 8 9 4 6.5 5.5 5 6 5 3.5 8 6 4 7.5 7]'; x2=[31 55 67 50 38 71 30 56 42 73 60 44 50 39 55 7040 50 62 59]'; x3=[10 8 12 7 8 12 12 5 8 5 11 12 6 10 10 6 11 11 9 9]'; x4=[8 6 9 16 15 17 8 10 4 16 7 12 6 4 4 14 6 8 13 11]'; %输入因变量数据 y=[79.3 200.1 163.1 200.1 146.0 177.7 30.9 291.9 160 339.4 159.6 86.3 237.5 107.2 155 201.4 100.2 135.8 223.3 195]'; X=[ones(size(x1)),x1,x2,x3,x4]; [b,bint,r,rint,stats]=regress(y,X)%回归分析 Q=r'*r sigma=Q/18 rcoplot(r,rint); %逐步回归 X1=[x1,x2,x3,x4];

Matlab非线性规划

一般非线性规划 标准型为: min F(X) s.t AX<=b b e q X A e q =? G(X)0≤ Ceq(X)=0 VLB ≤X ≤VUB 其中X 为n 维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.用Matlab 求解上述问题,基本步骤分三步: 1. 首先建立M 文件fun.m,定义目标函数F (X ): function f=fun(X); f=F(X); 2. 若约束条件中有非线性约束:G(X)0≤或Ceq(X)=0,则建立M 文件nonlcon.m 定义函数G(X)与Ceq(X): function [G,Ceq]=nonlcon(X) G=... Ceq=... 3. 建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下: (1) x=fmincon (‘fun’,X0,A,b) (2) x=fmincon (‘fun’,X0,A,b,Aeq,beq) (3) x=fmincon (‘fun’,X0,A,b, Aeq,beq,VLB,VUB) (4) x=fmincon (‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’) (5)x=fmincon (‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options) (6) [x,fval]= fmincon(...) (7) [x,fval,exitflag]= fmincon(...) (8)[x,fval,exitflag,output]= fmincon(...) 注意: [1] fmincon 函数提供了大型优化算法和中型优化算法。默认时,若在

遗传算法解决非线性规划问题的Matlab程序

通常,非线性整数规划是一个具有指数复杂度的NP问题,如果约束较为复杂,Matlab优 化工具箱和一些优化软件比如lingo等,常常无法应用,即使能应用也不能给出一个较为令 人满意的解。这时就需要针对问题设计专门的优化算法。下面举一个遗传算法应用于非线性整数规划的编程实例,供大家参考! 模型的形式和适应度函数定义如下: nun £ =迟叼匸[(1_冏)督 i-1 /-I J=K乙员-??严丿=12 M…严 ▼ 0 或1* 适应度函数为3 Fi tn叱O)=》〔?巾1口{>?(卡(£)一/;0?门))转幷亠 Z j'-i 50 4 S0 其中比=2、即士£ = £ =瓦%■,口(1-务),马;j^ = s = ■ x v' y- to.8,02)., /-I i-L i-1 E 这是一个具有200个01决策变量的多目标非线性整数规划,编写优化的目标函数如下,其 中将多目标转化为单目标采用简单的加权处理。 fun ctio n Fit ness=FITNESS(x,FARM,e,q,w) %%适应度函数 %输入参数列表 % x 决策变量构成的 4X50的0-1矩阵 % FARM 细胞结构存储的当前种群,它包含了个体x

% e 4 X50的系数矩阵 % q 4 X50的系数矩阵 % w 1 X50的系数矩阵 %% gamma=0.98; N=length(FARM);% 种群规模 F1=zeros(1,N); F2=zeros(1,N); for i=1:N xx=FARM{i}; ppp=(1-xx)+(1-q).*xx; F1(i)=sum(w.*prod(ppp)); F2(i)=sum(sum(e.*xx)); end ppp=(1-x)+(1-q).*x; f1=sum(w.*prod(ppp)); f2=sum(sum(e.*x)); Fitness=gamma*sum(min([sign(f1-F1);zeros(1,N)]))+(1-gamma)*sum(min([sign(f2- F2);zeros(1,N)])); 针对问题设计的遗传算法如下,其中对模型约束的处理是重点考虑的地方 function [Xp,LC1,LC2,LC3,LC4]=MYGA(M,N,Pm) %% 求解 01 整数规划的遗传算法 %% 输入参数列表

matlab建立多元线性回归模型并进行显著性检验及预测问题

matlab建立多元线性回归模型并进行显著性检 验及预测问题 例子; x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]'; X=[ones(16,1) x]; 增加一个常数项 Y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]'; [b,bint,r,rint,stats]=regress(Y,X) 得结果:b = bint = stats = 即对应于b的置信区间分别为[,]、[,]; r2=, F=, p= p<, 可知回 归模型 y=+ 成立. 这个是一元的,如果是多元就增加X的行数! function [beta_hat,Y_hat,stats]=regress(X,Y,alpha) % 多元线性回归(Y=Xβ+ε)MATLAB代码 % % 参数说明 % X:自变量矩阵,列为自变量,行为观测值 % Y:应变量矩阵,同X % alpha:置信度,[0 1]之间的任意数据 % beta_hat:回归系数 % Y_beata:回归目标值,使用Y-Y_hat来观测回归效果 % stats:结构体,具有如下字段 % =[fV,fH],F检验相关参数,检验线性回归方程是否显著 % fV:F分布值,越大越好,线性回归方程 越显著 % fH:0或1,0不显著;1显著(好) % =[tH,tV,tW],T检验相关参数和区间估计,检验回归系数β是 否与Y有显著线性关系 % tV:T分布值,beta_hat(i)绝对值越大, 表示Xi对Y显著的线性作用 % tH:0或1,0不显著;1显著 % tW:区间估计拒绝域,如果beta(i)在对 应拒绝区间内,那么否认Xi对Y显著的线性作用 % =[T,U,Q,R],回归中使用的重要参数 % T:总离差平方和,且满足T=Q+U % U:回归离差平方和 % Q:残差平方和 % R∈[0 1]:复相关系数,表征回归离差占总 离差的百分比,越大越好 % 举例说明 % 比如要拟合 y=a+b*log(x1)+c*exp(x2)+d*x1*x2,注意一定要将原来方程 线化 % x1=rand(10,1)*10;

多元线性回归 matlab中求解

多元线性回归matlab中求解 源代码: y=data(:,1); >> x=data(:,2:3); >> [b,bint,r,rint,stats]=regress(y,x) 结果: b =1.6031 21.0280 bint =0.6449 2.5612 14.4526 27.6034 r =-16.2442 8.8754 17.5828 8.3155 7.6692 -20.7990 0.1578 9.1298 21.1145 -28.9567 rint =-54.5200 22.0316 -28.0267 45.7775 -15.2745 50.4401 -29.9540 46.5850 -30.7374 46.0758 -57.6551 16.0572 -40.7942 41.1098 -30.8252 49.0848 -15.2155 57.4446 -59.3228 1.4095 stats =1.0148 742.1191 0.0000 322.5068 分析结果: stats四个值说明:判决系数r^2,,F统计值,p值,误差方差 y=a1*x(1)+a2*x(2);其中a1=1.6031,a2=21.0280, a1的置信区间【0.6449,2.5612】,a2的置信区间【14.45426,27.6043】,p小于0.05,说明显著效果很好,越小越好 在spss中求解:

线性规划matlab求解 例1:c=[2;3;1]; mix z=2*x1+3*x2+x3 >> a=[1 4 2;3 2 0]; s.t 1.x1+4*x2+2*x3>=8; >> b=[8;6]; 2.3*x1+2*x2>=6; >> [x,y]=linprog(c,-a,-b,[],[],zeros(3,1) ) 3.x1>=0,x2>=0,x3>=0结果:x =0.8066

多元回归分析matlab剖析

回归分析MATLAB 工具箱 一、多元线性回归 多元线性回归:p p x x y βββ+++=...110 1、确定回归系数的点估计值: 命令为:b=regress(Y , X ) ①b 表示???? ?? ????????=p b βββ?...??10 ②Y 表示????????????=n Y Y Y Y (2) 1 ③X 表示??? ??? ????? ???=np n n p p x x x x x x x x x X ...1......... .........1 (12) 1 22221 11211 2、求回归系数的点估计和区间估计、并检验回归模型: 命令为:[b, bint,r,rint,stats]=regress(Y ,X,alpha) ①bint 表示回归系数的区间估计. ②r 表示残差. ③rint 表示置信区间. ④stats 表示用于检验回归模型的统计量,有三个数值:相关系数r 2、F 值、与F 对应的概率p. 说明:相关系数2 r 越接近1,说明回归方程越显著;)1,(1-->-k n k F F α时拒绝0H ,F 越大,说明回归方程越显著;与F 对应的概率p α<时拒绝H 0,回归模型成立. ⑤alpha 表示显著性水平(缺省时为0.05) 3、画出残差及其置信区间. 命令为:rcoplot(r,rint) 例1.如下程序. 解:(1)输入数据. x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]'; X=[ones(16,1) x]; Y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]'; (2)回归分析及检验. [b,bint,r,rint,stats]=regress(Y ,X) b,bint,stats 得结果:b = bint =

Matlab多变量回归分析教程

本次教程的主要内容包含: 一、多元线性回归 2# 多元线性回归:regress 二、多项式回归 3# 一元多项式:polyfit或者polytool 多元二项式:rstool或者rsmdemo 三、非线性回归 4# 非线性回归:nlinfit 四、逐步回归 5# 逐步回归:stepwise 一、多元线性回归 多元线性回归: 1、b=regress(Y, X ) 确定回归系数的点估计值

2、[b, bint,r,rint,stats]=regress(Y,X,alpha)求回归系数的点估计和区间估计、并检验回归模型 ①bint表示回归系数的区间估计. ②r表示残差 ③rint表示置信区间 ④stats表示用于检验回归模型的统计量,有三个数值:相关系数r2、F值、与F对应的概率p 说明:相关系数r2越接近1,说明回归方程越显著;时拒绝H0,F越大,说明回归方程越显著;与F对应的概率p<α时拒绝H0 ⑤alpha表示显著性水平(缺省时为0.05) 3、rcoplot(r,rint)画出残差及其置信区间 具体参见下面的实例演示 4、实例演示,函数使用说明 (1)输入数据 1.>>x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]'; 2.>>X=[ones(16,1) x]; 3.>>Y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]'; 复制代码 (2)回归分析及检验 1. >> [b,bint,r,rint,stats]=regress(Y,X) 2. 3. b = 4. 5. -1 6.0730 6.0.7194 7. 8. 9.bint =

MATLAB非线性优化fmincon

active-set and sqp algorithms 不接受用户提供的海塞矩阵,对拉格朗日的海塞矩阵提供一个拟牛顿的近似值; 目标函数估值次数与迭代次数? 优化成功或失败 一、求解失败 1、在到达迭代次数阈值或目标函数估值次数阈值时,求解器没有最小化目标到要求的精度,此时求解器停止。接下来,可以尝试以下方法: (1)设置‘Display’为‘iter’,查看每步的迭代信息,这些信息包括:目标函数(Fval or f(x) or Resnorm)是否是下降的;检查约束越界(Max constraint)是否是递减趋向于0;查看一阶优化是否是递减趋向于0;查看置信域半径(Trust-region radius)是否下降趋向于一个小的值。若其中至少一种情况为是,就表示结果是不断改善的。如果结果是不断改善的,可以采取下边的措施:设置MaxIter、MaxFunEvals比默认值大的值,默认值可以在优化工具箱或求解器的函数参考页的优化表中查看;从最后计算出的点开始重新求解。如果结果没有改善,尝试以下其他的方法。(2)放松精度 如果TolX或TolFun太小,当求解器达到一个最小值时可能也不会识别到,这就会导致无限次徒劳的迭代。DiffMaxChange和DiffMinChange选项能影响求解器的改善,它们控制求导估计中有限差分的步长。 (3)从不同的初始点重新开始求解

(4)检查目标函数和约束函数的定义 举个例子,可以检查目标函数和非线性约束函数在某些特定点处返回正确的值。不可行的点不一定导致函数的错误。 (5)对问题进行中心化和标准化 当每个坐标轴对目标函数和约束函数有相同的影响时,求解器更能可靠的运行,对每个坐标轴方向乘以合适的量使得每个坐标轴的影响相同,在特定的坐标轴上加上合适的值使得它们长度一致。 (6)提供解析的梯度和雅可比矩阵 如果用户不提供解析的梯度或雅可比矩阵,求解器会用有限差分来估计这些值,因此提供这些导数可以减少运算时间,提高计算准确度。 对于约束问题,提供梯度还有另一个好处----求解器到达一个点x 时能满足该点是可行的,但有限差分在x点周围可能会导致不可行的点,在这种情况下,求解器可能会失败或突然中断。(7)提供海塞矩阵 当提供海塞矩阵时,求解器能运行的更可靠,而且运行的次数比较少。 2、无可行点 在TolCon约束精度内,求解器不能找到一个满足所有约束条件的点,此时,可以尝试以下方法: (1)检查线性约束

matlab多元非线性回归教程

matlab 回归(多元拟合)教程 前言 1、学三条命令 polyfit(x,y,n)---拟合成一元幂函数(一元多次) regress(y,x)----可以多元, nlinfit(x,y,’fun ’,beta0) (可用于任何类型的函数,任意多元函数,应用范围最主,最万能的) 2、同一个问题,这三条命令都可以使用,但结果肯定是不同的,因为拟合的近似结果,没有唯一的标准的答案。相当于咨询多个专家。 3、回归的操作步骤: 根据图形(实际点),选配一条恰当的函数形式(类型)---需要数学理论与基础和经验。(并写出该函数表达式的一般形式,含待定系数)------选用某条回归命令求出所有的待定系数。所以可以说,回归就是求待定系数的过程(需确定函数的形式) 一、回归命令 一元多次拟合polyfit(x,y,n);一元回归polyfit;多元回归regress---nlinfit(非线性) 二、多元回归分析 对于多元线性回归模型(其实可以是非线性,它通用性极高): e x x y p p ++ ++ = βββ 1 10 设变量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 2 1 22221 1121111 1,?? ?? ? ?? ??=n y y y y 21,则?????? ? ??=p ββββ 10 的估计值为排列方式与线性代数中的线性方程组相同(),拟合成多元函数---regress 使用格式:左边用b=[b, bint, r, rint, stats]右边用=regress(y, x)或regress(y, x, alpha) ---命令中是先y 后x, ---须构造好矩阵x(x 中的每列与目标函数的一项对应) ---并且x 要在最前面额外添加全1列/对应于常数项

多目标非线性规划程序(Matlab)

function [errmsg,Z,X,t,c,fail] = BNB18(fun,x0,xstat,xl,xu,A,B,Aeq,Beq,nonlcon,setts,options1,options2,ma xSQPit,varargin); %·???D???êy1????£Dí?ó?a·??§?¨??μü′ú??·¨?£?úMATLAB5.3?Dê1ó?£?DèOptimizat ion toolbox 2.0?§3?? % Minimize F(x) %subject to: xlb <= x <=xub % A*x <= B % Aeq*x=Beq % C(x)<=0 % Ceq(x)=0 % % x(i)?é?aá?D?±?á?£???êy£??ò1ì?¨?μ % ê1ó???ê? %[errmsg,Z,X]=BNB18('fun',x0,xstat,xl,xu,A,B,Aeq,Beq,'nonlcon',setts) %fun£o M???t??£?±íê?×?D??ˉ??±êoˉêyf=fun(x) %x0: áD?òá?£?±íê?±?á?3??μ %xstat£o áD?òá?£?xstat(i)=0±íê?x(i)?aá?D?±?á?£?1±íê???êy£?2±íê?1ì?¨?μ %xl£o áD?òá?£?±íê?±?á????? %xu: áD?òá?£?±íê?±?á?é??? %A: ???ó, ±íê???D?2?μèê???ê??μêy %B: áD?òá?, ±íê???D?2?μèê???ê?é??? %Aeq: ???ó, ±íê???D?μèê???ê??μêy %Beg: áD?òá?, ±íê???D?2?μèê???ê?óò???μ %nonlcon: M???t??£?±íê?·???D???ê?oˉêy[C,Ceq]=nonlin(x),???DC(x)?a2?μèê???ê?, % Ceq(x)?aμèê???ê? %setts: ??·¨éè?? %errmsq: ·μ??′í?óìáê? %Z: ·μ????±êoˉêy×?D??μ %X: ·μ??×?ó??a % %àyìa % max x1*x2*x3 % -x1+2*x2+2*x3>=0 % x1+2*x2+2*x3<=72 % 10<=x2<=20 % x1-x2=10 % ?èD′ Moˉêydiscfun.m % function f=discfun(x) % f=-x(1)*x(2)*x(3); %?ó?a % clear;x0=[25,15,10]';xstat=[1 1 1]'; % xl=[20 10 -10]';xu=[30 20 20]'; % A=[1 -2 -2;1 2 2];B=[0 72]';Aeq=[1 -1 0];Beq=10; % [err,Z,X]=BNB18('discfun',x0,xstat,xl,xu,A,B,Aeq,Beq); % XMAX=X',ZMAX=-Z % % BNB18 Finds the constrained minimum of a function of several possibly integer variables. % Usage: [errmsg,Z,X,t,c,fail] = % BNB18(fun,x0,xstatus,xlb,xub,A,B,Aeq,Beq,nonlcon,settings,options1,opti ons2,maxSQPiter,P1,P2,...) % % BNB solves problems of the form: % Minimize F(x) subject to: xlb <= x0 <=xub

matlab多元非线性回归及显着性分析(实例)

matlab多元非线性回归及显著性分析 给各位高手:小弟有一些数据需要回归分析(非线性)及显著性检验(回归模型,次要项,误差及失拟项纯误差,F值和P值),求大侠帮助,给出程序,不胜感激。 模型: DA TA=... %DA TA前三列是影响因子,第四列为响应值 [2 130 75 48.61; 2 110 75 56.43; 2 130 45 61.32; 2 110 45 65.28; 1 110 45 55.80; 1 130 75 45.65; 1 110 75 50.91; 1 130 45 67.94; 1.5 120 60 74.15; 1.5 120 60 71.28; 1.5 120 60 77.95; 1.5 120 60 74.16; 1.5 120 60 75.20; 1.5 120 85 35.65; 1.5 140 60 48.66; 1.5 120 30 74.10; 1.5 100 60 6 2.30; 0.5 120 60 66.00; 2.5 120 60 75.10]; 回归分析过程: (1)MATLAB编程步骤1:首先为非线性回归函数编程,程序存盘为user_function.m function y=user_function(beta,x) b0 = beta(1); b1 = beta(2); b2 = beta(3); b3 = beta(4); x0 = x(:,1); x1 = x(:,2); x2 = x(:,3); x3 = x(:,4); y=b0*x0+b1*x1.^2+b2*x2.^2+b3*x3.^2; (2)MATLAB编程步骤2:编写非线性回归主程序,程序运行时调用函数user_function x=[1 2 130 75 48.61;

MATLAB非线性规划问题样本

一.非线性规划课题 实例1 表面积为36平方米的最大长方体体积。 建立数学模型: 设x、 y、 z分别为长方体的三个棱长, f为长方体体积。 max f = x y (36-2 x y)/2 (x+y) 实例2 投资决策问题 某公司准备用5000万元用于A、 B两个项目的投资, 设x 1、 x 2 分别表示配 给项目A、 B的投资。预计项目A、 B的年收益分别为20%和16%。同时, 投资后总的风险损失将随着总投资和单位投资的增加而增加, 已知总的风险损失为 2x 12+x 2 2+(x 1 +x 2 )2.问应如何分配资金, 才能使期望的收益最大, 同时使风险损失 为最小。 建立数学模型: max f=20x 1+16x 2 -λ[2x 1 2+x 2 2+(x 1 +x 2 )2] s.t x 1+x 2 ≤5000 x 1≥0,x 2 ≥0 目标函数中的λ≥0是权重系数。 由以上实例去掉实际背景, 其目标函数与约束条件至少有一处是非线性的, 称其为非线性问题。 非线性规划问题可分为无约束问题和有约束问题。实例1为无约束问题, 实例2为有约束问题。 二.无约束非线性规划问题: 求解无约束最优化问题的方法主要有两类: 直接搜索法(Search method)和梯度法(Gradient method), 单变量用fminbnd,fminsearch,fminunc;多变量用fminsearch,fminnuc 1.fminunc函数 调用格式: x=fminunc(fun,x0) x=fminunc(fun,x0,options)

x=fminunc(fun,x0,options,P1,P2) [x,fval]=fminunc(…) [x,fval, exitflag]=fminunc(…) [x,fval, exitflag,output]=fminunc(…) [x,fval, exitflag,output,grad]=fminunc(…) [x,fval, exitflag,output,grad,hessian]=fminunc(…) 说明: fun 为需最小化的目标函数, x0为给定的搜索的初始点。options 指定优化参数。 返回的x 为最优解向量; fval 为x 处的目标函数值; exitflag 描述函数的输出条件; output 返回优化信息; grad 返回目标函数在x 处的梯度。Hessian 返回在x 处目标函数的Hessian 矩阵信息。 例1 : 求 22348m in y x y x f ++-= 程序: 经过绘图确定一个初始点: [x,y]=meshgrid(-10:.5:10); z= 8*x-4*y +x.^2+3*y.^2; surf(x,y,z) 选初始点: x0=(0,0) x0=[0,0];

(研究生-数理统计)多元线性回归及显著性检验Matlab程序(完美版)

多元线性回归及显著性检验Matlab程序(完美版) 一、说明: 1、本程序是研究生教材《数理统计》(杨虎、刘琼、钟波编著)例4.4.1(P133)的Matlab 编程解答程序。教材上的例题只做了回归方程显著性分析和一次回归系数显著性分析(剔除x1后没有再检验x2和x3)。 2、本程序在以上的基础之上,还分别检验了x2和x3,并且计算精度更高。 3、本程序可根据用户的需要,在输入不同的显著性水平α之下得到相应的解答。 4、本程序移植性强,对于其他数据,只需要改变excel中的数据即可。 5、本程序输出的可读性强,整洁美观。 二、数据入下(将数据存入excel表格,文件名为jc_p133_example.xls。注意数据是按 ):

三、完整程序如下: %----------------------------by ggihhimm---------------------------- %《数理统计》杨虎、刘琼、钟波编著例4.4.1 多元线性回归及显著性检验完整解答 % 输入需要的显著水平α(默认α=0.02),计算出不同结果(见运行结果) % 该程序也适合其他维数的数据分析(只需改变excel表格中的数据即可) %----------------------------by ggihhimm---------------------------- clear;clc; data=xlsread('jc_p133_example.xls','sheet1'); xi=data(:,1:end-1); [n,k]=size(data); k=k-1; index_of_xi_array=ones(1,k); X=[ones(n,1) xi]; Y=data(:,end); fprintf('第1次计算结果:\r') beta_mao=((X'*X)\X'*Y)'; fmt_str0=''; for i0=1:k+1 fmt_str0=[fmt_str0 'β' num2str(i0-1) ' = %0.4f\r']; end fprintf(fmt_str0,beta_mao) fprintf('\r')

Matlab线性回归(拟合)-应用

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),得到的p+1维列向量b 即为(11.2)式给出的回归系数β的 估计值. [b, bint, r, rint, stats]=regress(y, x) 给出回归系数β的估计值b ,β的95%置 信区间((p+1)*2向量)bint ,残差r 以及每个残差的95%置信区间(2?n 向量)rint ;向量stats 给出回归的R2统计量和F 以及临界概率p 的值. 如果i β的置信区间(bint 的第i+1行)不包含0,则在显著水平为α时拒绝0i β=的假设,认为变量i x 是显著的. [b, bint, r, rint, stats]=regress(y, x, alpha) 给出了bint 和rint 的100(1-alpha)%的置信区间. 1.三次样条插值函数的MATLAB 程序 matlab 的spline x = 0:10; y = sin(x); %插值点 xx = 0:.25:10; %绘图点 yy = spline(x,y,xx);

matlab多元线性回归模型

matlab多元线性回归模型

云南大学数学与统计学实验教学中心 实验报告 一、实验目的 1.熟悉MATLAB的运行环境. 2.学会初步建立数学模型的方法 3.运用回归分析方法来解决问题 二、实验内容 实验一:某公司出口换回成本分析 对经营同一类产品出口业务的公司进行抽样调查,被调查的13家公司,其出口换汇成本与商品流转费用率资料如下表。试分析两个变量之间的关系,并估计某家公司商品流转费用率是6.5%的出口换汇成本.

实验二:某建筑材料公司的销售量因素分析 下表数据是某建筑材料公司去年20个地区的销售量(Y,千方),推销开支、实际帐目数、同类商品竞争数和地区销售潜力分别是影响建筑材料销售量的因素。1)试建立回归模型,且分析哪些是主要的影响因素。2)建立最优回归模型。

提示:建立一个多元线性回归模型。 三、实验环境 Windows操作系统; MATLAB 7.0. 四、实验过程 实验一:运用回归分析在MATLAB里实现 输入:x=[4.20 5.30 7.10 3.70 6.20 3.50 4.80 5.50 4.10 5.00 4.00 3.40 6.90]'; X=[ones(13,1) x]; Y=[1.40 1.20 1.00 1.90 1.30 2.40 1.40 1.60 2.00 1.00 1.60 1.80 1.40]'; plot(x,Y,'*'); [b,bint,r,rint,stats]=regress(Y,X,0.05); 输出: b = 2.6597 -0.2288 bint = 1.8873 3.4322 -0.3820 -0.0757 stats = 0.4958 10.8168 0.0072

相关文档
相关文档 最新文档