微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于复矩阵微分方程的 odeintw 包背后的理论是什么?

如何解决用于复矩阵微分方程的 odeintw 包背后的理论是什么?

在以下大多数复矩阵微分方程的答案中,已建议使用 odeintw 包。 https://stackoverflow.com/a/45970853/7952027

https://stackoverflow.com/a/26320130/7952027

https://stackoverflow.com/a/26747232/7952027

https://stackoverflow.com/a/26582411/7952027

我想知道在odeintw代码中完成的操作背后的理论。 就像为什么必须构建带状 jacobian 一样,函数 _complex_to_real_jac、_transform_banded_jac 等背后的想法。

解决方法

答案在评论中。

复矩阵空间是实向量空间,因此复矩阵可以由保留这种线性结构的实数数组表示。 odeintw 所要做的就是包装 odeint 或更好地使用此基础变换(向前和向后)赋予它的函数。

现在如果你想通过提供雅可比来加速计算,它也需要被转换成真实的形式。以线法为例,您会得到带状雅可比行列式,出于效率原因,翻译必须保留该属性。

M-o-L 是求解热或波动方程类型 PDE 的常用方法。本质上,它离散空间维度,同时保持时间维度连续,从而在时间方向上产生大维 ODE 系统。由此产生的雅可比行列式仅在最近邻相互作用中是非零的,因此非常稀疏,并且如果通过规则网格进行离散化,则具有带状结构。

当您想通过 Dfun 参数指定雅可比行列式时,会出现重要的部分。复雅可比行列式要求方程的右侧是复可微分的(即全纯的)。例如,函数 f(z) = z*(复共轭)不是复数可微的,因此您不能为方程 dz/dt = z* 指定复数雅可比行列式。您必须将其重写为实方程组。 (这个例子在 odeintw 的文档字符串中。)

如果右边是复数可微的,那么你可以通过 Dfun 给出一个复数雅可比行列式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。