矩阵指数
计算和比较 A
的指数和 A
的矩阵指数。
A = [1 1 0; 0 0 2; 0 0 -1];
exp(A)
ans = 3×3
2.7183 2.7183 1.0000
1.0000 1.0000 7.3891
1.0000 1.0000 0.3679
expm(A)
ans = 3×3
2.7183 1.7183 1.0862
0 1.0000 1.2642
0 0 0.3679
请注意,两种结果的对角线元素相等,这对于任何三角矩阵都是如此。非对角线元素(包括对角线下方的元素)则不相同。
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 处的函数的语法 |
---|
exp | funm(A, @exp) |
log | funm(A, @log) |
sin | funm(A, @sin) |
cos | funm(A, @cos) |
sinh | funm(A, @sinh) |
cosh | funm(A, @cosh) |
对于方阵根,请改用 sqrtm(A)
。对于矩阵指数,expm(A)
和 funm(A, @exp)
哪一个更准确取决于矩阵 A
。
fun
表示的函数必须包含具有无限收敛半径的泰勒级数。例外是被视为特殊情况的 @log
。参数化函数 解释如何在必要情况下向函数 fun
提供其他参数。
F = funm(A,fun,options)
将算法的参数设置为结构体 options
中的值。
下表列出了 options
的字段。
字段 | 说明 | 值 |
---|
options.Display | 显示级别 | 'off' (默认值)、'on' 、'verbose' |
options.TolBlk | 阻止 Schur 表的容差 | 正标量。默认值为 0.1 。 |
options.TolTay | 计算对角线块的泰勒级数的终止容差 | 正标量。默认值为 eps 。 |
options.MaxTerms | 泰勒级数项的最大数目 | 正整数。默认值为 250 。 |
options.MaxSqrt | 计算对数时,逆缩放和二乘法中计算的最大平方根数。 | 正整数。默认值为 100 。 |
options.Ord | 指定 Schur 表 T 的排序方式。 | 长度为 length(A) 的向量。options.Ord(i) 是 T(i,i) 所放置到的块的索引。默认值为 [] 。 |
F = funm(A,fun,options,p1,p2,...)
向函数传递额外的输入 p1,p2,...
。
[F,exitflag] = funm(...)
返回用于描述 funm
的退出条件的 exitflag
。exitflag
可以具有下列值:
[F,exitflag,output] = funm(...)
返回包含以下字段的结构体 output
:
字段 | 说明 |
---|
output.terms | 一个向量,其中 output.terms(i) 是在计算第 i 个块时所使用的泰勒级数的项数,或者在使用对数的情况下,维度大于 2 的矩阵的平方根数。 |
output.ind | 重新排序的 Schur 因子 T 的 (i,j) 块为 T(output.ind{i}, output.ind{j}) 的元胞数组。 |
output.ord | 传递到 ordschur 时对 Schur 表排序 |
output.T | 重新排序的 Schur 表 |
如果 Schur 表为对角线,则 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
求
A=[2 1 -1
1 3 -1
1 2 0];
A = sym(A);
syms t;
expm(A.*t)
expm(A)
funm(A, @exp)
和答案一样
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)