浅谈matlab多变量拟合

浅谈matlab多变量拟合
浅谈matlab多变量拟合

首先申明本人就是土木专业的,因为有需要要用到matlab中的拟合用途,今天好好学习了一些关于matlab多变量拟合的东西,从网上下载了一些程序,也运行了一下,就举一些实例,附上源程序吧,主要就是两个自变量与三个自变量,一个因变量的拟合。让自己也更清楚,以后用起来也方便。

原理就就是给出一个自变量与因变量的矩阵,然后给出一个自己认为的带有未知数的拟合方程,然后付一组初始值,根据matlab返回的初始值与误差在附一组初始值,知道最后的相关系数较大,也就就是误差较小时,就能拟合的比较好,写出拟合后的方程了。

1、广义线性回归拟合与源码(两个自变量,一个因变量,非线性拟合)

【例】这里有这样一组数据,涉及三个变量:p,t 与z,要拟合出z = f(p,t) 的关系式(非线性的)。

z p 0、8 1 1、2

t

60 9、73875 20、75 36、5987

120 13、5725 29、6325 50、93875

180 18、97875 36、59875 80、13875

240 2075125 38、22125 90、925

300 22、055 44、58 104、7725

为了使得回归分析的结果更加直观,我调用regstats函数,编写了一个更为实用的函

数:reglm,代码如下(代码中有调用方法与例子)。

首先写一个M文件:

function stats = reglm(y,X,model,varnames)

% 多重线性回归分析或广义线性回归分析

%

% reglm(y,X),产生线性回归分析的方差分析表与参数估计结果,并以表格形式显示在屏幕上、参

% 数X就是自变量观测值矩阵,它就是n行p列的矩阵、y就是因变量观测值向量,它就是n行1列的列向量、

%

% stats = reglm(y,X),还返回一个包括了回归分析的所有诊断统计量的结构体变量stats、

%

% stats = reglm(y,X,model),用可选的model参数来控制回归模型的类型、model 就是一个字符串,

% 其可用的字符串如下

% 'linear' 带有常数项的线性模型(默认情况)

% 'interaction' 带有常数项、线性项与交叉项的模型

% 'quadratic' 带有常数项、线性项、交叉项与平方项的模型

% 'purequadratic' 带有常数项、线性项与平方项的模型

%

% stats = reglm(y,X,model,varnames),用可选的varnames参数指定变量标签、varnames

% 可以就是字符矩阵或字符串元胞数组,它的每行的字符或每个元胞的字符串就是一个变量的标签,它的行

% 数或元胞数应与X的列数相同、默认情况下,用X1,X2,…作为变量标签、

%

% 例:

% x = [215 250 180 250 180 215 180 215 250 215 215

% 136、5 136、5 136、5 138、5 139、5 138、5 140、5 140、5 140、5 138、5 138、5]';

% y = [6、2 7、5 4、8 5、1 4、6 4、6 2、8 3、1 4、3 4、9 4、1]';

% reglm(y,x,'quadratic')

%

% ----------------------------------方差分析表----------------------------------

% 方差来源自由度平方与均方F值p值

% 回归5、0000 15、0277 3、0055 7、6122 0、0219 % 残差5、0000 1、9742 0、3948

% 总计10、0000 17、0018

%

% 均方根误差(Root MSE) 0、6284 判定系数(R-Square) 0、8839 % 因变量均值(Dependent Mean) 4、7273 调整的判定系数(Adj R-Sq) 0、7678

%

% -----------------------------------参数估计-----------------------------------

% 变量估计值标准误t值p值

% 常数项30、9428 2011、1117 0、0154 0、9883

% X1 0、7040 0、6405 1、0992 0、3218

% X2 -0、8487 29、1537 -0、0291 0、9779

% X1*X2 -0、0058 0、0044 -1、3132 0、2461

% X1*X1 0、0003 0、0003 0、8384 0、4400

% X2*X2 0、0052 0、1055 0、0492 0、9626

%

% Copyright 2009 - 2010 xiezhh、

% $Revision: 1、0、0、0 $ $Date: 2009/12/22 21:41:00 $

if nargin < 2

error('至少需要两个输入参数');

end

p = size(X,2); % X的列数,即变量个数

if nargin < 3 || isempty(model)

model = 'linear'; % model参数的默认值

end

% 生成变量标签varnames

if nargin < 4 || isempty(varnames)

