Python: как можно преобразовать символическое выражение в функцию, чтобы ее можно было численно интегрировать? - PullRequest
0 голосов
/ 28 ноября 2018

Я работал с символическими выражениями в Python и пришел к тому, который я хочу интегрировать через определенный интервал.Выражение содержит pi.

. Беда в том, что мне не удалось выяснить, как преобразовать это выражение в функцию, которую можно ввести в качестве аргумента scipy.integrate.quad.Соответствующие части моего кода следующие:

from sympy import *
import numpy as np
import scipy.integrate as integrate
from sympy.utilities.lambdify import lambdify

# this defines the symbols that
# we will be using in our computations:
x, y, g, y1, a0, a1, a2 = symbols('x y g y1 a0 a1 a2')

# this defines what a0 and a1,
# and what y and y' are:

a0 = 2
a1 = -((2/pi)+(pi*a2))

y = a0+a1*x+a2*x**2
y1 = y.diff(x)   

# this defines the integrand that
# here represents the Lagrangian:

L=sqrt((1+y1**2)/(2*g*y))

# this differentiates the above with
# respect to a2, to define the integrand:

difL = L.diff(a2)

Это difL, который я хочу интегрировать.Я попытался определить его как функцию следующим образом:

def integrand(a2):
    return difL

f = lambdify(x, integrand(a2))

безрезультатно.Итак, мой вопрос: как я могу преобразовать difL в функцию, которая затем может быть интегрирована с использованием scipy.integrate.quad?

И, как заявление об отказе от ответственности, я новичок в Python, поэтому, если я использовалусловия неправильно, дайте мне знать.

1 Ответ

0 голосов
/ 28 ноября 2018

Вам не нужен scipy, sympy вполне способен к численной интеграции.Теперь у вас есть много переменных, которые вы не определяете (например, g), поэтому я создам более простой пример и позволю вам адаптироваться к вашему вопросу.

from sympy import *
from sympy.abc import x, a

# x is variable, a is parameter
y = x**2 + a

# integrate over x from 0 to 1; then evaluate with the value of the parameter
integrate(y, (x, 0, 1)).evalf(subs={a: -4})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...