在枫树中,我计算了两个余弦函数乘积的(非常简单的)定积分:
restart;
f := n -> (x -> cos(n*x)):
assume(n1::integer);
assume(n2::integer);
int(f(n1)(x)*f(n2)(x),x=0..2*Pi);
它(不幸)返回
0
但Pi
应为n1=n2
。
出人意料地
int(f(n1)(x)*f(n1)(x),x=0..2*Pi);
给出正确的结果。我用错了方法使用枫树还是这个虫子?如果这是一个错误,我该如何避免呢?我将编写一个大型程序,它必须评估许多术语,这些术语都会减少到这种类型的整数相关积分。
答案 0 :(得分:2)
你可能想修改你的期望(或你的假设)来涵盖另一个角落,因为如果n1=n2=0
那么积分应该等于2*Pi
。
restart:
int(cos(0*x)*cos(0*x),x=0..2*Pi);
2 Pi
int(cos(3*x)*cos(-3*x),x=0..2*Pi);
Pi
int(cos(2*x)*cos(2*x),x=0..2*Pi);
Pi
ans1 := int(cos(n1*x)*cos(n2*x),x=0..2*Pi,AllSolutions)
assuming n1::integer, n2::integer;
piecewise(n1 - n2 = 0, Pi, 0) + piecewise(n1 + n2 = 0, Pi, 0)
simplify(ans1) assuming n1::integer, n2::integer, n1=n2, n1=0;
2 Pi
simplify(ans1) assuming n1::integer, n2::integer, n1=n2, n1<>0;
Pi
simplify(ans1) assuming n1::integer, n2::integer, n1<>n2, n1<>-n2;
0
你可能还想在n1
和n2
都是正整数的假设下考虑积分(它有一个更简单的条件结果,甚至可能是你想到的)。
ans2 := int(cos(n1*x)*cos(n2*x),x=0..2*Pi,AllSolutions)
assuming n1::posint, n2::posint;
piecewise(n1 - n2 = 0, Pi, 0)
simplify(ans2) assuming n1=n2;
Pi
simplify(ans2) assuming n1<>n2;
0