使用 SymPy codegen 为方程组生成 Fortran 子例程

2024-02-27

以我发现的以前的例子为基础here https://stackoverflow.com/questions/25327845/how-to-generate-fortran-subroutine-with-sympy-codegen,我尝试找出如何生成与我需要坚持的特定形式相对应的 Fortran 代码。所需的 FORTRAN 代码将如下所示(它基于 FitzHugh-Nagumo 模型 https://en.wikipedia.org/wiki/FitzHugh%E2%80%93Nagumo_model):

  SUBROUTINE FF(NE,U,PAR,F) 
!     ---------- -- 
!     Define the nonlinear term

  IMPLICIT NONE
  INTEGER, INTENT(IN) :: NE
  DOUBLE PRECISION, INTENT(IN) :: U(NE),PAR(*)
  DOUBLE PRECISION, INTENT(OUT) :: F(NE)

  DOUBLE PRECISION u,v,e,a1,a0

    u=U(1)
    v=U(2)
    e=PAR(1)
    a1=PAR(2)
    a0=PAR(3)

    F(1)= u-u**3-v 
    F(2)= e*(u-a1*v-a0)

  END SUBROUTINE FF

我设法在 SymPy 中创建正确的表达式,但我还没有弄清楚如何使用生成所需的代码codegen。到目前为止,这是我的尝试:

from sympy import symbols,latex
from sympy.utilities.codegen import codegen
from sympy.tensor import IndexedBase, Idx
from sympy import Matrix
U, PAR = symbols('U PAR', cls=IndexedBase)

u = U[1]
v = U[2]

e = PAR[1]
a1 = PAR[2]
a0 = PAR[3]

dudt = u-u**3-v 
dvdt = e*(u-a1*v-a0)

print latex(dudt)
print latex(dvdt)

F = Matrix([dudt,dvdt])
print F

result = codegen(('my_function', F), 'f95', 'my_project')
print result[0][1]

但它给了我:

IndexException: 
Range is not defined for all indices in: PAR[3]

如果您只需要在 python 代码中调用 FORTRAN 函数,我发现使用 FORTRAN 包装器比尝试在 python 中重新创建 FORTRAN 代码要简单得多,特别是在大量使用 GOTO 的情况下。

你试过f2py吗?https://sysbio.ioc.ee/projects/f2py2e/ https://sysbio.ioc.ee/projects/f2py2e/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SymPy codegen 为方程组生成 Fortran 子例程 的相关文章

