r = expm (A) ¶返回矩阵的指数。
矩阵指数定义为无穷级数泰勒展开
expm (A) = I + A + A^2/2! + A^3/3! + ...
然而,泰勒级数并非计算矩阵指数的可行方法;请参阅 Moler 和 Van Loan 的 "Nineteen Dubious Ways to Compute the Exponential of a Matrix", SIAM Review, 1978。 该例程使用了 Ward 的对角 Padé 近似方法,并采用三步预处理( SIAM Journal on Numerical Analysis, 1977)。对角 Padé 近似是矩阵的有理多项式
-1 D (A) N (A)
其泰勒级数与上述泰勒级数的前 2q+1 项相匹配;当 Dq(A)
是病态时,直接计算泰勒级数(使用相同的预处理步骤)可能比 Padé 近似更可取。
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 是实际计算的平方根数。
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.
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 (x, k)
必须返回函数 fun 在向量 x 处求值的 k 阶导数。
函数 fun 必须具有泰勒级数表示,且收敛半径为无穷大。
特殊函数 exp、log、sin、cos、
sinh 和 cosh 可以通过函数句柄传递;例如
funm (A, @cos).
对于矩阵开方,使用sqrtm代替。对于矩阵指数,根据A的不同,
expm或funm (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.
标量,描述退出条件:
0 — 算法成功完成。
1 — 一个或多个泰勒展开没有收敛,计算的F值可能不准确。
包含以下字段的结构体:
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.
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, …, An,克罗内克乘积计算为
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) ¶计算数值张量 A 和 B 之间的张量积。
A 和 B 中要缩并的维度分别由 dimA 和 dimB 定义。dimA 和 dimB 是标量或等长向量,定义要匹配的维度。A 和 B 的匹配维度必须具有相同数量的元素。
仅当使用 dim 时,它相当于 dimA = dimB = dim。
当没有指定维度时,dimA = dimB = []。这计算 A 和 B 之间的外积。
使用 "all" 参数会导致 A 和 B 之间的内积。这要求 size (A) == size (B)。
使用属性值对,属性名称为 "NumDimensionsA",当 A 具有应转移到 C 的尾随单例维度时使用。指定的 value 应为 A 的总维度数。
MATLAB 兼容性:Octave 当前不支持 "property_name=value" 语法用于 "NumDimensionsA" 参数。
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号-4