Поэтому я запрограммировал на C++ код, который вычисляет производную трех переменных моя функция написана на Python.
Я использую CFFI, однако когда я пытаюсь вставить функцию Python в свой код C++, я получаю сообщение об ошибке:
Код: Выделить всё
from cffi import FFI
import energia as en
# Crear un objeto FFI
ffi = FFI()
# Define la función C++ que deseas usar
ffi.cdef("""
struct DoubleVector {
double *data;
int size;
};
struct TripleDoubleVector {
struct DoubleVector at;
struct DoubleVector av;
struct DoubleVector an;
};
struct TripleDoubleVector primera_deri_py(double (*f)(double, double, double, double), double x1, double x2, double x3, double x4, double h, int n);
long long int factorial(int n);
""")
C_LIBRARY_PATH = "my_library.dll"
C_LIB = ffi.dlopen(C_LIBRARY_PATH)
ms_ff=1
sigma_ff=2.2925620261592128*10**(-10)
ekb_ff=23.34412307095915
lamda_ff=2.0968946920619693
MM=2*1.00784
comp=1
paramsff=[ms_ff,sigma_ff,ekb_ff,lamda_ff,MM]
n=10
h=10**(-7.5)
result2 = C_LIB.primera_deri_py(en.atotswpi, 70, 1, comp, paramsff, h, n)
Я получаю сообщение об ошибке: следующим образом:
Код: Выделить всё
TypeError Traceback (most recent call last)
Cell In\[8\], line 38
36 n=10
37 h=10\*\*(-7.5)
\---\> 38 result2 = C_LIB.primera_deri_py(en.atotswpi(70,1,comp,paramsff), 70, 1, comp, paramsff, h, n)
TypeError: initializer for ctype 'double(\*)(double, double, double, double)' must be a cdata pointer, not numpy.float64
Я пробовал искать учебные пособия в Интернете, но не нашел ничего, что могло бы мне помочь.
Подробнее здесь: https://stackoverflow.com/questions/783 ... -in-python
Мобильная версия