このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
functionalDerivative
汎関数微分 (変分導関数)
説明
例
汎関数 の関数 に対する汎関数微分を求めます。ここで、被積分は です。
y(x)
をシンボリック関数として宣言し、f
を の被積分として定義します。f
と y
を functionalDerivative
のパラメーターとして使用します。
syms y(x)
f = y*sin(y);
G = functionalDerivative(f,y)
G(x) =
汎関数 の関数 および に対する汎関数微分を求めます。ここで、被積分は です。
u(x)
と v(x)
をシンボリック関数として宣言し、f
を の被積分として定義します。
syms u(x) v(x) f = u^2*diff(v,x) + v*diff(u,x,x);
シンボリック関数 [u v]
のベクトルを、functionalDerivative
の 2 番目の入力引数として指定します。
G = functionalDerivative(f,[u v])
G(x) =
functionalDerivative
は、被積分 f
の u
および v
それぞれに対する汎関数微分を含むシンボリック関数のベクトルを返します。
バネ定数 k
のバネに接続されている重り m
のオイラー・ラグランジュ方程式を求めます。
系の運動エネルギー T
、位置エネルギー V
、およびラグランジュ関数 L
を定義します。ラグランジュ関数は、運動エネルギーと位置エネルギーの差です。
syms m k x(t) T = 1/2*m*diff(x,t)^2; V = 1/2*k*x^2; L = T - V
L(t) =
ラグランジュ力学では、系の作用汎関数は、時間の経過に伴うラグランジュ関数の積分に等しくなります ()。オイラー・ラグランジュ方程式は、 が定常である系の運動を表します。
被積分 L
の汎関数微分を取って、それを 0
に設定することにより、オイラー・ラグランジュ方程式を求めます。
eqn = functionalDerivative(L,x) == 0
eqn(t) =
eqn
は、バネ質量系の振動を表す微分方程式です。
dsolve
を使用して、eqn
の解を求めます。質量 m
とバネ定数 k
は正であると仮定します。振動振幅の初期条件を に、重りの初期速度を に設定します。
assume(m,'positive') assume(k,'positive') Dx(t) = diff(x(t),t); xSol = dsolve(eqn,[x(0) == 10, Dx(0) == 0])
xSol =
計算を続けるため、仮定を消去します。
assume([k m],'clear')
最速降下問題は、摩擦のない重力下における粒子の最短の降下経路を見つける問題です。運動は垂直面に限定されます。重力 の下で、曲線 に沿って から へ動く物体の時間は、次式で与えられます。
経路 の微小な変動に対する の変化を最小にすることによって、最速経路を求めます。最小にするための条件は、 です。
この汎関数微分を計算して、最速降下問題を記述する微分方程式を求めます。simplify
を使用して方程式を単純化し、想定される形式にします。
syms g y(x) assume(g,'positive') f = sqrt((1 + diff(y)^2)/(2*g*y)); eqn = functionalDerivative(f,y) == 0; eqn = simplify(eqn)
eqn(x) =
この方程式は、最速降下問題の標準の微分方程式です。微分方程式の解を見つけるには、dsolve
を使用します。'Implicit'
オプションを true
に指定して、 の形式を取る陰的な解を返します。
sols = dsolve(eqn,'Implicit',true)
sols =
シンボリック ソルバー dsolve
は複素空間での一般解を返します。Symbolic Math Toolbox™ は、シンボリック関数 が実数であるとの仮定を受け入れません。
境界条件に応じて、この最速降下問題に対する 2 つの実空間の解があります。以下の 2 つの解のうち一方が実空間でのサイクロイド曲線を表します。
solCycloid1 = sols(3)
solCycloid1 =
solCycloid2 = sols(5)
solCycloid2 =
実空間での別の解は、水平直線です。ここで は定数です。
solStraight = simplify(sols(4))
solStraight =
サイクロイドの解について説明するため、境界条件 および での例を考えます。この場合、与えられた境界条件を満たすことができる方程式は solCycloid1
です。2 つの境界条件を solCycloid1
に代入します。
eq1 = subs(solCycloid1,[x y(x)],[0 5]); eq2 = subs(solCycloid1,[x y(x)],[4 1]);
2 つの方程式 eq1
、eq2
には 2 つの未知の係数 、 があります。vpasolve
を使用して、係数の数値解を求めます。それらの解を solCycloid1
に代入します。
coeffs = vpasolve([eq1 eq2]); eqCycloid = subs(solCycloid1,{'C1','C3'},{coeffs.C1,coeffs.C3})
eqCycloid =
陰的方程式 eqCycloid
は、 と に関する最速降下問題のサイクロイドの解を表します。
次に、fimplicit
を使用して eqCycloid
をプロットできます。fimplicit
はシンボリック変数 および を含む陰的なシンボリック方程式のみを受け入れるため、シンボリック関数 をシンボリック変数 に変換します。mapSymType
を使用して、 を に変換します。境界条件 および の範囲でサイクロイドの解をプロットします。
funToVar = @(obj) sym('y'); eqPlot = mapSymType(eqCycloid,'symfun',funToVar); fimplicit(eqPlot,[0 4 1 5])
3 次元空間の表面を表す関数 の表面積は次の汎関数で求めることができます。
ここで および は と に対する の偏導関数です。
被積分 f
の汎関数微分を、u
について求めます。
syms u(x,y)
f = sqrt(1 + diff(u,x)^2 + diff(u,y)^2);
G = functionalDerivative(f,u)
G(x, y) =
結果は、u(x,y)
で定義される 3 次元表面の極小表面を表す方程式 G
です。この方程式の解は、シャボン玉のような 3 次元空間の極小表面を示しています。
入力引数
汎関数の被積分。シンボリック変数、シンボリック関数、またはシンボリック式として指定します。引数 f
は汎関数の密度を表します。
微分関数。未割り当てのシンボリック関数として指定するか、未割り当てのシンボリック関数から成るベクトル、行列、または多次元配列として指定します。引数 y
は、1 つ以上の独立変数の関数の場合があります。y
がシンボリック関数のベクトルの場合、functionalDerivative
は y
の関数に対する汎関数微分のベクトルを返します。ここで、y
のすべての関数は同じ独立変数に従属する必要があります。
例: syms y(x); G = functionalDerivative(y*sin(y),y)
出力引数
シンボリック関数またはシンボリック関数からなるベクトルとして返された汎関数微分。入力 y
がベクトル、行列、または配列の場合、G
はベクトルです。
詳細
次の汎関数を考えます。
ここで、x 空間における a から b までの経路は任意であるとします。
経路 y(x) の微小な変動に対して、変化を として定義します。ここで、ϕ(x) は任意のテスト関数です。汎関数 S の変化は次のようになります。
式 は y に対する S の汎関数微分です。線形汎関数 DS[y] は、汎関数 S の第 1 変分またはガトー微分としても知られています。
汎関数微分を計算する 1 つの方法は、ε についての方程式 S[y + εϕ] にテイラー展開を適用することです。1 次項は ε のままで、部分積分を実行し、境界条件 ϕ(a) = ϕ(b) = ϕ'(a) = ϕ'(b) = ... = 0 を選択すると、汎関数微分は次のようになります。
バージョン履歴
R2015a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)