SciPy的documentation爲nquad規定,用於集成C函數的形式如何知道由nquad調用的C函數中的維數?
f(int n, double args[n])
where n is the number of extra parameters and args is an array of doubles of the additional parameters.
因此,如何C函數應該知道有多少維正被集成,以使用args正確數量的?
如果我修改一般documentation用於C函數:
#include "stdio.h"
double f(int n, double args[]) {
(void)args;
printf("%i\n", n);
return 0;
}
與
gcc -fPIC -shared func.c -o func.so
編譯和運行這個Python程序:
#!/usr/bin/env python3
import ctypes
from scipy.integrate import nquad
lib = ctypes.CDLL('func.so')
func = lib.f
func.restype = ctypes.c_double
func.argtypes = (ctypes.c_int, ctypes.c_double)
print(nquad(func, [[0, 1]]))
我得到之間的值。 32764和32767在64位fedora 25上的n,而在32位的fedora 25上我得到0.在上面的鏈接中,c函數on不檢查n的值,但使用args [0] ... args [2]所以沒有辦法知道有多少維被集成?
調用nquad有:
print(nquad(func, [[0, 1]], args = [1,2,3]))
反而不會改變被印在64位系統,即便N應該是不同的。我正在使用
gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)
Python 3.5.2
scipy 0.18.0
問題是根據他們的文檔和我的測試,n只告訴數字的額外參數,而不是維數。 – user1226313