funm
一般的な行列関数
説明
例
行列の 3 乗根
A
が 3 行 3 列の単位行列の場合に、B3 = A
の行列 B
を求めます。
B3 = A
を求解するには、関数 funm
を使用して行列 A
の 3 乗根を計算します。シンボリック関数 f(x) = x^(1/3)
を作成し、funm
の 2 番目の引数として使用します。単位行列の 3 乗根は単位行列そのものです。
A = sym(eye(3)) syms f(x) f(x) = x^(1/3); B = funm(A,f)
A = [ 1, 0, 0] [ 0, 1, 0] [ 0, 0, 1] B = [ 1, 0, 0] [ 0, 1, 0] [ 0, 0, 1]
行列 A
の 0
要素の 1 つを 1
に置き換え、再び行列の 3 乗根を計算します。
A(1,2) = 1 B = funm(A,f)
A = [ 1, 1, 0] [ 0, 1, 0] [ 0, 0, 1] B = [ 1, 1/3, 0] [ 0, 1, 0] [ 0, 0, 1]
上三角行列の 3 乗根を計算します。
A(1:2,2:3) = 1 B = funm(A,f)
A = [ 1, 1, 1] [ 0, 1, 1] [ 0, 0, 1] B = [ 1, 1/3, 2/9] [ 0, 1, 1/3] [ 0, 0, 1]
B3 = A
であることを検証します。
B^3
ans = [ 1, 1, 1] [ 0, 1, 1] [ 0, 0, 1]
行列のランベルトの W 関数
行列のランベルトの W 関数を求めます。
まず、精度が 5 桁の可変精度の演算を使用して 3 行 3 列の行列 A
を作成します。この例では、正確なシンボリック数の代わりに可変精度の演算を使用することにより、計算を高速化しメモリの使用量を減らしています。5 桁のみを使用することで、結果を画面に収まるサイズにできます。
savedefault = digits(5); A = vpa(magic(3))
A = [ 8.0, 1.0, 6.0] [ 3.0, 5.0, 7.0] [ 4.0, 9.0, 2.0]
シンボリック関数 f(x) = lambertw(x)
を作成します。
syms f(x) f(x) = lambertw(x);
ランベルトの W 関数 (W0
分枝) を行列的に求めるには、f(x)
を 2 番目の引数として使用して funm
を呼び出します。
W0 = funm(A,f)
W0 = [ 1.5335 + 0.053465i, 0.11432 + 0.47579i, 0.36208 - 0.52925i] [ 0.21343 + 0.073771i, 1.3849 + 0.65649i, 0.41164 - 0.73026i] [ 0.26298 - 0.12724i, 0.51074 - 1.1323i, 1.2362 + 1.2595i]
この結果が指定された精度における行列方程式 A = W0·eW0
の解であることを検証します。
W0*expm(W0)
ans = [ 8.0, 1.0 - 5.6843e-13i, 6.0 + 1.1369e-13i] [ 3.0 - 2.2737e-13i, 5.0 - 2.8422e-14i, 7.0 - 4.1211e-13i] [ 4.0 - 2.2737e-13i, 9.0 - 9.9476e-14i, 2.0 + 1.4779e-12i]
次に、ランベルトの W 関数の分枝 W-1
を表すシンボリック関数 f(x)
を作成します。
f(x) = lambertw(-1,x);
行列 A
の W-1
分枝を求めます。
Wm1 = funm(A,f)
Wm1 = [ 0.40925 - 4.7154i, 0.54204 + 0.5947i, 0.13764 - 0.80906i] [ 0.38028 + 0.033194i, 0.65189 - 3.8732i, 0.056763 - 1.0898i] [ 0.2994 - 0.24756i, - 0.105 - 1.6513i, 0.89453 - 3.0309i]
この結果が指定された精度における行列方程式 A = Wm1·eWm1
の解であることを検証します。
Wm1*expm(Wm1)
ans = [ 8.0 - 8.3844e-13i, 1.0 - 3.979e-13i, 6.0 - 9.0949e-13i] [ 3.0 - 9.6634e-13i, 5.0 + 1.684e-12i, 7.0 + 4.5475e-13i] [ 4.0 - 1.3642e-12i, 9.0 + 1.6698e-12i, 2.0 + 1.7053e-13i]
行列指数、行列対数および行列の平方根
行列指数、行列対数および行列の平方根は、funm
を適切な第 2 引数と共に使用することで求められます。しかし、関数 expm
、logm
および sqrtm
を使用することでこのタスクをより効率的に行うことができます。
次の正方行列を作成し、その指数、対数および平方根を求めます。
syms x A = [1 -1; 0 x] expA = expm(A) logA = logm(A) sqrtA = sqrtm(A)
A = [ 1, -1] [ 0, x] expA = [ exp(1), (exp(1) - exp(x))/(x - 1)] [ 0, exp(x)] logA = [ 0, -log(x)/(x - 1)] [ 0, log(x)] sqrtA = [ 1, 1/(x - 1) - x^(1/2)/(x - 1)] [ 0, x^(1/2)]
funm
を使用して A
の行列指数、行列対数、行列の平方根を求めます。シンボリック式 exp(x)
、log(x)
および sqrt(x)
を funm
の第 2 引数として使用します。結果は同一になります。
expA = funm(A,exp(x)) logA = funm(A,log(x)) sqrtA = funm(A,sqrt(x))
expA = [ exp(1), exp(1)/(x - 1) - exp(x)/(x - 1)] [ 0, exp(x)] logA = [ 0, -log(x)/(x - 1)] [ 0, log(x)] sqrtA = [ 1, 1/(x - 1) - x^(1/2)/(x - 1)] [ 0, x^(1/2)]
入力引数
出力引数
詳細
ヒント
MATLAB® 関数
funm
との互換性をもたせるため、funm
は次の引数を受け入れます。第 2 入力引数として、
@exp
や@sin
などの関数ハンドル。funm(A,f,options)
などのoptions
入力引数。funm(A,f,options,p1,p2,...)
などの関数f
の追加の入力引数。[F,exitflag] = funm(A,f)
などのexitflag
出力引数。ここで、funm
の関数呼び出しでエラーが発生 (たとえば、ゼロ除算が発生) した場合のみ、exitflag
は1
になります。それ以外の場合、exitflag
は0
になります。
受け入れ可能な関数ハンドルの詳細および一覧は、MATLAB 関数
funm
を参照してください。入力行列
A
が数値 (シンボリック オブジェクトではない) で、第 2 引数f
が関数ハンドルの場合、funm
の呼び出しは MATLAB 関数funm
を起動します。
バージョン履歴
R2014b で導入