随机推荐

  • 如何解析字符串并返回嵌套数组?

    我想要一个Python函数 它接受一个字符串 并返回一个数组 其中数组中的每个项目要么是一个字符 要么是另一个此类数组 嵌套数组在输入字符串中以 开头并以 结尾进行标记 因此 该函数的行为如下 1 foo abc a b c 2 foo a
  • Android 中不安全的蓝牙连接

    一位教授向我提出挑战 要求我在 Android 上开发一个小型蓝牙演示应用程序 直到两周前他向我提出这个挑战之前 我对 Android 开发一无所知 一般来说 我对 Java 编程也很陌生 所以我的起点还很远 但不管怎么说 所以我完成了大部
  • mousedown 事件的 if else if 语句

    我的目标是为每个单击的项目显示不同的对话框 我目前有一个设置 我想我可以添加一个 if 语句 如果将 mousedown 放在 div a dialog a 上 否则如果将 mousedown 放在 div b dialog b 等上 我是
  • .NET 正则表达式检查长度和非字母数字字符

    我需要 Regexp 来验证字符串的最小长度为 6 并且它至少包含一个非字母数字字符 例如 eN S u h9YI gt 4j 9YI 4j eN S usdf dfh9YI gt 4j ghffg 9YI 4j 这个运作良好 6 d 但在
  • 使用并行工具箱创建具有有限数量工作人员的任务/作业池(线程池)

    我想使用并行计算工具箱来加速一组相互不依赖的函数调用 为了提高效率 我想使用计时器函数 回调函数在我的函数之一完成执行后继续执行更多函数 我事先不知道哪些函数会更快 所以我不能将我的函数集分成几个池并将它们设置为并行 换句话说 我想要一些并
  • 通过 WCF 服务传递枚举

    我需要在与我的 WCF 服务项目分开的项目中定义一个枚举 我正在创建一个包含枚举和其他数据的对象 当我通过 WCF 服务将对象传递给客户端时 我得到一个未找到的信息 Enum public enum Color Red 1 Blue Gre
  • Terraform 上出现“无效的旧提供商地址”错误

    我正在尝试使用 terraform v0 14 3 部署 bitbucket 管道以在谷歌云中创建资源 运行 terraform 命令后 管道失败并出现以下错误 Error Invalid legacy provider address T
  • 如何防止滑动触发点击?

    I use 触摸滑动 http labs rampinteractive co uk touchSwipe demos 创建可滑动的图像列表 我将滑动事件绑定到图像 同时我还绑定了一个单击事件来打开图像的大版本 我的问题是 如果我滑动 它也
  • 什么是换行转换?

    当您尝试将值从一种类型转换为另一种不兼容的类型时 您会在 C 中收到以下错误 CS0039 无法通过引用转换 装箱转换 拆箱转换 包装转换或 null 类型转换将类型 A 转换为 B 我了解如何潜在地解决此问题 但我的问题是关于转换本身的类
  • Rails 迁移使列为 null => true

    我最初创建了一个表 其中列为 t string email default gt null gt false 要求已更改 现在我需要允许电子邮件为空 如何编写迁移以使 null gt true change column null http
  • 根据向量更改列的类别

    我有 2 个数据框 主要的一个df 另一个数据框tmp它描述了列类型df和新格式应转换哪些列 这是一个可重现的示例 df lt data frame var1 c a b c var2 c 1 2 3 var3 c d e f tmp lt
  • Clojure 的惰性如何与 Java/不纯代码的调用交互?

    今天我们在代码中偶然发现了一个问题 无法回答这个 Clojure 问题 Clojure 是严格还是惰性地评估不纯代码 或对 Java 代码的调用 似乎副作用 惰性序列会导致奇怪的行为 以下是我们所知道的导致这个问题的信息 Clojure 有
  • formfield_for_foreignkey 和内联管理

    我只想展示特定比赛中与球队相关的球员 通常 当我这样做时 它会向我显示数据库中的所有球员 这是我的 models py class InningsCard models Model fixture models ForeignKey Fix
  • 构建 Django Webapp 前端的“最佳”方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 提前致谢 这更像是一个 哲学 问题 而不是直接请求对代码的意见 尽管我非常感谢任何人对代码示例的输入 从我记事起 我就一直是一名 传统 开发人员
  • 在 iOS 7 中设置 UINavigationBar 动画(如 Safari)

    在 Safari 中滚动内容时 标题栏会以动画形式显示为较小版本 实现这一点的最佳方法是什么 目前 我正在更改框架的大小 如下所示 void scrollViewDidScroll UIScrollView scrollView Table
  • 发送电子邮件需要设置哪些 php.ini 参数? [复制]

    这个问题在这里已经有答案了 我想从我的 PHP 代码发送电子邮件 但收到警告消息 那么 php ini 参数要设置哪些呢 要检查 更改您的 PHP 邮件配置 打开 php ini 文件 如果您不知道它在哪里 请参见下文 搜索显示为 邮件功能
  • Visual Studio 2010 关闭确认

    我希望VS2010在我关闭整个环境时询问我是否确定要关闭VS2010 不幸的是我在任何地方都找不到这个设置 有人知道吗 AFAIK 没有这样的选择 然而 有一个古老的工具 叫做NoClose http www donationcoder c
  • 如何在 HTML 中实现“全选”复选框?

    我有一个带有多个复选框的 HTML 页面 我还需要一个名为 全选 的复选框 当我选择此复选框时 必须选择 HTML 页面中的所有复选框 我怎样才能做到这一点
  • 从 iframe 中重定向到

    我有一个 Rails 应用程序 它有一个在 iframe 中呈现的表单 并且从我想要的创建操作中redirect to在 iframe 之外并重新渲染整个页面 而不是在 iframe 中 我很好奇有什么想法可以实现这一目标 你能行的 你必须
  • 使用 SymPy codegen 为方程组生成 Fortran 子例程

    以我发现的以前的例子为基础here https stackoverflow com questions 25327845 how to generate fortran subroutine with sympy codegen 我尝试找出