varname1 = strcat({'X'},num2str([1:p]'));

varnames = makevarnames(varname1,model); % 默认的变量标签

else

if ischar(varnames)

varname1 = cellstr(varnames);

elseif iscell(varnames)

varname1 = varnames(:);

else

error('varnames 必须就是字符矩阵或字符串元胞数组');

end

if size(varname1,1) ~= p

error('变量标签数与X的列数不一致');

else

varnames = makevarnames(varname1,model); % 指定的变量标签

end

end

ST = regstats(y,X,model); % 调用regstats函数进行线性回归分析,返回结构体变量ST

f = ST、fstat; % F检验相关结果

t = ST、tstat; % t检验相关结果

% 显示方差分析表

fprintf('\n');

fprintf('------------------------------方差分析表------------------------------'); fprintf('\n');

fprintf('%s%7s%15s%15s%15s%12s','方差来源','自由度','平方与','均方','F值','p 值');

fprintf('\n');

fmt = '%s%13、4f%17、4f%17、4f%16、4f%12、4f';

fprintf(fmt,'回归',f、dfr,f、ssr,f、ssr/f、dfr,f、f,f、pval);

fprintf('\n');

fmt = '%s%13、4f%17、4f%17、4f';

fprintf(fmt,'残差',f、dfe,f、sse,f、sse/f、dfe);

fprintf('\n');

fmt = '%s%13、4f%17、4f';

fprintf(fmt,'总计',f、dfe+f、dfr,f、sse+f、ssr);

fprintf('\n');

fprintf('\n');

% 显示判定系数等统计量

fmt = '%22s%15、4f%25s%10、4f';

fprintf(fmt,'均方根误差(Root MSE)',sqrt(ST、mse),'判定系数(R-Square)',ST、rsquare);

fprintf('\n');

fprintf(fmt,'因变量均值(Dependent Mean)',mean(y),'调整的判定系数(Adj

R-Sq)',、、、

ST、adjrsquare);

fprintf('\n');

fprintf('\n');

% 显示参数估计及t检验相关结果

fprintf('-------------------------------参数估计-------------------------------');

fprintf('\n');

fprintf('%8s%18s%15s%15s%12s','变量','估计值','标准误','t值','p值'); fprintf('\n');

for i = 1:size(t、beta,1)

if i == 1

fmt = '%8s%20、4f%17、4f%17、4f%12、4f\n';

fprintf(fmt,'常数项',t、beta(i),t、se(i),t、t(i),t、pval(i));

else

fmt = '%10s%20、4f%17、4f%17、4f%12、4f\n';

fprintf(fmt,varnames{i-1},t、beta(i),t、se(i),t、t(i),t、pval(i));

end

end

if nargout == 1

stats = ST; % 返回一个包括了回归分析的所有诊断统计量的结构体变量

end

% -----------------子函数-----------------------

function varnames = makevarnames(varname1,model)

% 生成指定模型的变量标签

p = size(varname1,1);

varname2 = [];

for i = 1:p-1

varname2 = [varname2;strcat(varname1(i),'*',varname1(i+1:end))]; end

varname3 = strcat(varname1,'*',varname1);

switch model

case 'linear'

varnames = varname1;

case 'interaction'

varnames = [varname1;varname2];

case 'quadratic'

varnames = [varname1;varname2;varname3];

case 'purequadratic'

varnames = [varname1;varname3];

end

调用自编的reglm函数进行二次拟合,命令如下:

>> z = [9、73875 20、75 36、59875

13、5725 29、6325 50、93875

18、97875 36、59875 80、13875

20、75125 38、22125 90、925

22、055 44、58 104、7725];

>> [p,t] = meshgrid([0、8 1 1、2],[60:60:300]);

>> stats = reglm(z(:),[p(:), t(:)],'quadratic',{'p','t'});

>> [pnew,tnew] = meshgrid(linspace(0、8,1、2,20),linspace(60,300,20)); >> pp = pnew(:);

>> tt = tnew(:);

>> zhat = [ones(400,1) pp tt pp、*tt pp、^2 tt、^2]*stats、beta;

>> mesh(pnew,tnew,reshape(zhat,[20,20]));

>> hold on

>> plot3(p(:),t(:),z(:),'k*')

拟合结果:

------------------------------------方差分析表------------------------------------

方差来源自由度平方与均方F值p值

回归5、0000 11548、9147 2309、7829 93、4739 0、0000 残差9、0000 222、3942 24、7105

总计14、0000 11771、3089

均方根误差(Root MSE) 4、9710 判定系数(R-Square) 0、9811 因变量均值(Dependent Mean) 41、2168 调整的判定系数(Adj R-Sq) 0、9706

-----------------------------------参数估计----------------------------------- 变量估计值标准误t值p值

常数项242、6188 69、0439 3、5140 0、0066

p -513、7781 137、3777 -3、7399 0、0046

t -0、3637 0、1212 -3、0002 0、0150

p*t 0、6022 0、0926 6、5010 0、0001

p*p 272、2625 68、0677 3、9999 0、0031

t*t -0、0003 0、0002 -1、1946 0、2628

2、三个自变量,一个因变量

clear,clc

x1=[333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 333、15 328、15 330、65 333、15 335、65 338、15 340、65 343、15 333、15 333、15 333、15 323、15 325、65 345、65 348、15]';

x2=[1、19 1、206 1、228 1、23 1、252 1、27 1、277 1、31 1、35 1、39 1、43 1、23 1、23 1、23 1、23 1、23 1、2 1、2 1、2 1、2 1、2 1、26 1、26 1、26 1、26 1、26 1、23 1、23 1、23 1、23 1、23 1、23 1、23 1、15 1、47 1、51 1、23 1、23 1、23 1、23]';

x3=[80 80 80 80 80 80 80 80 80 80 80 77 78 79 80 81 67 68 69 70 71 86 87 88 89 90 80 80 80 80 80 80 80 80 80 80 80 80 80 80]';

y=[59、49 55、16 50、18 49、78 45、75 42、96 41、96 37、87 33、96 30、83 28、29 47、92 48、54 49、19 49、78 50、42 47、49 48、21 48、9 49、63 50、32 47、8 48、38 48、91 49、47 50、04 50、49 50、14 49、79 49、45 49、13 48、81 48、5 74、13 26、18 24、39 51、22 50、85 48、21 47、92]';

X=[x1,x2,x3];

ymin=min(y);y=y-ymin;

fx=@(b,x1,x2,x3)(b(1)+b(2)*x1+b(3)*x2+b(4)*x3+b(5)*x1、^2+b(6)*x2、^2+b(7)*x3、^2+b(8)*x1、*x2+b(9)*x1、*x3+b(10)*x2、*x3+b(11)*x1、^3+b(12)*x2、^3+b(13)*x3、^3)、

/(1+b(14)*exp(b(15)*x1+b(16)*x2+b(17)*x3+b(18)*x1、*x2+b(19)*x1、

*x3+b(20)*x2、*x3));

fx2=@(b,X,y)(b(1)+b(2)*X(:,1)+b(3)*X(:,2)+b(4)*X(:,3)+b(5)*X(:,1)、

^2+b(6)*X(:,2)、^2+b(7)*X(:,3)、^2+b(8)*X(:,1)、*X(:,2)+b(9)*X(:,1)、

*X(:,3)+b(10)*X(:,2)、*X(:,3)+b(11)*X(:,1)、^3+b(12)*X(:,2)、

^3+b(13)*X(:,3)、^3)、

/(1+b(14)*exp(b(15)*X(:,1)+b(16)*X(:,2)+b(17)*X(:,3)+b(18)*X(:,1)、

*X(:,2)+b(19)*X(:,1)、*X(:,3)+b(20)*X(:,2)、*X(:,3)));

bm=[105091、513651451,1328、10332025611,-711027、452435498,-1213、61405762992,-1、88264106646625,934239、742471165,-25、5844409887743,-1301、90766627356,10、57,-642、229950374061,0、002281,-244987、606559315,0、9581,9、28886223888986e-05,-0、19651,13、49,0、02436,-0、766222,0、7999337,-0、50883];

b=bm;

for l=1:10

b=lsqcurvefit(fx2,b,X,y);

b=nlinfit(X,y,fx2,b);

end

b

m1=mean(x1);m2=mean(x2);m3=mean(x3);

r1=range(x1); r2=range(x2);r3=range(x3);ry=range(y);

x1a=min(x1);x1b=max(x1);

x2a=min(x2);x2b=max(x2);

x3a=min(x3);x3b=max(x3);

ya=min(y);yb=max(y);

n=length(y);str=num2str([1:n]');

figure(1),clf

plot3(x1,x2,y,'o')

stem3(x1,x2,y,'filled')

text(x1,x2,y+、04*ry,str,'fontsize',12)

pause(、0001)

hold on

[x11,x22]=meshgrid(x1a:r1/75:x1b,x2a:r2/75:x2b);

y1=fx(bm,x11,x22,m3);

surf(x11,x22,y1)

axis([x1a x1b x2a x2b ya yb])

alpha(、85)

shading interp

axis tight

pause(1、0001)

%clf

% for l=1:10

% plot3(x1,x2,y,'o')

% stem3(x1,x2,y,'filled')

% text(x1,x2,y+、04*ry,str,'fontsize',12)

% pause(、0001)

% hold on

% m3=x3a+l*r3/10;

% y1=fx(bm,x11,x22,m3);

% surf(x11,x22,y1)

% axis([x1a x1b x2a x2b ya yb])

% alpha(、4)

% shading interp

% axis tight

% pause(、5001)

% end

xlabel('X1'),ylabel('X2'),zlabel('Y')

figure(2),clf

[x11,x33]=meshgrid(x1a:r1/75:x1b,x3a:r3/75:x3b); plot3(x1,x3,y,'o')

stem3(x1,x3,y,'filled')

text(x1,x3,y+、04*ry,str,'fontsize',12)

pause(、0001)

hold on

y2=fx(bm,x11,m2,x33);

surf(x11,x33,y2)

axis([x1a x1b x3a x3b ya yb])

alpha(、85)

shading interp

axis tight

pause(5、0001)

%clf

% for l=1:10

% plot3(x1,x3,y,'o')

% stem3(x1,x3,y,'filled')

% text(x1,x3,y+、04*ry,str,'fontsize',12)

% pause(、0001)

% hold on

% m2=x2a+(l-1)*r2/10;

% y2=fx(bm,x11,m2,x33);

% surf(x11,x33,y2)

% axis([x1a x1b x3a x3b ya yb])

% alpha(、4)

% shading interp

% axis tight

% pause(、5001)

% end

xlabel('X1'),ylabel('X3'),zlabel('Y')

figure(3),clf

plot3(x2,x3,y,'o')

stem3(x2,x3,y,'filled')

text(x2,x3,y+、04*ry,str,'fontsize',12)

pause(、0001)

hold on

[x22,x33]=meshgrid(x2a:r2/75:x2b,x3a:r3/75:x3b);

y3=fx(bm,m1,x22,x33);

surf(x22,x33,y3)

axis([x2a x2b x3a x3b ya yb])

alpha(、85)

shading interp

axis tight

pause(5、0001)

%clf

% for l=1:10

% plot3(x2,x3,y,'o')

% stem3(x2,x3,y,'filled')

% text(x2,x3,y+、04*ry,str,'fontsize',12)

% pause(、0001)

% hold on

% m1=x1a+(l-1)*r1/10;

% y3=fx(bm,m1,x22,x33);

% surf(x22,x33,y3)

% axis([x2a x2b x3a x3b ya yb])

% alpha(、4)

% shading interp

% axis tight

% pause(、5001)

% end

xlabel('X2'),ylabel('X3'),zlabel('Y')

disp([' x1 x2 x3 y yhat']) yhat=fx(b,x1,x2,x3);

[x1,x2,x3,y+ymin,yhat+ymin]

SSy=var(y)*(n-1)

RSS=(y-yhat)'*(y-yhat)

Raqaure=(SSy-RSS)/SSy

Matlab多变量二次多项式拟合

一、对Y 总做线性多项式拟合:0112288......Y b b X b X b X =+++ 设置显著性水平为0.05,拟合得到: B=[ 0b ,1b ,………., 8b ]= [-60.0349 12.5809 2.2002 -12.9863 20.4145 0.0266 5.1430 17.2416 151.6779] 对应的置信区间为: -161.4058 41.3359 -7.5870 32.7488 -25.5706 29.9709 -33.5089 7.5362 -0.3096 41.1386 -2.5989 2.6520 0.9830 9.3030 -3.2810 37.7642 -64.0209 367.3767 r 2= 0.7454 (越接近于1,回归效果越显著),F= 2.5616, p= 0.1163,(p>0.05, 可知回归模型不成立)。 残差图如下:

从残差图可以看出,除第一个数据和最后一个数据的残差离零点均较远,说明这两个数据可视为异常点,去掉这两个数据之后再做拟合得到: B=[ 0b ,1b ,………., 8b ]= [-478.8 15.7 1.8 -85.3 43 2.8 24.7 135.3 1131.9] 对应的置信区间为: -1048.7 91.1 7.5 23.9 -8 11.6 -183.5 12.8 10.5 75.5 -1.1 6.7 -2 51.4 -25.8 296.4 -206.7 2470.4 r 2= 0.9690 (越接近于1,回归效果越显著),F= 19.5530, p= 0.0023,(p<0.05, 可知回归模型成立)。 残差图如下:

matlab最小二乘法的非线性参数拟合

matlab最小二乘法的非线性参数拟合 首先说一下匿名函数:在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率。所以首选匿名函数。具体拟合时可以使用的方法如下: 1 曲线拟合工具箱提供了很多拟合函数,使用简单 非线性拟合nlinfit函数 clear all; x1=[0.4292 0.4269 0.381 0.4015 0.4117 0.3017]'; x2=[0.00014 0.00059 0.0126 0.0061 0.00425 0.0443]'; x=[x1 x2]; y=[0.517 0.509 0.44 0.466 0.479 0.309]'; f=@(p,x) 2.350176*p(1)*(1-1/p(2))*(1-(1-x(:,1).^(1/p(2))).^p(2)).^2.*(x(:,1).^ (-1/p(2))-1).^(-p(2)).*x(:,1).^(-1/p(2)-0.5).*x(:,2); p0=[8 0.5]'; opt=optimset('TolFun',1e-3,'TolX',1e-3);% [p R]=nlinfit(x,y,f,p0,opt) 2 最小二乘法在曲线拟合中比较普遍。拟合的模型主要有 1.直线型 2.多项式型 3.分数函数型 4.指数函数型 5.对数线性型 6.高斯函数型 一般对于LS问题,通常利用反斜杠运算“\”、fminsearch或优化工具箱提供的极小化函数求解。在Matlab中,曲线拟合工具箱也提供了曲线拟合的图形界面操作。在命令提示符后键入:cftool,即可根据数据,选择适当的拟合模型。 “\”命令 1.假设要拟合的多项式是:y=a+b*x+c*x^ 2.首先建立设计矩阵X: X=[ones(size(x)) x x^2]; 执行: para=X\y para中包含了三个参数:para(1)=a;para(2)=b;para(3)=c; 这种方法对于系数是线性的模型也适应。 2.假设要拟合:y=a+b*exp(x)+cx*exp(x^2) 设计矩阵X为 X=[ones(size(x)) exp(x) x.*exp(x.^2)]; para=X\y 3.多重回归(乘积回归) 设要拟合:y=a+b*x+c*t,其中x和t是预测变量,y是响应变量。设计矩阵为X=[ones(size(x)) x t] %注意x,t大小相等! para=X\y

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曲线拟合2010a演示

2010a版本曲线拟合工具箱 一、单一变量的曲线逼近 Matlab有一个功能强大的曲线拟合工具箱cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。下面结合我使用的Matlab R2007b 来简单介绍如何使用这个工具箱。 假设我们要拟合的函数形式是y=A*x*x + B*x, 且A>0,B>0。 1、在主命令输入数据: x=233.8:0.5:238.8; y=[235.148 235.218 235.287 235.357 235.383 235.419 235.456 235.49 235.503 235.508 235.536]; 2、启动曲线拟合工具箱 cftool(x,y) 3、进入曲线拟合工具箱界面“Curve Fitting tool” 如图 (1)利用X data和Y data的下拉菜单读入数据x,y,可在Fit name修改数据集名,这时会自动画出数据集的曲线图;

(2)在红色区域选择拟合曲线类型 工具箱提供的拟合类型有: ?Custom Equations:用户自定义的函数类型 ?Exponential:指数逼近,有2种类型,a*exp(b*x) 、a*exp(b*x) + c*exp(d*x) ?Fourier:傅立叶逼近,有7种类型,基础型是a0 + a1*cos(x*w) + b1*sin(x*w) ?Gaussian:高斯逼近,有8种类型,基础型是a1*exp(-((x-b1)/c1)^2) ?Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubicspline、shape-preserving ?Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree~ ?Power:幂逼近,有2种类型,a*x^b 、a*x^b + c ?Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree~;此外,分子还包括constant型 ?Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思) ?Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是a1*sin(b1*x + c1) ?Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b) 在results一栏看结果

