Main Content

fnder

説明

fprime = fnder(f,dorder) は、f 内の関数の dorder 階微分を返します。dorder の既定値は 1 です。dorder が負の場合、基本区間の左の端点で |dorder| 重に 0 になる特定の |dorder| 階不定積分が返されます。

出力は入力と同じ形式で、両方が pp 型、両方が B 型、または両方が st 型です。

f 内の関数が m 変量の場合、dorder を指定し、長さは m でなければなりません。

参考:

  • f が pp 型または最後の節点の多重度が十分に高い B 型の場合、丸め誤差を除き、ffnder(fnint(f)) は同じです。

  • f が pp 型で、fa が基本区間の左の端点にある f 内の関数の値である場合、f によって表記される関数にジャンプ不連続点がない限り、丸め誤差を除き、ffnint(fnder(f),fa) は同じです。

  • f が B 型の f を含んでおり、t1 が左端の節点の場合、丸め誤差を除き、fnint(fnder(f)) には B 型の f – f(t1) が含まれます。ただし、左端の節点の多重度が 1 つ減ります (最初の多重度が 1 より大きい場合)。また、右端の節点は、f 内の B 型の f の右端の節点がそうでない場合でも、完全多重度をもちます。これを検証するには、スプライン sp = spmak([0 0 1], 1) を作成します。このスプラインは、基本区間 [0..1] では、0 で 1、1 で 0 の直線です。ここで、その導関数 spdi = fnint(fnder(sp)) を積分します。spdi のスプラインの基本区間は同じですが、その区間では 0 で 0、1 で -1 の直線に一致します。

fnder(f)fnder(f,1) と同じです。

すべて折りたたむ

この例では、次数 2、3、4 の 3 つの B スプラインについて 1 次導関数および 2 次導関数を計算する方法を説明します。次に、スプラインとその微分をプロットし、結果を比較します。

% Create the knots sequences
t1 = [0 .8 2];
t2 = [3 4.4 5  6];
t3 = [7  7.9  9.2 10 11];
tt = [t1 t2 t3];

% Accessory variables and commands for plotting purposes
cl = ['g','r','b','k','k'];
v = 5.4; d1 = 2.5; d2 = 0; s1 = 1; s2 = .5;
ext = tt([1 end])+[-.5 .5];
plot(ext([1 2]),[v v],cl(5))
hold on
plot(ext([1 2]),[d1 d1],cl(5))
plot(ext([1 2]),[d2 d2],cl(5))
ts = [tt;tt;NaN(size(tt))];
ty = repmat(.2*[-1;0;NaN],size(tt));
plot(ts(:),ty(:)+v,cl(5))
plot(ts(:),ty(:)+d1,cl(5))
plot(ts(:),ty(:)+d2,cl(5))

% Spline 1 (linear)
b1 = spmak(t1,1);
p1 = [t1;0 1 0];
% Calculate the first and second derivative of spline 1
db1 = fnder(b1);
p11 = fnplt(db1,'j');
p12 = fnplt(fnder(db1));
lw = 2;
plot(p1(1,:),p1(2,:)+v,cl(2),'LineWidth',lw)
plot(p11(1,:),s1*p11(2,:)+d1,cl(2),'LineWidth',lw)
plot(p12(1,:),s2*p12(2,:)+d2,cl(2),'LineWidth',lw)

% Spline 2 (quadratic)
b1 = spmak(t2,1);
p1 = fnplt(b1);
% Calculate the first and second derivative of spline 2
db1 = fnder(b1);
p11 = [t2;fnval(db1,t2)];
p12 = fnplt(fnder(db1),'j');
plot(p1(1,:),p1(2,:)+v,cl(3),'LineWidth',lw)
plot(p11(1,:),s1*p11(2,:)+d1,cl(3),'LineWidth',lw)
plot(p12(1,:),s2*p12(2,:)+d2,cl(3),'LineWidth',lw)

