如何使用 SymPy codegen 生成 Fortran 子例程

2024-01-03

我想使用 SymPy codegen 实用程序生成 Fortran 子例程。我可以毫无问题地生成 Fortran 函数codegen(("f", x*y*z), "f95", "filename")。但我想生成一个 Fortran 子例程,以便可以修改输入数组。我怎样才能做到这一点?文档非常差。


如果有单个标量返回值,则 codegen 实用程序创建一个函数,否则创建一个子例程。对数组有一些支持,但除非您向 codegen 提供类似数组的表达式,否则不会触发数组功能。文档很分散,所以我给你一些指导:

看一下 autowrap 文档中的矩阵向​​量示例:http://docs.sympy.org/latest/modules/utilities/autowrap.html http://docs.sympy.org/latest/modules/utilities/autowrap.html。 Autowrap 在幕后使用 codegen。

在当前的开发人员版本中,还具有生成与带有符号元素的矩阵相对应的代码的功能。请参阅 fcode() 的示例,网址为http://docs.sympy.org/dev/modules/printing.html#fortran-printing http://docs.sympy.org/dev/modules/printing.html#fortran-printing.

以下是应输出矩阵向量乘积的 Fortran 95 子例程的示例代码:

from sympy import *
from sympy.utilities.codegen import codegen
A, B, C = symbols('A B C', cls=IndexedBase)
m, n = symbols('m n', integer=True)
i = Idx('i', m)
j = Idx('j', n)
expr = Eq(C[i], A[i, j]*B[j])
result = codegen(('my_function', expr), 'f95', 'my_project')
print result[0][1]

通过将这些行保存到 my_file.py 并运行python my_file.py,我得到以下输出:

!******************************************************************************
!*                    Code generated with sympy 0.7.5-git                     *
!*                                                                            *
!*              See http://www.sympy.org/ for more information.               *
!*                                                                            *
!*                       This file is part of 'project'                       *
!******************************************************************************

subroutine my_function(A, B, m, n, C)
implicit none
INTEGER*4, intent(in) :: m
INTEGER*4, intent(in) :: n
REAL*8, intent(in), dimension(1:m, 1:n) :: A
REAL*8, intent(in), dimension(1:n) :: B
REAL*8, intent(out), dimension(1:m) :: C
INTEGER*4 :: i
INTEGER*4 :: j

do i = 1, m
   C(i) = 0
end do
do i = 1, m
   do j = 1, n
      C(i) = B(j)*A(i, j) + C(i)
   end do
end do

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

