18.4矩阵的函数

 
r = expm (A)

返回矩阵的指数。

矩阵指数定义为无穷大的泰勒级数

expm (A) = I + A + A^2/2! + A^3/3! + ...

然而,泰勒级数是计算矩阵指数的方法;详见 Moler and Van Loan, "Nineteen Dubious Ways to Compute the Exponential of a Matrix", SIAM Review, 1978. 这个协程使用了Ward的对角Pad&e方法;近似方法用的是三步预处理(SIAM Journal on Numerical Analysis, 1977). 对角 Padé近似是矩阵的有理多项式

     -1
D (A)   N (A)

泰勒系列赛与第一场比赛相匹配2q+1上述泰勒级数的项;当Dq(A)是病态的。

详见: logm, sqrtm.

 
s = logm (A)
s = logm (A, opt_iters)
[s, iters] = logm (…)

计算平方矩阵的矩阵对数A.

该实现利用了Padé近似和身份

logm (A) = 2^k * logm (A^(1 / 2^k))

可选输入opt_iters是要计算的最大平方根数,默认为100。

可选输出iters是实际计算的平方根数。

详见: expm, sqrtm.

 
s = sqrtm (A)
[s, error_estimate] = sqrtm (A)

计算矩阵的平方根A.

参考: N.J. Higham, A New sqrtm for MATLAB, Numerical Analysis Report No. 336, Manchester Centre for Computational Mathematics, Manchester, England, January 1999.

详见: expm, logm.

 
F = funm (A, fun)
F = funm (A, fun, options)
F = funm (A, fun, options, p1, …)
[F, exitflag] = funm (…)
[F, exitflag, output] = funm (…)

执行一般的矩阵函数。

funm (A, fun) 在方阵A上执行一般的矩阵函数fun. 输入 fun (xk) 必须在函数fun且在向量x上执行并返回函数的k阶导数。 函数fun必须有一个泰勒级数表示,并且具有无限的收敛半径。

特殊的函数explogsincossinhcosh可以通过函数句柄传递;例如 funm (A, @cos).

对于矩阵开方,使用sqrtm代替。对于矩阵指数,根据A的不同, expmfunm (A, @exp)可能更快或更准确。

可选的第三个输入以选项结构体options的形式使用, 可以用来指定函数详细输出并影响某些算法。有关后者的更多详细信息,请参阅下面的参考文献。

options可以有字段如下:

Display

指定什么信息会被打印到屏幕上,在计算过程中。它可以是一个字符串值"off"(没有信息,默认值), "on"(一些信息), "verbose"(最大信息); 或者是一个标量值在0(没有信息,默认值)和5(最大信息)之间。 当Display"verbose"或标量值≥3时,还会显示特征值和群的图。

TolBlk

用于确定阻塞的容差(正标量,默认值:0.1)。

TolTay

用于确定泰勒级数收敛的容差(正标量,默认值:eps)。

MaxTerms

泰勒级数的最大项数(正整数,默认值:250)。

MaxSqrt

在逆缩放和平方过程中执行的最大的平方根数(正整数,默认值:100)。此选项仅用于计算对数,且其函数类似于MaxTerms

Ord

定义一个自定义的排序模式,用向量方式定义,其长度等于矩阵A的阶数。

Octave支持这些字段的任何大小写。

所有在options之后的输入都将作为位置参数传递给函数 fun.

可选输出:

exitflag

标量,描述退出条件:

  • 0 — 算法成功完成。
  • 1 — 一个或多个泰勒展开没有收敛,计算的F值可能不准确。
output

包含以下字段的结构体:

terms

向量,其中output.terms(i)是评估第i个块时使用的泰勒级数项数,或者在对数的情况下,是维数大于2的矩阵的平方根的数量。

ind

元胞数组,其中第(i,j)块在重新排序的舒尔因子T中是 T(output.ind{i}, output.ind{j}).

ord

舒尔型的顺序,传递给 ordschur.

T

重新排序的舒尔型.

如果舒尔型是对角的,则 output = struct ("terms", ones (n, 1), "ind", {1:n}, "ord", [], "T", T).

例子:

F = funm (magic (3), @sin);
⇒ F =
   -0.3850    1.0191    0.0162
    0.6179    0.2168   -0.1844
    0.4173   -0.5856    0.8185

下面的代码

S = funm (X, @sin);
C = funm (X, @cos);

将(在可能的舍入误差范围内)和下面的代码产生相同的结果

E = expm (i*X);
C = real (E);
S = imag (E);

引用:

Philip I. Davies and Nicholas J. Higham, "A Schur-Parlett algorithm for computing matrix functions", SIAM Journal on Matrix Analysis and Applications, Vol. 25(2), pp. 464–485, 2003.

Nicholas J. Higham, Functions of Matrices: Theory and Computation, SIAM, pp. 425, 2008, ISBN 978-0-898716-46-7.

详见: expm, logm, sqrtm.

 
C = kron (A, B)
C = kron (A1, A2, …)

形成两个或多个矩阵的克罗内克乘积。

这被按块定义为

c = [ a(i,j)*b ]

例如

kron (1:4, ones (3, 1))
     ⇒   1  2  3  4
         1  2  3  4
         1  2  3  4

如果有两个以上的输入参数A1, A2, …,AnKronecker乘积计算为

kron (kron (A1, A2), ..., An)

因为克罗内克积是关联的,所以这是定义明确的。

详见: tensorprod.

 
C = tensorprod (A, B, dimA, dimB)
C = tensorprod (A, B, dim)
C = tensorprod (A, B)
C = tensorprod (A, B, "all")
C = tensorprod (A, B, …, "NumDimensionsA", value)

计算数值张量之间的张量积AB.

的尺寸AB从定义dimAdimB分别地dimAdimB定义要匹配的维度的标量或等长向量。的匹配尺寸AB必须具有相同数量的元素。

仅当dim使用时,它相当于dimA = dimB = dim.

当没有指定尺寸时,dimA = dimB = []。这计算之间的外积AB.

使用"all"参数导致之间的内积AB。这需要size (A) == size (B).

使用具有属性名称的属性值对"NumDimensionsA"A具有应转移到的尾随单重维度C。指定的value应该是的维度总数A.

MATLAB兼容性:Octave当前不支持"property_name=value"的语法"NumDimensionsA"参数

详见: kron, dot, mtimes.

 
C = blkmm (A, B)

计算矩阵块的乘积。

块作为数组的二维子数组给出A,B。的大小A必须具有形式[m,k,…]的大小B必须是[k,n,…]。结果是大小[m,n,…]并且计算如下:

for i = 1:prod (size (A)(3:end))
  C(:,:,i) = A(:,:,i) * B(:,:,i)
endfor
 
X = sylvester (A, B, C)

求解Sylvester方程。

Sylvester方程定义为:

A X + X B = C

使用标准计算解决方案LAPACK 子程序。

例如

sylvester ([1, 2; 3, 4], [5, 6; 7, 8], [9, 10; 11, 12])
   ⇒    [ 0.50000, 0.66667; 0.66667, 0.50000 ]

版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2