Để vừa với đường cong lên một tập hợp các điểm, chúng tôi có thể sử dụng hồi quy ordinary least-squares. Có một solution page bởi MathWorks mô tả quy trình.
Như một ví dụ, chúng ta hãy bắt đầu với một số dữ liệu ngẫu nhiên:
% some 3d points
data = mvnrnd([0 0 0], [1 -0.5 0.8; -0.5 1.1 0; 0.8 0 1], 50);
Như @BasSwinckels cho thấy, bằng cách xây dựng những mong muốn design matrix, bạn có thể sử dụng mldivide
hay pinv
-solve the overdetermined system thể hiện dưới dạng Ax=b
:
% best-fit plane
C = [data(:,1) data(:,2) ones(size(data,1),1)] \ data(:,3); % coefficients
% evaluate it on a regular grid covering the domain of the data
[xx,yy] = meshgrid(-3:.5:3, -3:.5:3);
zz = C(1)*xx + C(2)*yy + C(3);
% or expressed using matrix/vector product
%zz = reshape([xx(:) yy(:) ones(numel(xx),1)] * C, size(xx));
Tiếp theo, chúng tôi hình dung kết quả:
% plot points and surface
figure('Renderer','opengl')
line(data(:,1), data(:,2), data(:,3), 'LineStyle','none', ...
'Marker','.', 'MarkerSize',25, 'Color','r')
surface(xx, yy, zz, ...
'FaceColor','interp', 'EdgeColor','b', 'FaceAlpha',0.2)
grid on; axis tight equal;
view(9,9);
xlabel x; ylabel y; zlabel z;
colormap(cool(64))

Như đã đề cập, chúng ta có thể có được bậc cao phù hợp đa thức bằng cách thêm về hơn với ma trận biến độc lập (các A
trong Ax=b
).
Giả sử chúng tôi muốn phù hợp với mô hình bậc hai với các thuật ngữ không đổi, tuyến tính, tương tác và bình phương (1, x, y, xy, x^2, y^2). Chúng ta có thể làm điều này bằng tay:
% best-fit quadratic curve
C = [ones(50,1) data(:,1:2) prod(data(:,1:2),2) data(:,1:2).^2] \ data(:,3);
zz = [ones(numel(xx),1) xx(:) yy(:) xx(:).*yy(:) xx(:).^2 yy(:).^2] * C;
zz = reshape(zz, size(xx));
Ngoài ra còn có một hàm helper x2fx
trong kê Toolbox giúp trong việc xây dựng ma trận thiết kế cho một vài đơn đặt hàng mô hình:
C = x2fx(data(:,1:2), 'quadratic') \ data(:,3);
zz = x2fx([xx(:) yy(:)], 'quadratic') * C;
zz = reshape(zz, size(xx));
Cuối cùng có một tuyệt vời chức năng polyfitn
trên Trao đổi tệp của John D'Errico cho phép bạn chỉ định tất cả các loại đơn đặt hàng đa thức và các điều khoản có liên quan:
model = polyfitn(data(:,1:2), data(:,3), 2);
zz = polyvaln(model, [xx(:) yy(:)]);
zz = reshape(zz, size(xx));

Làm thế nào tôi có thể thực hiện cùng một loại hoạt động trong python ..!? Trợ giúp bit sẽ được đánh giá cao ... @Amro – diffracteD
@diffracteD: Tôi đã dịch mã sang Python: https://gist.github.com/amroamroamro/1db8d69b4b65e8bc66a6 – Amro
Cảm ơn sự giúp đỡ của bạn ... tôi chắc chắn sẽ thử nó .. ! – diffracteD