#python #function #sympy
Вопрос:
Я нашел команду для оценки функции симпатии f (.subs), но, похоже, она не работает.
В частности, я определяю функцию, которая зависит от f, и я хочу оценить ее в своей функции.
Цель этой функции-вычислить гауссову квадратуру с учетом узлов и весов:
def Gauss_Leg(f,weights,nodes,n, P = 'Legendre'):
"""P = Legendre by default,
w = weights,
x = nodes,
n = degree of precision"""
if P == 'Legendre':
measure = 1
a = -1
b = 1
integral = 0
for i in range(n):
integral = f.subs(x, nodes[i]) * weights[i]
print('Intergation boundaries: ', a, b)
print('integral of', f, '*', measure, '= ', integral)
return
x = sym.Symbol('x', real=True)
f = sym.exp(x)
#exact nodes and weights
[nodes,weights] = np.polynomial.legendre.leggauss(n)
Gauss_Leg(f,weights,nodes,5)
Комментарии:
1. В чем ваша ошибка или результат?
2. Число, умноженное на exp(x). Поэтому я попытался напечатать f.subs(x, узлы[i]) в каждом цикле, и он всегда возвращает exp(x): подстановка не происходит.
3. Вы повторно
x
используете в качестве переменной две разные вещи. Вам нужно использовать разные имена переменных.4. @OscarBenjamin Извините, я уже изменил это. Отредактированный.
5. После изменения
np.polynomial.legendre.leggauss(n)
наnp.polynomial.legendre.leggauss(5)
, я не получаю ошибку. Я также не понимаю, зачем вам для этого нужно сочувствие. Вы могли бы просто создать лямбда-функцию Python и оценить ее поnodes[i]
.