funm
计算常规矩阵函数
语法
F = funm(A,fun)
F = funm(A,fun,options)
F = funm(A,fun,options,p1,p2,...)
[F,exitflag] = funm(...)
[F,exitflag,output] = funm(...)
说明
F = funm(A,fun) 计算在方阵参量为 A 时用户定义的函数 fun。F = fun(x,k) 必须接受向量 x 和整数 k,返回大小相同的 x 的向量 f,其中 f(i) 是在 x(i) 条件下计算的函数 fun 的第 k 个导数。fun 表示的函数必须包含具有无限收敛半径的泰勒级数,被视为特殊情况的 fun = @log 除外。
您也可以使用 funm 计算下表中列出的特殊函数在 A 处的值。
函数 | 计算矩阵 A 处的函数的语法 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
对于方阵根,请改用 sqrtm(A)。对于矩阵指数,expm(A) 和 funm(A, @exp) 哪一个更准确取决于矩阵 A。
fun 表示的函数必须包含具有无限收敛半径的泰勒级数。例外是被视为特殊情况的 @log。参数化函数 解释如何在必要情况下向函数 fun 提供其他参数。
F = funm(A,fun,options) 将算法的参数设置为结构体 options 中的值。
下表列出了 options 的字段。
字段 | 描述 | 值 |
|---|---|---|
| 显示级别 |
|
| 阻止舒尔表的容差 | 正标量。默认值为 |
| 计算对角块的泰勒级数的终止容差 | 正标量。默认值为 |
| 泰勒级数项的最大数目 | 正整数。默认值为 |
| 计算对数时,使用逆缩放和平方方法计算的最大平方根数。 | 正整数。默认值为 |
| 指定舒尔表 | 长度为 |
F = funm(A,fun,options,p1,p2,...) 向函数传递额外的输入 p1,p2,...。
[F,exitflag] = funm(...) 返回用于描述 funm 的退出条件的 exitflag。exitflag 可以具有下列值:
0- 算法成功。1- 一次或多次泰勒级数计算未收敛,在使用对数的情况下,需要的平方根太多。但是,F的计算值可能仍然正确。
[F,exitflag,output] = funm(...) 返回包含以下字段的结构体 output:
字段 | 描述 |
|---|---|
| 一个向量,其中 |
| 重新排序的舒尔因子 |
| 传递到 |
| 重新排序的舒尔表 |
如果舒尔表为对角线,则 output = struct('terms',ones(n,1),'ind',{1:n})。
示例
示例 1
以下命令计算 3×3 幻方矩阵的矩阵正弦值。
F=funm(magic(3), @sin)
F =
-0.3850 1.0191 0.0162
0.6179 0.2168 -0.1844
0.4173 -0.5856 0.8185示例 2
以下语句
S = funm(X,@sin); C = funm(X,@cos);
在舍入误差内生成与下面相同的结果
E = expm(i*X); C = real(E); S = imag(E);
在任一情况下,结果都满足 S*S+C*C = I,其中 I = eye(size(X))。
示例 3
要使用一个对 funm 的调用计算函数 exp(x) + cos(x) 在 A 处的值,请使用
F = funm(A,@fun_expcos)
其中 fun_expcos 是以下函数。
function f = fun_expcos(x, k)
% Return kth derivative of exp + cos at X.
g = mod(ceil(k/2),2);
if mod(k,2)
f = exp(x) + sin(x)*(-1)^g;
else
f = exp(x) + cos(x)*(-1)^g;
end 算法
funm 使用的算法如 [1] 中所述。
参考
[1] Davies, P. I. and N. J. Higham, “A Schur-Parlett algorithm for computing matrix functions,” SIAM J. Matrix Anal. Appl., Vol. 25, Number 2, pp. 464-485, 2003.
[2] Golub, G. H. and C. F. Van Loan, Matrix Computation, Third Edition, Johns Hopkins University Press, 1996, p. 384.
[3] Moler, C. B. and C. F. Van Loan, “Nineteen Dubious Ways to Compute the Exponential of a Matrix, Twenty-Five Years Later” SIAM Review 20, Vol. 45, Number 1, pp. 1-47, 2003.
扩展功能
版本历史记录
在 R2006a 之前推出