Интеграл внутри суммы выдает ошибку метки индекса

#python #typeerror #sympy

#python #ошибка типа #симпатичный

Вопрос:

Вот что я пробую на основе этой страницы:http://tutorial.math.lamar.edu/Classes/DE/FourierSineSeries.aspx

 from sympy import *
f = Function('f')
B = IndexedBase('B')
x, L = symbols('x L', real=True)
n = Symbol('n', integer=True)
n = Idx(n, (0, oo))
Bn = Indexed('B', n)
m = Symbol('m', integer=True)
expr = sin(m*pi*x/L)
lhs = integrate(f(x)*expr, (x,-L,L))
rhs = Sum(Bn*integrate(expr*sin(n*pi*x/L), (x,-L,L)), n)
  

В последней строке происходит сбой, указывающий, что:

 TypeError: Idx object requires an integer label.
  

Однако объект Idx имеет явно установленную метку integer. Кроме того, выражение as Sum(Bn*sin(n*pi*x/L),n) работает без проблем.

Является ли проблематичным тот факт, что я помещаю интеграл внутри суммы? Или это просто небольшая проблема с синтаксисом?

Комментарии:

1.Я не использовал sympy, но может ли это быть потому, что n обозначает оба объекта Symbol и Idx ? n = Symbol('n', integer=True) n = Idx(n, (0, oo))

Ответ №1:

Проблема заключается в том, что переменная n используется одновременно как Symbol и Idx объект. Следующий код не выдает ошибку. (Хотя я не уверен, служит ли это вашей цели)

 from sympy import *
f = Function('f')
B = IndexedBase('B')
x, L = symbols('x L', real=True)
n = Symbol('n', integer=True)
n_index = Idx(n, (0, oo))
Bn = Indexed('B', n)
m = Symbol('m', integer=True)
expr = sin(m*pi*x/L)
lhs = integrate(f(x)*expr, (x,-L,L))
rhs = Sum(Bn*integrate(expr*sin(n*pi*x/L), (x,-L,L)), n_index)
  

Комментарии:

1. Действительно, я понял, что для подынтегрального выражения требуется символ, а не объект Idx. Результирующее выражение недостаточно упрощено. Исходная ссылка показывает, что результатом суммы должно быть $ B_m L $. Есть ли какой-либо способ, которым я могу это получить? Поскольку цель состоит в том, чтобы иметь возможность символически вычислять $ B_m $.

2. Например, Sum(Bn*integrate(expr*sin(n*pi*x/L), (x,-L,L)), (n,0,10)).subs(m,4).doit() вернет упрощенную сумму.

3. Я пока не смог найти решение. Просто небольшой вопрос: было бы это полезно для решения вашей проблемы? docs.sympy.org/latest/modules/series/fourier.html

4. Идея этого метода fourier_series заключается в том, что вы предоставляете функцию f(x) и получаете обратно разложение Фурье. То, что мне нужно, — это общее представление коэффициентов Фурье ($ B_n $), учитывая, что у меня уже есть разложение Фурье, но я не знаю, из какой функции оно возникло…

5. @user32882 ооо…. Я все еще не уверен, как это упростить. Я пытался simplify , но это тоже не помогло