Ответ 1
Пока я опаздываю на вечеринку, пока никто не дал полного решения.
Иногда, когда вы интегрируете, лучше понять подынтегральную функцию. Рассмотрим,
ef = TrigReduce[
Cos[(Pi x)/2]^2 Cos[((2 n + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/2]]/.
Cos[a_] :> Cos[ Simplify[a, Element[{m,n}, Integers] ] ]
который возвращает
(2 Cos[(m - n) Pi x] + Cos[(1 + m - n) Pi x] + Cos[(1 - m + n) Pi x] +
Cos[(m + n) Pi x] + 2 Cos[(1 + m + n) Pi x] + Cos[(2 + m + n) Pi x] )/8
где каждый член имеет вид Cos[q Pi x]
с интегралом q
. Теперь при объединении Cos[q Pi x]
от -1 до 1 (где q является целым) рассмотрим два случая: q == 0
и q != 0
.
Случай q = 0
. Это особый случай, когда Mathematica пропускает общий результат, так как подразумевает постоянный подынтеграл. (Я часто пропущу его, также, когда делаю это вручную, поэтому Mathematica не полностью виновата.) Итак, интеграл в этом случае равен 2.
Строго говоря, это неверно. Когда сказано интегрировать Cos[ q Pi x ]
над -1 < x < 1
, Mathematica возвращает
2 Sin[ Pi q ]/( Pi q )
который равен 0
, за исключением случаев, когда q == 0
. В этот момент функция undefined в строгом смысле, но Limit[Sin[x]/x, q -> 0] == 1
. Поскольку особенность в q == 0
removable, интеграл 2
, когда q -> 0
. Итак, Mathematica не пропустит его, это просто форма, которая не сразу распознается.
Случай q != 0
. Поскольку Cos[Pi x]
является периодическим с периодом 2, интеграл от Cos[q Pi x]
от x == -1
до x == 1
всегда будет превышать периоды q
. Другими словами,
Integrate[ Cos[q Pi x], {x, -1, 1},
Assumptions -> (Element[ q, Integers ] && q != 0) ] == 0
Взятый вместе, это означает
Integrate[ Cos[q Pi x], {x, -1, 1}, Assumptions -> Element[ q, Integers ] ] ==
Piecewise[{{ q == 0, 2 }, { 0, q!=0 }}]
Используя это, мы можем интегрировать расширенный вид подынтегрального выражения через
intef = ef /. Cos[q_ Pi x] :> Piecewise[{{2, q == 0}, {0, q != 0}}] //
PiecewiseExpand
которая допускает нецелые решения. Чтобы очистить это, нам нужно уменьшить условия только до тех, которые имеют интегральные решения, и мы могли бы также упростить по мере продвижения:
(Piecewise[{#1,
LogicalExpand[Reduce[#2 , {m, n}, Integers]] //
Simplify[#] &} & @@@ #1, #2] & @@ intef) /. C[1] -> m
\BEGIN {Edit}
Чтобы ограничить путаницу, внутренне Piecewise
имеет структуру
{ { { value, condition } .. }, default }
При использовании Apply
(@@
) список условий является первым параметром, а по умолчанию вторым. Чтобы обработать это, мне нужно упростить условие для каждого значения, поэтому я использую вторую короткую форму Apply
(@@@
) в списке условий, поэтому что для каждой пары value-condition я получаю
{ value, simplified condition }
В процессе упрощения используется Reduce
, чтобы ограничить условия целыми числами, LogicalExpand
, чтобы устранить избыточность, и Simplify
, чтобы ограничить количество терминов. Reduce
внутренне использует произвольную константу, C[1]
, которую он устанавливает как C[1] == m
, поэтому мы устанавливаем C[1]
обратно на m
для завершения упрощения
\конец {Edit}
который дает
Piecewise[{
{3/4, (1 + n == 0 || n == 0) && (1 + m == 0 || m == 0)},
{1/2, Element[m, Integers] &&
(n == m || (1 + m + n == 0 && (m <= -2 || m >= 1)))},
{1/4, (n == 1 + m || (1 + n == m && (m <= -1 || m >= 1)) ||
(m + n == 0 && (m >= 1 || m <= 0)) ||
(2 + m + n == 0 && (m <= -1 || m >= 0))) &&
Element[m, Integers]},
{0, True}
}
как полное решение.
Другое Редактирование. Я должен отметить, что и случаи 1/2, и 1/4 включают значения для m
и n
в случае 3/4. Похоже, что случай 3/4 может быть пересечением двух других и, следовательно, их суммой. (Я не сделал вывод, но я сильно подозреваю, что это правда.) Piecewise
оценивает условия в порядке (я думаю), поэтому нет никаких шансов получить это неверное.
Изменить, снова. Упрощение объекта Piecewise
не так эффективно, как могло бы быть. Речь идет о размещении правила замены C[1] -> m
. Это происходит в конце процесса Simplify
, чтобы использовать его. Но, если он введен внутри LogicalExpand
, и предположения добавляются в Simplify
(Piecewise[{#1,
LogicalExpand[Reduce[#2 , {m, n}, Integers] /. C[1] -> m] //
Simplify[#, {m, n} \[Element] Integers] &} & @@@ #1, #2] & @@ intef)
то более чистый результат дает
Piecewise[{
{3/4, -2 < m < 1 && -2 < n < 1},
{1/2, (1 + m + n == 0 && (m >= 1 || m <= -2)) || m == n},
{1/4, 2 + m + n == 0 || (m == 1 + n && m != 0) || m + n == 0 || 1 + m == n},
{0, True}
}]