c++ - 使用 Boost-Python 计算 python 中定义的函数的导数

标签 c++ python numpy boost-python sympy

我想编写一个 Boost-Python 程序,从用户那里获取一个符号 python 函数,并在我的程序中评估它的导数。

例如,用户提供了一个 python 文件 (Function.py),它定义了一个函数,例如 F = sin(x)*cos(x).

然后我想使用 Sympy 的符号微分能力来访问 F'(x)(F(x) 的导数)。我不想使用数值微分。

有没有一种方法可以使用 Boost-Python 在 C++ 中访问这样的函数 F'(x)。

最佳答案

这里有一些代码可以帮助您入门。

主要.cpp:

#include <boost/python.hpp>
#include <iostream>

using namespace boost::python;

int main(void) {
    Py_Initialize();

    object main_module = import("__main__");
    object main_namespace = main_module.attr("__dict__");

    exec("from __future__ import division\n"
        "from sympy import *\n"
        "x = symbols('x')\n"
        "f = symbols('f', cls=Function)\n"
        "f = cos(x) * sin(x)\n"
        "f1 = lambda u: diff(f).subs(x, u);\n",
        main_namespace);

    exec("result = f1(1.0)", main_namespace);
    double res = extract<double>(main_namespace["result"]);
    std::cout << "Out: " << res << std::endl;

    return 0;
}

编译命令,替换为你的路径和编译器:

$ clang++ -I"/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/Current/Headers/" -L"/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/Current/lib/" -lpython2.7 main.cpp

它可以编译,但现在对我不起作用。希望对您有所帮助。

关于c++ - 使用 Boost-Python 计算 python 中定义的函数的导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14008307/

相关文章:

c++ - 动态转换为非派生对象以调用函数有效吗?

c++ - 如何删除 Grabcut 算法中不需要的空白?

python - 如何在 Python 中打印出字母表的第 n 个字母?

python - 如何在 numpy 中将一个数组除以另一个数组元素?

c++ - long int v. long 的可读性

python - 使用 feedparser 检查 RSS 提要是否有新内容

python - 为什么 Pyinterval 算法会因 numpy.float64 而失败

python numpy 成对编辑距离

python - 从 dtype =object 的列中查找唯一值

c++ - 原型(prototype)模式 C++ 中的智能指针