% Spline 3 (cubic)
b1 = spmak(t3,1);
p1 = fnplt(b1);
% Calculate the first and second derivative of spline 3
db1 = fnder(b1);
p11 = fnplt(db1);
p12=[t3;fnval(fnder(db1),t3)];
plot(p1(1,:),p1(2,:)+v,cl(4),'LineWidth',lw)
plot(p11(1,:),s1*p11(2,:)+d1,cl(4),'LineWidth',lw)
plot(p12(1,:),s2*p12(2,:)+d2,cl(4),'LineWidth',lw)

% Formatting the plot
tey = v+1.5;
text(t1(2)-.5,tey,'linear','FontSize',12,'Color',cl(2))
text(t2(2)-.8,tey,'quadratic','FontSize',12,'Color',cl(3))
text(t3(3)-.5,tey,'cubic','FontSize',12,'Color',cl(4))
text(-2,v,'B','FontSize',12)
text(-2,d1,'DB','FontSize',12)
text(-2,d2,'D^2B')
axis([-1 12 -2 7.5])
title({'B-splines with Simple Knots and Their Derivatives'})
axis off
hold off

入力引数

すべて折りたたむ

pp 型、B 型、st 型のいずれかのスプライン。次のフィールドをもつ構造体として指定します。

スプラインの形式。ppB-、または tp00 として返されます。pp は、スプラインが区分的多項式型であることを示し、B- は、スプラインが B 型であることを示し、tp00 は、スプラインが st 型であることを示します。

スプラインの節点の位置。ベクトル、または多変量データの場合はベクトルの cell 配列として返されます。ベクトルには厳密に増加する要素が含まれます。これらの要素は、多項式区分が定義される各区間の開始と終了を表します。

各区分の多項式の係数。行列、または多変量データの場合は配列として返されます。

スプラインを記述する多項式区分の数。スカラー、または多変量データの場合は各変数の区分数のベクトルとして返されます。

スプラインの各多項式区分を記述する多項式関数の次数。スカラー、または多変量データの場合は各変数の次数を含むベクトルとして返されます。

ターゲット関数の次元。スカラーとして返されます。

関数 f の微分の階数。多変量関数のスカラーまたはベクトルとして指定します。

データ型: single | double

出力引数

すべて折りたたむ

pp 型、B 型、st 型のいずれかの f スプラインの導関数。次のフィールドがある構造体として返されます。

スプラインの形式。ppB-tp00 として返されます。導関数の形式は関数 f の形式と同じです。pp は、スプラインが区分的多項式型であることを示し、B- は、スプラインが B 型であることを示し、tp00 は、スプラインが st 型であることを示します。

スプラインの節点の位置。ベクトル、または多変量データの場合はベクトルの cell 配列として返されます。ベクトルには厳密に増加する要素が含まれます。これらの要素は、多項式区分が定義される各区間の開始と終了を表します。

各区分の多項式の係数。行列、または多変量データの場合は配列として返されます。

スプラインを記述する多項式区分の数。スカラー、または多変量データの場合は各変数の区分数のベクトルとして返されます。

スプラインの各多項式区分を記述する多項式関数の次数。スカラー、または多変量データの場合は各変数の次数を含むベクトルとして返されます。

ターゲット関数の次元。スカラーとして返されます。

制限

  • 関数 fnder は有理スプラインでは機能しません。有理スプラインの場合は、代わりに fntlr を使用します。

  • 関数 fnder は st 型の場合のみ限定された方法でのみ機能します。型が tp00 の場合、dorder[1,0] または [0,1] にすることができます。

アルゴリズム

どちらの多項式型の微分の場合も、関数 fnder は導関数を区分的多項式の観点から求めます。関数は、それぞれの多項式区分を個別に微分します。多項式区分間のジャンプ不連続点は微分時に無視されます。

B 型の場合、関数は微分の式 [PGS; (X.10)] を使用します。

st 型の場合、微分は、特定の型の基底関数に関連する導関数の式がわかるかどうかに依存します。

バージョン履歴

R2006a より前に導入