我正在研究我的毕业项目,特别是关于流体动力学的项目,我有一个非线性方程组来解决,我选择牛顿法,所以我必须通过matix的雅可比行列式(实际上是12x12矩阵)。该矩阵中的每个元素都是在某个时刻评估的函数的导数,很难手动编写所有这些元素并计算每个导数;系统看起来像:
f 1 (x 1 ,x 2 ,x 3 ,...,x 12 < / sub>)= 0
其中x 1 ,x 2 ,x 3 是变量(温度,压力......等)
我可以自动执行此操作吗?如果在Fortran中不可能,我可以使用其他脚本语言作为Python(sympy模块)吗?
答案 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 differentiation和printing out Fortran code使用sympy。其他系统如Maple也可以这样做。请注意,您可以花费大量时间计算衍生工具,特别是如果这些不是优化的,并且numerical differentiation可能会更快。