如何使用SymPy代码生成子程序

麦可

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

Ø。詹森

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

看一下自动包装文档中的matrix-vector示例:http : //docs.sympy.org/latest/modules/utilities/autowrap.htmlAutowrap在后台使用了代码生成器。

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

以下示例代码应为矩阵向量乘积输出一个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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不丢失程序退出代码的情况下使用Test :: More测试perl程序中的子程序?

来自分类Dev

如何运行子程序

来自分类Dev

如何使用传递给当前子程序的参数(用于递归)调用其他子程序?

来自分类Dev

优化sympy生成的代码

来自分类Dev

优化sympy生成的代码

来自分类Dev

如何在另一个子程序中读取特定的代码行?

来自分类Dev

如何使用ssis从子程序包返回到父程序包?

来自分类Dev

如何使用子程序包/通用程序包实例中的类型

来自分类Dev

如何并行运行子程序?

来自分类Dev

SSIS-如何使用程序包部署模型从子程序包设置父变量值

来自分类Dev

如何导入/调用程序包的“子程序包”?

来自分类Dev

如何使用代码打开程序

来自分类Dev

如何使用 serenity 代码生成器生成代码 (.ts)

来自分类Dev

如何使用sympy为x的正弦生成泰勒级数

来自分类Dev

如何使用SymPy编码源生成Fortran子例程

来自分类Dev

子程序调用子程序的异常处理

来自分类Dev

从子程序调用子程序

来自分类Dev

如何通过排除子程序包配置回传?

来自分类Dev

如何在Perl中覆盖子程序,例如`length`?

来自分类Dev

如何确定Oracle软件包中子程序的类型

来自分类Dev

如何处理子程序中的不确定循环?

来自分类Dev

如何在子程序中访问全局变量

来自分类Dev

如何在子程序中更改变量?

来自分类Dev

如何检查子程序之前是否已运行?

来自分类Dev

如何编写子程序来清理字符串

来自分类Dev

我该如何编写超因子程序?

来自分类Dev

找不到文件路径时如何退出子程序?

来自分类Dev

从sympy表达式生成python代码?

来自分类Dev

使用While循环在Shell脚本中调用子程序

Related 相关文章

热门标签

归档