我目前正在尝试将我的一些算法从Mathematica转移到sympy。在这种情况下,我试图找到一种与mathematica软件包相对应的c代码生成器:
允许将符号表达式导出为有效的C代码, 包括矢量值功能。 我一直在搜索sympy文档,但似乎 该codegen仅适用于标量函数。 我需要的是一种将计算有效的向量值函数导出到C的方法。
示例: 假设我有二维向量x和y,并且想要创建一个将二维向量返回的函数:
out=[(x(0)+y(0))^2,x(0)+y(0)+y(1)] //MATLAB convention
应将其导出为如下所示的C函数:
void c_func (double* out, double *x, double *y){
tmp1=x[0]+y[0];
out[0]=tmp1*tmp1; //(x[0]+y[0])^2
out[1]=tmp1+y[1]; //x[0]+y[0]+y[1]
}
但是,到目前为止,我只能导出标量函数。因此,我遇到了以下问题:
您知道吗,这是如何在sympy中实现的 还是您有其他替代解决方案? 在此先感谢!!!!
当前用于标量表达式导出的代码:
from sympy import*
from sympy.utilities.codegen import codegen
x1,x2 = symbols('x1 x2')
x=Matrix([x1,x2])
y1,y2 = symbols('y1 y2')
y=Matrix([y1,y2])
[(c_name, c_code), (h_name, c_header)] = codegen(("f", (x1+y2)**2), "C","myheader")
print(c_code)
[(c_name, c_code), (h_name, c_header)] = codegen(("f", (x1+y1+y2)), "C","")
print(c_code)
给出输出:
******************************************************************************/
#include "myheader.h"
#include <math.h>
double f(double x1, double y2) {
return pow(x1 + y2, 2);
}
******************************************************************************/
#include ".h"
#include <math.h>
double f(double x1, double y1, double y2) {
return x1 + y1 + y2;
}