浅谈matlab多变量拟合

首先申明本人是土木专业的,因为有需要要用到matlab中的拟合用途,今天好好学习了一些关于matlab多变量拟合的东西,从网上下载了一些程序,也运行了一下,就举一些实例,附上源程序吧,主要是两个自变量和三个自变量,一个因变量的拟合。让自己也更清楚,以后用起来也方便。 原理就是给出一个自变量和因变量的矩阵,然后给出一个自己认为的带有未知数的拟合方程,然后付一组初始值,根据matlab返回的初始值和误差在附一组初始值,知道最后的相关系数较大,也就是误差较小时,就能拟合的比较好,写出拟合后的方程了。 1.广义线性回归拟合和源码(两个自变量,一个因变量,非线性拟合) 【例】这里有这样一组数据,涉及三个变量:p,t 和z,要拟合出z = f(p,t) 的关系式(非线性的)。 z p 0.8 1 1.2 t 60 9.73875 20.75 36.5987 120 13.5725 29.6325 50.93875 180 18.97875 36.59875 80.13875 240 2075125 38.22125 90.925 300 22.055 44.58 104.7725 为了使得回归分析的结果更加直观,我调用regstats函数,编写了一个更为实用的函数:reglm,代码如下(代码中有调用方法和例子)。 首先写一个M文件: function stats = reglm(y,X,model,varnames) % 多重线性回归分析或广义线性回归分析 % % reglm(y,X),产生线性回归分析的方差分析表和参数估计结果,并以表格形式显示在屏幕上. 参 % 数X是自变量观测值矩阵,它是n行p列的矩阵. y是因变量观测值向量,它是n行1列的列向量. % % stats = reglm(y,X),还返回一个包括了回归分析的所有诊断统计量的结构体变量stats. % % stats = reglm(y,X,model),用可选的model参数来控制回归模型的类型. model 是一个字符串, % 其可用的字符串如下 % 'linear' 带有常数项的线性模型(默认情况) % 'interaction' 带有常数项、线性项和交叉项的模型 % 'quadratic' 带有常数项、线性项、交叉项和平方项的模型 % 'purequadratic' 带有常数项、线性项和平方项的模型 % % stats = reglm(y,X,model,varnames),用可选的varnames参数指定变量标签. varnames % 可以是字符矩阵或字符串元胞数组,它的每行的字符或每个元胞的字符串是一个变量的标签,它的行 % 数或元胞数应与X的列数相同. 默认情况下,用X1,X2,…作为变量标签.

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线性回归(拟合)-应用

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实现 本次将教程的主要内容包含: 一、多元线性回归 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)输入数据 复制内容到剪贴板 >>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 = -16.0730

