MATLAB中funm函数用法

目录

语法

说明

示例

示例 1

示例 2

示例 3


        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 可以具有下列值:

  • 0 - 算法成功。

  • 1 - 一次或多次泰勒级数计算未收敛,在使用对数的情况下,需要的平方根太多。但是,F 的计算值可能仍然正确。

[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	

算法

​        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.

  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值