1. 程式人生 > >Matlab樣條工具箱(Spline ToolBox)與曲線擬合

Matlab樣條工具箱(Spline ToolBox)與曲線擬合

MATLAB 樣條工具箱可以通過節點獲得樣本函式值,但不能根據x求y或z,也不能求得樣本曲線方程。例如:
ctrlpoints=[
    0    -1.2   -1.6   -1.4   -1    -0.5  -0.35  -0.6  -1.6
 -0.2    -0.5   -1     -1.5   -2.2  -2.7  -3.2   -3.7  -4.2];
knots=[0 0 0 0 1 2 3 4 5 6 6 6 6];
x0=ctrlpoints(1,:);
y0=ctrlpoints(2,:);
plot(x0,y0,'ro');%畫所有控制點

hold on;
sp = spmak(knots,ctrlpoints);%生成B樣條函式
fnplt(sp,[knots(1),knots(13)]);%根據所有節點,畫樣條曲線圖
%fnplt(sp,'b*');
%hold on;

dt=knots(1):1:knots(13);
p = fnval(sp,dt);%計算在給定點處的樣條函式值
plot(p(1,:),p(2,:),'*g');

dp1 = fnder(sp);%求樣條函式的微分(即求導數)
dp   = fnval(dp1,dt);
len = size(dt,2);
for i = 1:len
dir = dp(:,i);
scale = 1/sqrt(dir(1)^2+dir(2)^2);
dir = dir*scale;
plot([p(1,i),p(1,i)+dir(2)],[p(2,i),p(2,i)-dir(1)],'r');
end

axis equal

------------------------------------------------------------------

另外:
Matlab 樣條工具箱(Spline ToolBox)

Matlab樣條工具箱中的函式提供了樣條的建立,操作,繪製等功能;
一. 樣條函式的建立
第一步是建立一個樣條函式,曲線或者曲面。這裡的樣條函式,根據字首,分為4類:
cs* 三次樣條
pp* 分段多項式樣條,係數為t^n的係數
sp* B樣條, 係數為基函式B_n^i(t)的係數
rp* 有理B樣條

二. 樣條操作
樣條操作包括:函式操作:求值,算術運算,求導求積分等等
             節點操作:主要是節點重數的調節,設定,修改等等

三. 簡單示例
% step1: load ctrlpoints and knots
load data_example