如何使用 SymPy codegen 生成 Fortran 子例程 的相关文章

  • 解决 Sympy 中的不平等问题

    我试图解决 sympy 中的以下不等式 10000 x 1 lt 0 所以我发出了命令 solve poly inequality Poly 10000 x 1 lt 但是 我得到了 Interval open oo 1 10000 然而
  • SymPy 虚数

    我正在编写一些 SymPy 代码来处理带有虚数的符号表达式 首先 我想让它把 x 和 y 作为实数并找到 x iy 的解 所以我可以按如下方式执行此操作 x y sympy symbols x y real True print sympy
  • Python 求解一个变量的方程

    我正在尝试使用 SymPy 求解 python 中的方程 我有一个生成的方程 类似于function y 8 0 y 3 0 我将其与 SymPy 一起使用来创建一个如下所示的新方程 eq sympy Eq function 2 哪个输出y
  • 计算机代数软件,用于最小化一组多项式中的运算次数

    我有多项式系统 相当简单的多项式表达式 但相当长 优化我的手牌 表达式按集合分组 在给定的集合中 多个变量中有共同的术语 我想知道是否有一个计算机代数系统 例如 Mathematica Matlab 或 sympy 可以优化多个具有常用项的
  • SymPy 中眼睛和身份的区别

    在 SymPy 中 有什么区别eye 5 and Identity 5 如果我有一个矩阵X 我看到X eye 5 and X Identity 5 给出不同的结果 后者不是矩阵 SymPy 区分 显式矩阵 具有一定的大小 例如 3 x 3
  • 当我对符号矩阵进行行归约时,为什么 SymPy 给出了错误的答案?

    如果我要求 SymPy 对奇异矩阵进行行归约 nu Symbol nu lamb Symbol lambda A3 Matrix 3 nu 1 0 0 3 nu 2 nu 1 2 0 0 2 nu 1 nu lamb 2 3 0 0 nu
  • 防止在 Sympy 中计算乘法表达式

    我正在生成一个包含两个分数的表达式 并且想用 LaTeX 漂亮地打印整个表达式 然后放在工作表上 例如 形式为 5 7 3 4 但是 当我执行以下操作时 fract1 sympy sympify Fraction 5 7 fract2 sy
  • 将 SymPy 矩阵转换为 numpy 数组/矩阵的最佳方法是什么

    我不确定我一直在使用的方法是否sympy转换一个MutableDenseMatrix to a numpy array or numpy matrix目前是一个很好的做法 我有一个符号矩阵 例如 g sympy Matrix x 2 x 3
  • 一个 XSD、两个代码生成工具、两个命名空间

    我有一个 XSD 文件 我还想从中生成 C 和 Java 类 我首先根据类所在的 C 命名空间在 XSD 中设置命名空间 生成 使用 Microsoft 工具 运行良好 序列化也运行良好 我可以根据 XSD 验证它们 完美 现在我想使用 J
  • 如何在 sympy 中求解简并方程组

    我有很多方程组 其中一些未指定 我想找到一个非零解 如果存在 或报告不存在 然而 sympy 似乎在试图找到所有解决方案时停滞不前 这是一个极端的例子 from sympy import A Matrix 0 0 0 0 0 0 0 0 0
  • 使用 numpy/sympy 查找线性系统的最小二乘整数解

    我需要用 numpy 或 sympy 求解线性丢番图方程组 有没有办法限制 numpy 的 linalg solve linalg lstsq 方法仅返回整数解 可能不是 但我想我应该问 我研究了 Sympy 的丢番图求解器 它似乎不适用于
  • Python 如何获取某一特定点的导数值?

    from sympy import x Symbol x y x 2 dx diff y x 这段代码可以得到y的导数 这很容易dx 2 x 现在我想得到的值dx for x 2 清楚地 dx 2 2 4 when x 2 但是我如何用Py
  • SymPy 的多彩图

    我试图在 SymPy 中绘制函数 x 2 的图 并希望用线 x 3 y 9 覆盖它 然后在某些点周围画一个圆 我已经用代码完成了上述所有操作 import sympy as sp x sp Symbol x first plot the f
  • 禁用 sympy 中的自动简化

    我想禁用 sympy 中的自动简化 例如求解方程x y x我想要得到x x代替1 import sympy from sympy abc import x y z expr x y x sympy solve expr y gt 1 i w
  • 如何让 SymPy 收集偏导数?

    我一直在使用 SymPy 来扩展复杂偏微分方程的项 并希望使用 Collect 函数来收集项 然而 在处理微分变量不同的二阶 或高阶 导数时似乎存在问题 在下面的代码示例中collect expr6 有效 但是collect expr7 没
  • SymPy 无法对产品进行羔羊化

    我正在使用 SymPy 1 0 和 Python 2 7 我想计算前 100 个整数的总和 此代码运行成功 import sympy as sy from sympy tensor import IndexedBase Idx import
  • Sympy - 分数操作

    我基本上希望 Sympy 生成乳胶代码 frac x 1 3 y 但每当我要求它生成事物的 Tex 组件时 Sympy 总是返回 frac x 3 frac 1 3 如何避免分解方程 并将等于运算符分配给另一个变量 我还没有尝试将 y 部分
  • 交响二阶颂歌

    我有一个简单的二阶 ODE 的齐次解 当我尝试使用 Sympy 求解初始值时 它返回相同的解 它应该替代 y 0 和 y 0 并产生一个没有常数的解 但事实并非如此 这是建立方程的代码 它是一个弹簧平衡方程 k 弹簧常数 m 质量 我在其他
  • 有意简化小数指数

    我有一个涉及分数指数的表达式 我想将其转换为可识别的多项式以求解 如果有必要 我可以使用写指数Rational但无法做到这一点 我能做些什么 gt gt gt from sympy import gt gt gt var d x d x g
  • 如何限制 sympy FiniteSet 包含符号

    我对 sympy 还很陌生 我尝试使用 linsolve 求解线性方程组 这产生了一个可以用以下两行重现的解决方案 d symbols d solution sets FiniteSet d 1 d 4 d 5 d 我的解决方案遵循限制 即

