擬合三維曲線貌似可以用相信回歸做,但是matlab有乙個自帶的polyfit函式,可以直接算出二維資料的擬合曲線,用的是最小二乘法的思想。
思路其實很簡單,將兩條擬合的二維曲線組合在一起就是三維曲線了。
先上**吧
clc;clear all;
%fb = load('./leafcloud/bend.txt');
fb = load('./leafcloud/vertical.txt');
fb = fb(:,1:3);
x = fb(:,1);
y = fb(:,2);
z = fb(:,3);
figure(1)
plot3(x,y,z,'yo'); hold on
xlabel('x');
ylabel('y');
zlabel('z');
% 分別擬合兩個二維的曲線,然後統一到一起
p_yx = polyfit(y,x,4);
x_out = polyval(p_yx, y);
p_yz = polyfit(y,z,4);
z_out = polyval(p_yz, y);
plot3(x_out ,y, z_out, 'r*'); hold on;
% 得出曲線函式 x_out = f(z_out) z_out = f(y)
p_zx_out = polyfit(z_out,x_out,4);
x_out_f = polyval(p_zx_out,z_out);
plot3(x_out_f,y,z_out,'b*'); hold on;
fb是從外部讀進來的資料,我讀的是點雲資料,x y z 各個座標的資料,plot3繪製三維資料的影象。
polyfit(y,x,4)擬合曲線函式 y是自變數,x是因變數,4是階數, 即曲線是 x = a*y^4 + b*y^3 + c*y^2 +d*y + e; 這樣的,階數視情況而定, polyval 已經給出因變數x的方程,不用自己寫了。 下面的polyfit(y,z,4)類似。
最後由自變數y 得出因變數x_out, z_out, 便可以繪製出三維曲線的影象了,結合起來就可以得出曲線函式 ,需要注意的是要乙個自變數得出兩個因變數,即我的是x = f(y), z = f(y),
看看我的擬合效果:
MATLAB 利用SVD分解擬合三維平面
方法簡述 利用svd分解求擬合平面 擬合方程為ax by cz d,約束條件為a2 b2 c2 1,目標是使得盡可能多的點在平面上。構建矩陣為ax 0,將a矩陣進行奇異值分解之後,最小奇異值對應的特徵值向量即為擬合平面的係數向量。詳細的原理可以檢視 svd分解平面擬合原理 在這裡我舉的例子是利用餘震...
擬合三維點平面matlab程式
隨機生成一組 x,y,z 這些點的座標離乙個空間平面比較近 x0 1,l1 2 y0 1,l2 2 x x0 rand 20,1 l1 y y0 rand 20,1 l2 z 1 2 x 3 y scatter3 x,y,z,filled hold on planedata x,y,z 協方差矩陣的...
matlab擬合空間曲線。散點擬合三維曲線
問題 已知三組資料,就是直角座標系中的x,y,z的三個陣列,要求在matlab中擬合出這條空間曲線。帖子源資料 a 22.77,17.13,14.37,12.98,12.34,12.12,12.11,12.18,12.27,12.32,12.32,12.27,12.18,12.11,12.12,12...