计算以下积分应为非零,并且 mathematica 正确给出非零结果
Integrate[ Cos[ (Pi * x)/2 ]^2 * Cos[ (3*Pi*x)/2 ]^2, {x, -1, 1}]
但是,尝试更一般的积分:
FullSimplify[
Integrate[Cos[(Pi x)/2]^2 Cos[((2 n + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/2],
{x, -1, 1}],
Element[{m, n}, Integers]]
产生零,这对于 m = n = 1 绝对不是真的
我期待一个条件表达式。是否可以在计算积分之前“告诉”mathematica 关于我对 m 和 n 的约束,以便它正确处理特殊情况?
最佳答案
虽然我迟到了,但到目前为止,没有人给出完整的解决方案。
有时,在积分之前更好地了解被积函数是值得的。考虑,
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
.此时,严格意义上的函数是未定义的,但是 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{编辑}
为了限制混淆,内部
Piecewise
有结构{ { { value, condition } .. }, default }
使用中
Apply
( @@
),条件列表是第一个参数,默认是第二个。为了处理这个,我需要简化每个值的条件,所以我使用第二个缩写形式 Apply
( @@@
) 在条件列表中,以便对于每个值条件对我得到{ value, simplified condition }
简化过程使用
Reduce
将条件限制为整数,LogicalExpand
帮助消除冗余,以及 Simplify
来限制条款的数量。 Reduce
内部使用 arbitrary constant , C[1]
,它设置为 C[1] == m
,所以我们设置 C[1]
返回 m
完成简化\end{编辑}
这使
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
的简化object 并不像它应有的那样有效。问题在于替换规则的位置 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}
}]
关于wolfram-mathematica - 给定整数约束在 Mathematica 中简化积分结果的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7743774/