随机推荐

  • setResourceValue NSURLTagNamesKey 错误

    尝试使用 setResourceValue 将标签颜色设置为蓝色时出现错误 var error NSError let listofTags NSWorkspace sharedWorkspace fileLabels let theURL
  • “application/octet-stream”而不是 application/csv?

    我对 Python 还很陌生 我想确认数据集的类型 下面代码中的URL 确实是一个csv文件 但是 当通过标题检查时 我得到 application octet stream 而不是 application csv 我假设我在读取数据时以错
  • ActionResult AcceptVerbsAttribute 默认 HTTP 方法有哪些?

    我知道您可以通过添加 AcceptVerbsAttribute 来限制特定 ActionResult 方法响应哪些 HTTP 方法 例如 AcceptVerbs HttpVerbs Get public ActionResult Index
  • 从 UIPageViewController 中删除视图控制器

    奇怪的是没有直接的方法来做到这一点 考虑以下场景 您有一个包含 1 页的页面视图控制器 添加另一个页面 共 2 个 并滚动到该页面 我想要的是 当用户滚动回到第一页时 第二页现在被删除并释放 并且用户无法再滑回该页面 我尝试在转换完成后将视
  • 如何计算 luxon 中两个日期之间的持续时间?

    Luxon s 的文档Duration fromISO method https moment github io luxon docs class src duration js 7EDuration html static method
  • HTML - 按钮 - 如何使其可链接?

    我有一个像这样的按钮
  • Ubuntu Github ssh 密钥问题

    我遵循了本指南中给出的每个步骤 http help github com linux key setup http help github com linux key setup 当我读到最后时 我可以 ssh 到 电子邮件受保护 cdn
  • Node JS:从树 json 制作平面 json

    我正在编写一个 node js 脚本来组合目录中的所有 json 文件并将结果存储为新的 json 文件 我尝试在很大程度上完成这项工作 但它有一些缺陷 A json id addEmoticon1 description Message
  • C64 组件 - 6502/6510 - 依次显示一系列三个位图,然后进入字符模式

    我这里有一个很大的问题 我发现仅靠几本参考书 互联网和你的真实资料很难回答这个问题 我只想显示一个位图 等几秒钟 把它从记忆中抹去 显示另一个位图 再等一下 把那个从记忆中抹掉 显示最终位图 等最后一次吧 而且 你已经猜到了 把它从记忆中抹
  • Chrome 切换到 OSX 通知后,网络推送通知未显示

    由于 Chrome 切换到本机 OSX 通知 有时我尝试使用网络推送和我的 Service Worker 显示的通知不会出现 它们在 Chrome 的早期版本中一致出现 自从他们开始做这项工作以来 我应该改变什么吗 确保 请勿打扰 已关闭
  • 快速字符串替换

    在构建了一个可能非常大的字符串后 我将对其进行大量更改 将其中的单个字符 或字节 如果需要 更改为另一个字符 实际上 我的脚本正在构建一个填字游戏 因此字符串不会很长 但我的问题很笼统 我如何利用我不改变字符串 或任何更好的数据类型 长度的
  • 如何增加 UIButton 的点击区域?

    I use UIButton具有自动布局 当图像较小时 点击区域也较小 我可以想象几种方法来解决这个问题 增加图像尺寸 即在图像周围放置透明区域 这不好 因为当您定位图像时 您必须记住额外的透明边框 使用 CGRectInset 并增加大小
  • 在 Solaris 上构建 Node.JS:“使用 仅在 c99 编译环境中有效。”

    我正在尝试在 Solaris 上安装 Node JS 这是开箱即用的 Solaris 9 10 x86 最新版本是 2010 年 9 月 并且仅使用默认软件包 我遵循的方向在这里 https github com joyent node w
  • 在Android 4.0.3中设置textview淡入淡出

    我刚刚尝试实现淡入淡出效果TextView在安卓4 0 3中 然而 它不起作用 fadingEdge horizontal singleLine true ellipsize marquee 此代码适用于 2 3 7 及以下版本 但不适用于
  • Dart 作为 Worker 进行隔离

    编辑以使问题更清楚 我正在尝试在 Dart 中使用 Isolates 或 Web Workers 我能找到在主线程和隔离线程之间进行通信的唯一方法是send and 打电话然后从主线程 但这是主线程将一些数据传递给隔离的好方法 如果我希望分
  • GitHub 推送错误 - “git 媒体更新”

    我一直在使用 GitHub for Mac 客户端 两个月来它一直工作得很好 昨天 成功提交和推送后 我的客户端自行关闭然后重新启动 从那时起 我就无法将更改推送到我的在线存储库 在客户端中 我收到消息 git media pre push
  • 在Sikuli拍照的命令是什么

    我正在使用 Sikuli IDE 我想知道截屏的命令是什么 这样我就可以在测试结束时捕获屏幕 像这样的东西 try if bla bla bla print blablabla else TAKESCREENSHOT gt What com
  • 在 stripes actionbean 中绑定隐藏字段时,隐藏字段变为 null

    我有一个条纹操作页面 当页面加载时 我想通过从对象 即 setOriginalAssignee userAction getAssignee 分配原始Assignee 来保存它 这样 如果对象的字段受让人发生更改 我将进行一些计算 这是我的
  • 计算根的父母拥有的百分比

    简而言之 我试图计算树的父级所拥有的树根的百分比 即树的更上层 我怎样才能单独用 SQL 来做到这一点 这是我的 示例 架构 请注意 虽然层次结构本身非常简单 但还有一个附加的holding id 这意味着单亲父母可以 拥有 孩子的不同部分
  • 如何使用 SymPy codegen 生成 Fortran 子例程

    我想使用 SymPy codegen 实用程序生成 Fortran 子例程 我可以毫无问题地生成 Fortran 函数codegen f x y z f95 filename 但我想生成一个 Fortran 子例程 以便可以修改输入数组 我