我正在做我的毕业设计,特别是关于流体动力学的,我有一个非线性方程组要求解,我选择牛顿法,所以我必须通过矩阵的雅可比矩阵(实际上是 12x12 矩阵).这个矩阵中的每个元素都是函数在某一点求值的导数,手工编写所有这些并计算每个导数是非常困难的;系统看起来像:
f1 (x1, x2, x3, ..., x12子>) = 0f2 (x1, x2, x3, ..., x12子>) = 0
.
.
.
f12 (x1, x2, x3, ..., x12子>) = 0
其中 x1、x2、x3 是变量(温度、压力...等)
我可以自动执行此操作吗?如果在 Fortran 中不行,我可以使用其他脚本语言作为 Python(sympy 模块)吗?
最佳答案
是的,通过使用适当的算法差异包。这是一种可以评估(原则上)您表示为计算机程序的任何函数的任意阶导数的方法,并且存在许多适用于 Fortran 的程序包。看看
http://en.wikipedia.org/wiki/Automatic_differentiation
和
http://www.nag.co.uk/pss/nag-and-algorithmic-differentiation
开始
免责声明:
1)我从来没有“愤怒”地使用过它
2) 直到最近我还在 NAG 工作
关于python - 自动微分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29265164/