% step 2: create the spline
sp = spmak(knots,ctrlpoints');
fnplt(sp,[knots(5),knots(42)]);

%   step 3: get points on the curve
dt = knots(5):3:knots(42);
p = fnval(sp,dt);
plot(p(1,:),p(2,:),'.g')

% step 4: get dir draw normals
dp1 = fnder(sp);
dp   = fnval(dp1,dt);
len = size(dt,2);
for i = 1:len
dir = dp(:,i);
scale = 1/sqrt(dir(1)^2+dir(2)^2);
dir = dir*scale;
plot([p(1,i),p(1,i)+dir(2)],[p(2,i),p(2,i)-dir(1)],'r');
end


附:樣條工具箱函式
1. 三次樣條函式
csapi 插值生成三次樣條函式
csape 生成給定約束條件下的三次樣條函式
csaps 平滑生成三次樣條函式
cscvn 生成一條內插引數的三次樣條曲線
getcurve 動態生成三次樣條曲線 

2. 分段多項式樣條函式   
ppmak 生成分段多項式樣條函式
ppual 計算在給定點處的分段多項式樣條函式值 

3. B樣條函式
spmak 生成B樣條函式
spcrv 生成均勻劃分的B樣條函式
spapi 插值生成B樣條函式
spap2 用最小二乘法擬合生成B樣條函式
spaps 對生成的B樣條曲線進行光滑處理
spcol 生成B樣條函式的配置矩陣 

4. 有理樣條函式
rpmak 生成有理樣條函式
rsmak 生成有理樣條函式 

5. 樣條操作函式
fnval 計算在給定點處的樣條函式值
fmbrk 返回樣條函式的某一部分(如斷點或係數等)
fncmb 對樣條函式進行算術運算
fn2fm 把一種形式的樣條函式轉化成另一種形式的樣條函式
fnder 求樣條函式的微分(即求導數)
fndir 求樣條函式的方向導數
fnint 求樣條函式的積分
fnjmp 在間斷點處求函式值
fnplt 畫樣條曲線圖
fnrfn 在樣條曲線中插入斷點。
fntlr 生成tarylor係數或taylor多項式 

6. 樣條曲線端點和節點處理函式 
augknt   在已知節點陣列中新增一個或多個節點
aveknt   求出節點陣列元素的平均值
brk2knt 增加節點陣列中節點的重次
knt2brk 從節點陣列中求得節點及其重次
knt2mlt 從節點陣列中求得節點及其重次
sorted   求出節點陣列的元素在另一節點陣列中屬於第幾個分量
aptknt   求出用於生成樣條曲線的節點陣列
newknt   對分段多項式樣條函式進行重分佈
optknt   求出用於內插的最優節點陣列
chbpnt   求出用於生成樣條曲線的合適節點陣列

相關推薦

Matlab工具箱(Spline ToolBox)曲線

MATLAB 樣條工具箱可以通過節點獲得樣本函式值,但不能根據x求y或z,也不能求得樣本曲線方程。例如:ctrlpoints=[    0    -1.2   -1.6   -1.4   -1    -0.5  -0.35  -0.6  -1.6 -0.2    -0.5  

matlab工具箱的使用

Matlab 樣條工具箱(Spline ToolBox) 本文介紹了用matlab進行樣條曲線的建立操作與繪製;示例給出了樣條曲線的建立,求值,求導,繪製 Matlab樣條工具箱中的函式提供了樣條的建立,操作,繪製等功能;一. 樣條函式的建立第一步是建立一個樣條函式,曲線或者

matlab工具箱的基本概念

Matlab 樣條工具箱(Spline ToolBox) 一點基礎知識: 在matlab關於spline toolbox->Getting Started->Technical Convetions中做了如下規定: n this toolbox, vecto

MATLAB利用散點進行函數曲線

科學 空間 調研 emp 展現 mic 選擇 平滑 -a 原文:MATLAB利用散點進行函數曲線擬合 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/laobai1015/articl

算法系列之二十一:實驗資料曲線

12.1 曲線擬合12.1.1 曲線擬合的定義        曲線擬合(Curve Fitting)的數學定義是指用連續曲線近似地刻畫或比擬平面上一組離散點所表示的座標之間的函式關係,是一種用解析表示式逼近離散資料的方法。曲線擬合通俗的說法就是“拉曲線”,也就是將現有資料透過

用Python學《微積分B》(Taylor公式曲線

    Taylor公式是微分學部分集大成者,可以說,只有理解了Taylor公式,才能真正感受到微分學方法的神奇與強大。本文主要根據扈志明老師的《微積分B》課程的內容,總結我對Taylor公式的理解。此外,也應用Python求解該部分的課後習題。 注:sympy中對高階無窮

MATLABMATLAB 實現模擬訊號取樣後的重建(三)應用三次函式spline實現內插

前三篇博文講了三種方法進行內插重建訊號: 這篇文章使用三次樣條函式spline來實現內插重建,並分析重建誤差。 採用的案例依然是上篇博文中的案例: 模擬訊號: 對該訊號使用兩種不

問題六十一:三次b(b-spline)曲線的控制點和曲線形狀的對應——以迴旋體的“基本曲線”為例

在這一章節,我們以其中一段曲線段為例,改變其對應的控制點,看看曲線段形狀的改變,同時也看看對應的迴旋體圖形的改變。 控制點座標如下圖: “問題六十”中的“基本曲線”的控制點對應如上ABCDEF六個點(其中A點在1位置)。對應輸出的迴旋體圖形如下(再次貼出來): 說

matlab 數值演算法工具箱 NAG toolbox

用了那麼長的matlab,似乎很少聽人提到過NAG toolbox ,今天用了,別有一番感受。所謂NAG,就是 Numerical Algorithms Group 。http://www.nag.co.uk/   The Numerical Algorithms Group

利用matlab進行三維曲線(cftool工具箱實現)

一.matlab是一個功能強大的整合軟體,其繪圖功能十分強大,在繪製三維空間網格點圖的時候,只需要使用cftool工具箱就能實現三維空間繪圖。 二.cftool工具箱就是應用程式中的Curve Fitting應用。 三.用頁面展現實現過程 四.預測類題目解法   

利用MATLAB進行曲線

http face alt gen show cat sca 輸入 image 軟件環境:MATLAB2013a 一、多項式擬合 多項式擬合是利用多項式最佳地擬合觀測數據,使得在觀測數據點處的誤差平方和最小。 在MATLAB中,利用函數ployfit和ployv

最小二乘法多項式曲線原理實現 zz

博客 del p s 並且 多項式 聯網 python mar 程序 概念 最小二乘法多項式曲線擬合,根據給定的m個點,並不要求這條曲線精確地經過這些點,而是曲線y=f(x)的近似曲線y= φ(x)。 原理 [原理部分由個人根據互聯網上的資料進行總結,希望對大

OpenCV曲線

圖像分析 曲線擬合 OpenCV Python 圖像處理 OpenCV曲線擬合與圓擬合 使用OpenCV做圖像處理與分析的時候,經常會遇到需要進行曲線擬合與圓擬合的場景,很多OpenCV開發者對此卻是一籌莫展,其實OpenCV中是有現成的函數來實現圓擬合與直線擬合的,而且還會告訴你擬合的圓

Matlab曲線之polyfit及互動式曲線工具

1、polyfit      p=ployfit(x,y,n);      x——自變數;      y——因變數;      n——多項式階數; 例如:

Matlab 曲線之 polyfit 、polyval、poly2str 函式

原文出處(僅供參考) ttps://www.cnblogs.com/farewell-farewell/p/7227516.html https://www.cnblogs.com/clairvoyant/p/4710015.html 1  Matlab 曲線擬合之polyfi

matlab曲線 函式 用法以及例子

資料準備: 關於MATLAB曲線擬合,我寫了一系列的經驗,為了相互統一,採用下面的資料: x=[0    0.3000    0.6000    0.9000    1.2000    1.5000    1.8000    2.1000    2.4000    2.7000    3.0000]

最小二乘法多項式曲線原理實現(錯誤地方已經修改底層補充自己寫的java實現)

也可使用Apache開源庫commons math,提供的功能更強大, http://commons.apache.org/proper/commons-math/userguide/fitting.html package com.fjsh.algorithm.leastSquareMethod.d

matlab2012 toolbox 曲線

操作步驟: 如下圖 matlab->start->Curve Fitting ->Curve Fitting Tool(cftool)開啟曲線擬合的介面,如下圖 選擇X、Y、Z軸的資料,此處不在贅述。 Custom Equation

最小二乘法曲線原理實現

最小二乘學習法是對模型的輸出和訓練集輸出的平方誤差為最小時的引數進行學習,式中之所以加上係數1/2,是為了約去對進行微分時得到的2。 “LS”是Least Squares的首字母。平方誤差是殘差的範數,因此最小二乘學習法有時也稱為損失最小化學習法。

【演算法+OpenCV】基於三次Bezier原理的曲線演算法C++OpenCV實現

近期,因為要實現經過多個控制點的曲線擬合,研究起了曲線擬合演算法。綜合搜尋到的資料,發現Bezier曲線擬合演算法是一種相對較容易實現、且擬合的效果較好的演算法。關於Bezier曲線原理,請參照(Bezier曲線原理),這裡就不再做具體介紹了,我們使用的是Besier三次曲