基于MATLAB的多元非线性回归模型

第29卷第2期2009年3月 云南师范大学学报 JournalofYunnanNormalUniversity V01.29No.2 Mar.2009基于MATLAB的多元非线性回归模型‘ 董大校 (临沧师范高等专科学校,云南临沧6770000) 摘要:MATLAB是源于矩阵运算的一种高度集成的计算机语言。它提供了强大的科学运算、灵活的 程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能。文章充分利用 MATLAB统计工具箱的优势,通过程序的实现,对多元非线性回归模型的未知参数的估计方法以及对估 计后的模型预报做出研究,并以实例验证了该方法的有效性。 关键词:MATLAB;多元非线性回归;td,--乘法;统计工具箱 中图分类号:TP301文献标识码:A文章编号:1007—9793(2009)02—0045—04 l预备知识 非线性回归最小二乘法拟合的基本原理…。 对给定数据(菇i,Y;)(i=0,l,…,rrt),在取定的函数类西中,求p(x)∈痧,使误差t=p(x)一Y。(i=0,1,…,m)的平方和最小,即 ∑#=∑[p(戈i)一,,i]2 最小,从几何意义上讲,就是寻求与给定点(菇i,Y;)(i=0,1,…,rn)的距离平方和为最小的曲线Y=p(菇)(图1)。函数p(x)称为拟合函数或最小二乘解,求拟合函数p(x)的方法称为曲线拟合的最小二乘法。 2MATLAB非线性曲线拟合命令介绍 2.1nHnfit函数旧1 用nlinfit函数进行非线性最小二乘数据拟合。该函数使用高斯一牛顿算法,调用格式如下: Qbeta=nlinfit(X,Y,fun,beta0)用最小二乘法估计非线性函数系数。Y为响应值(因变量)矢量。一般地,为自变量值组成的设计矩阵,每一行对应与Y中的一发个值。但是,x可以是fun参数能接受的任何数组。fun参数为一函数,该函数具有下面的形式 yhat=myfun(beta。X) 其中beta为系数矢量,x为设计矩阵。fun为参数返回一个拟合Y值的yhat矢量。betaO为包含系数初始值的矢量。 ●[beta,r,J]=nlinfit(X,Y,fun,beta0)返回拟合系数(beta)、残差(r)、和雅可比矩阵J,这些参数可以用于nlintool函数,生成预测值的误差估计;或用于nlparci函数生成系数的误差估计。 2.2nlintool函数 使用nlintool函数可以对数据进行非线性方程拟合并交互图形显示,其调用格式如下: ?收稿日期:2008—10-23 作者简介:董大校(1965一),男,云南省临沧市人,副教授,主要从事数学教学科研工作.

