您的位置:首页 > 编程语言 > MATLAB

利用matlab中的regress回归分析 拟合曲面(得到方程系数)以及残差图

2018-03-01 21:56 816 查看
今天遇到要用matlab拟合曲面。至少要三个点才能确定个面。两个点的话,有多个面。
利用matlab中的regress回归分析拟合曲面(得到方程系数)以及残差图。
matlab代码如下:% 示例数据,随便编的
a1 = 76 ;b1 = 72 ;
a2 = 59 ;b2 = 113;
a3 = 48 ;b3 = 63 ;
a4 = 66 ;b4 = 158;
a5 = 92 ;b5 = 166;
z0 = 20;

% 注意要求列向量
x = [a1, a2, a3, a4]'; % [76;59;48;66]
y = [b1, b2, b3, b4]'; % [72;113;63;158]
z = [z0-0.1, z0, z0-0.2, z0+0.1]'; % [19.90;20;19.80;20.10]

k = length(x); % 返回样本总数
X=[ones(k,1) x y]; % 这里有n个数据就填ones(n,1)
% X: [1,76,72;1,59,113;1,48,63;1,66,158]

% 调用回归函数求模型参数
[b, bint, r, rint, stats] = regress(z,X);
% 得到参数b的95%置信区间bint,
% 残差r以及残差95%置信区间rint,
% stats有三个分量的向量,分别是决定系数R平方、F值以及回归的p值。

% 画出已知点的图
figure(1)
scatter3(x, y, z, '*');
hold on

% 回归结果b:[19.5255;0.0024;0.0027],即z = 19.5255 + 0.0024*x + 0.0027*y
p00=b(1);
p10=b(2);
p01=b(3);

% 做出回归曲面,假设我们做一个150x100范围的曲面
m = 150; n =100;
data = ones(m,n);
for i = 1:m
for j = 1:n
data(i,j)= p00 + p10*i + p01*j;
end
end
Z = data;
[X,Y]=meshgrid(1:1:n,1:1:m);
% 可视化
surf(X,Y,Z);
title('拟合出的平面')
xlabel('x'); ylabel('y'); zlabel('z');
legend('为已知点')

figure(2);
rcoplot(r, rint); % 作残差图
title('残差图绘制');
xlabel('数据'); ylabel('残差');回归分析拟合曲面如下图所示:



方程系数在b中:


残差如下图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab