Тройная интегральная функция не работает, если она передана в качестве аргумента командной строки - PullRequest
0 голосов
/ 04 октября 2019

У меня есть веб-сайт, где пользователи могут вводить свои границы интеграции (sys.argv [2-7]) и свою функцию (sys.argv [1]), и эти данные отправляются в функцию PHP, а затем в Pythonна бэкэнде. Мой код на Python использует функцию scipy под названием «integrate.nquad» для численного вычисления тройного интеграла.

Программа работает, если выражение записано явно в аргументе справа от лямбды, но не работает при передаче из аргумента командной строки (sys.argv [1]). Например, если я поменяю код sys.argv [1] с помощью выражения, такого как x * y * z, все будет работать так, как задумано.

Есть ли другой способ структурировать функцию scipy, которая сделаетвсе это работает, или мне нужно изучить совершенно разные методы для этого числового тройного интеграла?

import sys
from scipy import integrate

#numbers passed in from website via PHP function, these are used as the bounds for integration
x_lower = float(sys.argv[2])

x_upper = float(sys.argv[3])

y_lower = float(sys.argv[4])

y_upper = float(sys.argv[5])

z_lower = float(sys.argv[6])

z_upper = float(sys.argv[7])

#sys.argv[1] is the expression that users on the website input and is the function being integrated, an example would be: x*y*z
func = lambda x, y, z: sys.argv[1]


ans, err = (integrate.nquad(func,[[x_lower,x_upper],[y_lower,y_upper],[z_lower,z_upper]]))

print(ans) 
...