私はSymPyの専門家ではありませんが、おそらくこれはあなたを助けることができます:
次のようなPythonメソッドを定義できます。
def f(x):
return sin(x)*cos(x)
以下を使用して、 fの導関数として評価可能な関数f1を作成できます。
from sympy import *
x = symbols('x')
f1 = lambdify(x, diff(f(x)))
この関数f1は、boost::pythonを使用してC++から呼び出すことができます。関数f1のオブジェクトを作成し、()演算子を使用して関数を呼び出し、 extract<>を使用して結果をdoubleに変換できます。
次に例を示します。
namespace py = boost::python;
Py_Initialize();
py::object main_module = py::import("__main__");
py::object main_dict = main_module.attr("__dict__");
py::exec(
"def f(x):\n"
" return sin(x)*cos(x)\n",
main_dict
);
py::exec(
"from sympy import *\n"
"x = symbols('x')\n"
"f1 = lambdify(x, diff(f(x)))\n",
main_dict
);
py::object f1 = main_dict["f1"];
std::cout << py::extract<double>(f1(0.0)) << std::endl;
std::cout << py::extract<double>(f1(1.0)) << std::endl;
return 0;