Matlab多变量线性拟合报告

一. 线性拟合 做多元线性回归:0112288......Y b b X b X b X =+++ 1、 Y1 的拟合: 设置显著性水平为0.05,拟合得到: B=[ 0b ,1b ,………., 8b ]= [-29.8112 6.3468 -4.3536 -14.4927 10.1348 -0.3807 2.3324 5.9676 63.9923] 对应的置信区间为: -81.8255 22.2030 -4.0016 16.6951 -18.6030 9.8958 -25.0230 -3.9624 -0.4989 20.7685 -1.7279 0.9664 0.1979 4.4670 -4.5627 16.4979 -46.6847 174.6693 r 2 = 0.8425 (越接近于1,回归效果越显著),F= 4.6804, p= 0.0282,(p<0.05, 可知回归模型成立)。 残差图如下:

从残差图可以看出,数据的残差离零点均较近,且残差的置信区间均包含零点,这说明回归模型能较好的符合原始数据。 2、 Y2 的拟合: 设置显著性水平为0.05,拟合得到: B=[ 0b ,1b ,………., 8b ]= [-35.5425 3.0718 0.9342 2.2699 6.0198 0.0592 1.5780 10.1258 58.7683] 对应的置信区间为: -130.6784 59.5934 -15.8557 21.9992 -25.1285 26.9968 -16.9904 21.5302 -13.4296 25.4692 -2.4048 2.5232 -2.3262 5.4821 -9.1345 29.3861 -143.6637 261.2004 r 2= 0.2944 (越接近于1,回归效果越显著),F= 0.3651, p= 0.9093,(p>0.05, 可知回归模型不成立)。 从残差图可以看出,有两个数据的残差离零点较远,这说明这组原始数据不适合做线性 回归。 3、 Y3 的拟合: 设置显著性水平为0.05,拟合得到: B=[ 0b ,1b ,………., 8b ]= [5.3188 3.1624 5.6195 -0.7636 4.2599 0.3481

Matlab最小二乘法曲线拟合

最小二乘法在曲线拟合中比较普遍。拟合的模型主要有 1.直线型 2.多项式型 3.分数函数型 4.指数函数型 5.对数线性型 6.高斯函数型 ...... 一般对于LS问题,通常利用反斜杠运算“\”、fminsearch或优化工具箱提供的极小化函数求解。在Matlab 中,曲线拟合工具箱也提供了曲线拟合的图形界面操作。在命令提示符后键入:cftool,即可根据数据,选择适当的拟合模型。 “\”命令 1.假设要拟合的多项式是:y=a+b*x+c*x^ 2.首先建立设计矩阵X: X=[ones(size(x)) x x^2]; 执行: para=X\y para中包含了三个参数:para(1)=a;para(2)=b;para(3)=c; 这种方法对于系数是线性的模型也适应。 2.假设要拟合:y=a+b*exp(x)+cx*exp(x^2) 设计矩阵X为 X=[ones(size(x)) exp(x) x.*exp(x.^2)]; para=X\y 3.多重回归(乘积回归) 设要拟合:y=a+b*x+c*t,其中x和t是预测变量,y是响应变量。设计矩阵为 X=[ones(size(x)) x t] %注意x,t大小相等! para=X\y

polyfit函数 polyfit函数不需要输入设计矩阵,在参数估计中,polyfit会根据输入的数据生成设计矩阵。 1.假设要拟合的多项式是:y=a+b*x+c*x^2 p=polyfit(x,y,2) 然后可以使用polyval在t处预测: y_hat=polyval(p,t) polyfit函数可以给出置信区间。 [p S]=polyfit(x,y,2) %S中包含了标准差 [y_fit,delta] = polyval(p,t,S) %按照拟合模型在t处预测 在每个t处的95%CI为:*delta, y_fit+*delta) 2.指数模型也适应 假设要拟合:y = a+b*exp(x)+c*exp(x.2) p=polyfit(x,log(y),2) fminsearch函数 fminsearch是优化工具箱的极小化函数。LS问题的基本思想就是残差的平方和(一种范数,由此,LS产生了许多应用)最小,因此可以利用fminsearch函数进行曲线拟合。 假设要拟合:y = a+b*exp(x)+c*exp(x.2) 首先建立函数,可以通过m文件或函数句柄建立: x=[......]'; y=[......]'; f=@(p,x) p(1)+p(2)*exp(x)+p(3)*exp(x.2) %注意向量化:p(1)=a;p(2)=b;p(3)=c; %可以根据需要选择是否优化参数 %opt=options() p0=ones(3,1);%初值

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 2 1 222211121111 1,?? ?? ? ?? ??=n y y y y 21,则?????? ? ??=p ββββ 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)

浅谈matlab多变量拟合

首先申明本人就是土木专业的,因为有需要要用到matlab中的拟合用途,今天好好学习了一些关于matlab多变量拟合的东西,从网上下载了一些程序,也运行了一下,就举一些实例,附上源程序吧,主要就是两个自变量与三个自变量,一个因变量的拟合。让自己也更清楚,以后用起来也方便。 原理就就是给出一个自变量与因变量的矩阵,然后给出一个自己认为的带有未知数的拟合方程,然后付一组初始值,根据matlab返回的初始值与误差在附一组初始值,知道最后的相关系数较大,也就就是误差较小时,就能拟合的比较好,写出拟合后的方程了。 1、广义线性回归拟合与源码(两个自变量,一个因变量,非线性拟合) 【例】这里有这样一组数据,涉及三个变量:p,t 与z,要拟合出z = f(p,t) 的关系式(非线性的)。 z p 0、8 1 1、2 t 60 9、73875 20、75 36、5987 120 13、5725 29、6325 50、93875 180 18、97875 36、59875 80、13875 240 2075125 38、22125 90、925 300 22、055 44、58 104、7725 为了使得回归分析的结果更加直观,我调用regstats函数,编写了一个更为实用的函 数:reglm,代码如下(代码中有调用方法与例子)。 首先写一个M文件: function stats = reglm(y,X,model,varnames) % 多重线性回归分析或广义线性回归分析 % % reglm(y,X),产生线性回归分析的方差分析表与参数估计结果,并以表格形式显示在屏幕上、参 % 数X就是自变量观测值矩阵,它就是n行p列的矩阵、y就是因变量观测值向量,它就是n行1列的列向量、 % % stats = reglm(y,X),还返回一个包括了回归分析的所有诊断统计量的结构体变量stats、 % % stats = reglm(y,X,model),用可选的model参数来控制回归模型的类型、model 就是一个字符串, % 其可用的字符串如下 % 'linear' 带有常数项的线性模型(默认情况) % 'interaction' 带有常数项、线性项与交叉项的模型 % 'quadratic' 带有常数项、线性项、交叉项与平方项的模型 % 'purequadratic' 带有常数项、线性项与平方项的模型 % % stats = reglm(y,X,model,varnames),用可选的varnames参数指定变量标签、varnames % 可以就是字符矩阵或字符串元胞数组,它的每行的字符或每个元胞的字符串就是一个变量的标签,它的行 % 数或元胞数应与X的列数相同、默认情况下,用X1,X2,…作为变量标签、

