#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
, но это тоже не помогло