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

今天遇到要用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('残差');

回归分析拟合曲面如下图所示:


利用matlab中的regress回归分析 拟合曲面(得到方程系数)以及残差图_第1张图片
方程系数在b中:
利用matlab中的regress回归分析 拟合曲面(得到方程系数)以及残差图_第2张图片
残差如下图所示:
利用matlab中的regress回归分析 拟合曲面(得到方程系数)以及残差图_第3张图片


你可能感兴趣的:(matlab)