matlab曲线拟合 - 非常好非常全面的介绍M拟合的参考资料

Mathworks Tech-Note 1508 曲线拟合向导 1.介绍 2. Mathworks 产品的曲线拟合特色 a.曲线拟合工具箱(Curve Fitting Toolbox) b.Matlab 内建函数与其他的带有曲线拟合能力的附加产品(工具箱) c.线性曲线拟合 d.非线性曲线拟合 3.加权曲线拟合方法 a.曲线拟合工具箱 b.统计工具箱 c.优化工具箱 4.利用曲线拟合工具箱提高曲线拟合结果 5.其他的相关资料 第1节:简介 MA TLAB即有内建的解决很多通常遇到的曲线拟合问题的能力,又具有附加这方面的产品。本技术手册描述了几种拟合给定数据集的曲线的方法,另外,本手册还解释了加权曲线拟合、针对复数集的曲线拟合以及其他一些相关问题的拟合技巧。在介绍各种曲线拟合方法中,采用了典型例子的结合介绍。 第2节:MathWorks产品的曲线拟合特色 MATLAB有可以用于曲线拟合的内建函数。MathWorks公式也提供了很多工具箱可以用于曲线拟合。这些方法可以用来做线性或者非线性曲线拟合。MATLAB也有一个开放的工具箱――曲线拟合工具箱(Curve Fitting Toolbox),她可以用于参数拟合,也可以用于非参数拟合。本节将介绍曲线拟合工具箱与其他工具箱、以及各种MA TLAB可以用于曲线拟合的内建函数的详细特征。 a.曲线拟合工具箱 曲线拟合工具箱是专门为数据集合进行曲线拟合而设计的。这个工具箱集成了用MA TLAB建立的图形用户界面(GUIs)和M文件函数。

