【问题标题】:Is there a SciPy function for computation of derivative of matrix exponential?是否有用于计算矩阵指数导数的 SciPy 函数?
【发布时间】:2022-01-11 12:07:13
【问题描述】:

我与李群合作SO(3)。我知道切线应用存在解析表达式

矩阵指数的导数可以简单地计算为

我想做的是计算T(w)

我自己简单地实现函数 T 的问题在于它对于向量 omega 的小范数在数值上是不精确的。我知道 SciPy 中已经存在指数映射 scipy.linalg.expm 和对数映射 scipy.linalg.logm。由于这是相似的,我想知道是否还有切线图或导数。我注意到scipy.linalg.expm_frechet,但是我不知道如何将它连接到T

【问题讨论】:

    标签: python scipy


    【解决方案1】:

    对于导数的数值评估,您可以将代码转换为使用 pytorch,然后 autograd 将为您完成工作 a

    对于符号区分,您可以使用 sympy b

    【讨论】:

    • 抱歉,我的问题可能有点不清楚。我对实现我自己的计算算法不感兴趣,因为我已经完成了。我想知道它是否已经在 SciPy 中实现,例如矩阵指数。或者也许有一种简单的方法可以从 frechet 导数中提取它。不管怎样,谢谢你的帮助。我对 PyTorch 很感兴趣。
    • SciPy 并不关心对其提供的功能实现差异化。例如 Pytorch、SymPy、tensorflow。如果您可以提供代码来实现上面的方程式,那就更容易了。我看到你使用了一个向量 $\omega$ 但只使用了它的范数。你没有定义 $\Omega(t)$,我看不出你如何将 $T(\omega(t))$ 与 $\Omega(t)$ 联系起来,这就是我没有给你一个例子的原因代码。
    • 我不需要区分。导数的方程已经写在原始帖子中。如果我提供的方程式已经在 SciPy 中实现,我很感兴趣。这是一个相关的问题,因为除了直接评估它之外,还存在用于计算这个方程的不同算法。
    【解决方案2】:

    这不是直接回答你的问题,而是为了

    对于向量 omega 的小范数,它在数值上是不精确的

    你可以只对小的 |\omega| 使用泰勒级数展开即使用类似的东西

    (1-cos(x))/x^2 = 1/2 - x^2/24,如果 |x|

    对于适当小的 eps(比如 1e-4)

    和 (x-sin(x))/x^3 的想法相同

    【讨论】:

    • 是的,我同意这个观察。但是接下来的问题是如何设置应该使用近似值的 eps 的值。这就是为什么我希望有人已经这样做了。
    • 如果有人已经做过,确实更容易。但在这种情况下并不难——通过观察函数和近似值(对于 cos),我会说 eps =5e-3 是最好的截止值,在 1e-11 内为您提供无噪声行为和准确度跨度>
    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 2023-02-04
    • 2013-10-10
    • 2022-01-15
    • 2020-07-21
    • 2019-07-14
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多