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)是病态的。
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, …,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) ¶计算数值张量之间的张量积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号-2