y=[320 320 160 710 320 320 320 160 710 320];
x1=[23 17 13 17 17 16 1 17 17 17];
x2=[23 17 17 16 17 17 1 17 17 17];
x3=[23 17 13 17 17 17 2 17 17 17];
x4=[23 17 17 17 17 17 1 17 18 27];
x5=[23 17 17 13 17 14 1 17 17 17];
x6=[23 17 17 17 15 17 1 17 17 17];
x7=[23 17 17 17 17 14 1 17 17 17];
x8=[23 17 17 17 17 17 1 17 17 17];
x9=[23 17 17 14 17 17 1 17 17 17];
x10=[23 17 17 17 15 17 1 17 17 17];
Y=y';
X=[ones(length(y),1),x1',x2',x3',x4',x5',x6',x7',x8',x9',x10'];
[b,bint,r,rint,stats]=regress(Y,X)
可以用函数 regress( )来解决。
[b,bint,r,rint,stats] = regress(y,X)
b——拟合线性函数的系数
bint——系数b的置信区间
r——残值向量
rint——残值的置信区间
stats——检验统计量,第一值是回归方程的置信度,第二值是F统计量,第三值是与F统计量相应的p值,当p值很小,说明回归模型成立
X——自变量向量,X=[ones(3,1) x1 x2 x3]
y——应变量向量
把方程改为:
Y=A1+A2X1+A3X2+A4X1^2+A5X2^2+A6X1X2
X1和X2为已知值,令x1=X1;x2=X2;x3=X1^2;x4=X2^2;x5=X1X2;
这里的x1-x5都是列向量;
X=[ones(length(x1),1),x2,x3,x4,x5];
Y=y;y也是列向量;
[b,brint]=regress(Y,X);
首先
x1'
是转置的意思。
比如x1为五行三列,x1'就是三行五列
size(x1')就是求出x1'的行列数。如果x1是五行三列,刚size(x1')为[3,5]即三行五列
ones(size(x1'))就是产生一个全一的矩阵,矩阵的行列数与size(x1')相同
实际上,它就是产生一个矩阵,将x1'里面的所有元素换成1
题主的(4自变量1因变量)多元函数的拟合matlab程序。可以用nlinfit非线性回归函数来做(也可以用lsqcurvefit函数)。实现代码:
x1=[055 065 065 065 065 055 055 055 065]';
x2=[16 16 14 16 14 14 16 14 14]';
x3=[20 20 20 10 10 20 20 20 20]';
x4=[10 10 10 10 10 10 12 12 12]';
Y=[1848 3145 3337 3022 3188 197 163 1621 2534]';
X=[x1 x2 x3 x4];
n=length(x1);
a0=rand(1,5);
func=@(a,X)(a(1)+a(2)X(:,1)+a(3)X(:,2)+a(4)X(:,3)+a(5)X(:,4));
[a,r,J] = nlinfit(X,Y,func,a0);a
Y1=func(a,X);
[Y Y1]
运行上述代码,可以得到
a1= -152778571412534;a2= 114823809522886;a3= -0359047619087202 ;a4= 000441190476147387;a5=-023363095238449
多元函数表达式,y=a1+a2x1+a3x2+a4x3+a5x4
nlinfit与lsqcurvefit两者区别并不太大,前者用回归的方法来求解,而后者用最小二乘法来求解,两者都可以用于非线性函数和线性函数。
以上就是关于matlab多元线性回归全部的内容,包括:matlab多元线性回归、用matlab对一组数据的最小二乘法的多元线性回归分析~、matlab 多元高次线性回归等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)