自动区分

时间:2015-03-25 19:48:40

标签: python fortran mathematical-optimization

我正在研究我的毕业项目,特别是关于流体动力学的项目,我有一个非线性方程组来解决,我选择牛顿法,所以我必须通过matix的雅可比行列式(实际上是12x12矩阵)。该矩阵中的每个元素都是在某个时刻评估的函数的导数,很难手动编写所有这些元素并计算每个导数;系统看起来像:

f 1 (x 1 ,x 2 ,x 3 ,...,x 12 < / sub>)= 0
f 2 (x 1 ,x 2 ,x 3 ,...,x 12 < / sub>)= 0



f 12 (x 1 ,x 2 ,x 3 ,...,x 12 < / sub>)= 0


其中x 1 ,x 2 ,x 3 是变量(温度,压力......等)
我可以自动执行此操作吗?如果在Fortran中不可能,我可以使用其他脚本语言作为Python(sympy模块)吗?

2 个答案:

答案 0 :(得分:4)

是的,使用适当的算法差异化套餐。这是一种方法,可以(原则上)评估您表示为计算机程序的任何函数的任意顺序导数,并且Fortran存在许多软件包。看看

http://en.wikipedia.org/wiki/Automatic_differentiation

http://www.nag.co.uk/pss/nag-and-algorithmic-differentiation

开始使用

免责声明:

1)我从未在“愤怒”中使用它

2)直到最近我还在NAG工作

答案 1 :(得分:1)

是的,您可以对symbolic differentiationprinting out Fortran code使用sympy。其他系统如Maple也可以这样做。请注意,您可以花费大量时间计算衍生工具,特别是如果这些不是优化的,并且numerical differentiation可能会更快。