利用matlab將三維資料擬合成三維曲線

2021-09-24 05:35:13 字數 1243 閱讀 2091

擬合三維曲線貌似可以用相信回歸做,但是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...