用MATLAB计算常规矩阵函数 eAt sinA

matlab编程 专栏收录该内容
33 篇文章 2 订阅

矩阵指数

计算和比较 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 时用户定义的函数 funF = 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 的退出条件的 exitflagexitflag 可以具有下列值:

  • 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	

 A=\bigl(\begin{smallmatrix} 2&1 & -1\\ 1& 3 &-1 \\ 1& 2& 0 \end{smallmatrix}\bigr)_e{At},_e{A},sin{A}

A=[2 1 -1
    1 3 -1
    1 2 0];
A = sym(A);
syms t;
expm(A.*t)
expm(A)
funm(A, @exp)

 

和答案一样

  • 2
    点赞
  • 2
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值