Matlab学习手记——加权最小二乘多项式曲面拟合

版权声明:转载请标明出处 https://blog.csdn.net/u012366767/article/details/82743720

假设:

    所有的点来自几个不同的分组,每个分组内的点的强度相同(即有相同的权系数),不同分组内的点强度不同(即有不同的权系数),曲面拟合的目标不是让所有的点尽可能接近曲面,而是让所有的点在乘以权系数后尽可能接近曲面。

目标方程:

     这里认为最后一个分组的权系数为1,其余的权系数作为待求系数,因此整个目标方程变成了以上形式。

程序:

clear;clc;
x = 0.1 : 0.1 : 5;
y = 0.1 : 0.1 : 5;
[X, Y] = meshgrid(x, y);
Z = X.^2 + Y.^2 + X.*Y + X + Y + 1;
rng('default');
xfit = randi(50, 100, 1) / 10;
yfit = randi(50, 100, 1) / 10;
zfit = zeros(100, 1);
for i = 1 : 100
    zfit(i) = Z(xfit(i) * 10, yfit(i) * 10);
end
% LS
xfit2 = xfit.^2;
yfit2 = yfit.^2;
xyfit = xfit.*yfit;
A = [xfit2, yfit2, xyfit, xfit, yfit, ones(100, 1)];
% WLS
zfit1 = zeros(100, 1);
zfit2 = zeros(100, 1);
zfit3 = zeros(100, 1);
zfit1(1:30) = 2 * zfit(1:30);
zfit2(31:60) = 0.5 * zfit(31:60);
zfit3(61:end) = zfit(61:end);
A2 = [A, -zfit1, -zfit2];
aa2 = A2\zfit3;
Zfit2 = aa2(1) * X.^2 + aa2(2) * Y.^2 + aa2(3) * X.*Y + aa2(4) * X + aa2(5) * Y + aa2(6);
surf(x, y, Zfit2);
shading interp
hold on
scatter3(xfit, yfit, zfit, 50, 'MarkerFaceColor', [0 0 0]);
hold off

    理想数据,分成了三类,第一类权系数为1/2=0.5,第二类权系数为1/05=2。

 结果:

    和预期结果完全一致。

猜你喜欢

转载自blog.csdn.net/u012366767/article/details/82743720