?利用工具箱的库方程(例如线性,二次,高阶多项式等)或者是用户自定义方程(局限于用户的想象力)可以进行参数拟合。当你想找出回归系数以及他们背后的物理意义的时候就可以采用参数拟合。 ?通过采用平滑样条或者其他各种插值方法,你就可以进行非参数拟合。当回归系数不具有物理意义并且不在意他们的时候,就采用非参数拟合方法。 曲线拟合工具箱提供了如下功能: ?数据回归,譬如截面(?sectioning)与平滑; ?标准线性最小二乘拟合,非线性最小二乘拟合,加权最小二乘拟合,约束二乘(constrained least squares)拟合以及稳健(robust)拟合; ?根据诸如R2以及误差平方和(SSE)确定的拟合性能的统计特征。 请查阅曲线拟合工具箱提供的demos。 b. MATLAB内建函数与具有曲线拟合能力的其他工具箱 除了曲线拟合工具箱,MATALB与其他工具箱也提供了些可以用于解决线性和非线性曲线拟合的功能。本节列举并解释了其中几个。 c.利用MATLAB内建函数进行线性曲线拟合 函数描述 polyfit 用多项式进行数据拟合。polyfit(X,Y,N)对数据X,Y拟合N阶多项式系数,P(X(I))~=Y(I),在最小二乘意义上。 \ 反斜线或者矩阵阵左除。如果A是一个方阵,A\B 基本上与 inv(A)*B一致的,是采用的不同计算方式而已。 polyval 在给定点计算多项式的值 corrcoef 计算两个向量的相关系数。它可以与polyfit和polyval函数一起用来在实际数据和拟合输出之间计算R2相关系数 下面给出一个利用corref计算R2值的例子: load census [p,s]=polyfit(cdate,pop,2); Output=polyval(p,cdate); Corrolation=corroef(cate,Output); cdate 与它自身很好的相关,同样的Output也与它自身很好相关。反对角线上元素是

相关主题
相关文档
最新文档