2
$\begingroup$

I have Mathematica 11.0.1 in Ubuntu 16.04. My problem is that I have an integral but Mathematica is evaluating it wrong.
Here is the integral:

 Chop[(1/T)*Integrate[Exp[-I*3*ω*t]*(β Cos[ω t]^2) Exp[I*1*ω*t], {t, 0, T}]]

Using basic ideas($\frac{1}{4} e^{-2 i \pi\omega t}+\frac{1}{4} e^{2 i \pi \omega t}+\frac{1}{2}$), it is clear that the integral should be $\beta/4$. But Mathematica gives this result:

0.195312 β  

Ingredients: (i) Choose $T=0.01$, $\omega = 2\pi/T$.

Addendum:
(i) Where am I going wrong?
Why such anomaly is coming?
(I really would like to know this. I think most of the time I know how to use Mathematica but then such wondrous things happen, and then again I am inside a Shutter Island(start again).)

(ii) If I choose $T=0.1$, answer is zero.

(iii) Variables($T$, $\omega$) are need to be declared or defined Globally, as they are required at so many places in my code(this was just an example). If I have to change the value then it has to be done at one place(globally defined), not locally at each defining places(cumbersome).

(iv) Finally, I have this

HB[a_, b_, t_, 
   k_] := {{0, -($q[a, t] + $w[b, t]*Exp[I k a])}, {-($q[a, t] + 
       $w[b, t]*Exp[-I k a]), 0}};
where,  $q[a, t] = a*Cos[ω t]^2, and $w = b

instead of (β Cos[ω t]^2) in the integrand.

(V) *Speed is the only problem in the received answer(thanks a lot for the answer, though), if there is any idea which can be used by optimizing the code and decreasing the computation time, it will be a great help. Instead of 3 and 1 in exponential, I have $i$ and $j$ inside a Table, forming a square matrix, that is where the code received in answer was very slow. *

ParallelTable[AbIntHB[a, b, i, j, k], {i, 0, 21}, {j, 0, 21}];

where AbIntHB[a, b, i, j, k] = Above Integral with HB matrix in between the Exponentials with i->Exp[-I*i*ω*t] and j->Exp[I*j*ω*t] indices.

$\endgroup$
14
  • $\begingroup$ restart your kernel? I get Chop[(1/T)* Integrate[ Exp[-I*3*\[Omega]*t]*(\[Beta] Cos[\[Omega] t]^2) Exp[ I*1*\[Omega]*t], {t, 0, T}] /. {T -> .01, \[Omega] -> 2 Pi /.01}] --> 0.25 beta $\endgroup$
    – grbl
    Commented Feb 6, 2017 at 13:11
  • $\begingroup$ @Feyre It is working but for my program it is necessary to define the variables(T) Globally not locally. Please see the addendum(ii) and (iii), again due to global assigning $\endgroup$
    – L.K.
    Commented Feb 6, 2017 at 13:20
  • $\begingroup$ You need to use rational constants. T = 1/100; \[Omega] = 100 2 Pi; Chop[(1/T) Evaluate[ Integrate[ Exp[-I 3 \[Omega] t]*(\[Beta] Cos[\[Omega] t]^2) Exp[ I \[Omega] t], {t, 0, T}]]]. $\endgroup$
    – Feyre
    Commented Feb 6, 2017 at 13:32
  • $\begingroup$ how 'a' and 'b' are defined? $\endgroup$
    – Stitch
    Commented Feb 6, 2017 at 13:42
  • $\begingroup$ @Stitch just real variables $\endgroup$
    – L.K.
    Commented Feb 6, 2017 at 13:44

1 Answer 1

3
$\begingroup$

T and ω must be either undefined or exact numbers. If they are defined globally and you don't want to change it, you can do the following:

ClearAll[T, ω];
T = 0.01; ω = 2 Pi/T;
Chop[Block[{T = $T, ω = $w}, (1/T)*
    Integrate[
     Exp[-I*3*ω*t]*(β Cos[ω t]^2) Exp[
       I*1*ω*t], {t, 0, T}]] /. {$T -> T, $w -> ω}]

0.25 β

Using your equations:

ClearAll[T, ω];
T = 0.01; ω = 2 Pi/T;
int[a_, b_, t_, k_] :=
 Chop[Block[{T = $T, ω = $w},
    HB = {{0, -(a*Cos[ω t]^2 + 
          b*Exp[I k a])}, {-(a*Cos[ω t]^2 + b*Exp[-I k a]), 0}};
    {{0, -(a*Cos[ω t]^2 + 
         b*Exp[I k a])}, {-(a*Cos[ω t]^2 + b*Exp[-I k a]), 0}};
    (1/T) Integrate[Exp[-I*3*ω*t] HB Exp[I*1*ω*t], {t, 0, T}]] /. {$T -> T, $w -> ω}]

int[-β, 0, t, k]

{{0, 0.25 β}, {0.25 β, 0}}

$\endgroup$
8
  • $\begingroup$ Aah thanks. Please see my edit(addendum). I would like to know the problem, why it happened(if it makes sense to ask this). $\endgroup$
    – L.K.
    Commented Feb 6, 2017 at 13:36
  • $\begingroup$ The issue here is exact calculation vs. numeric approximation. Related here $\endgroup$
    – Stitch
    Commented Feb 6, 2017 at 13:50
  • $\begingroup$ Good one. Is there a way to speed it up. as insteas of 3 and 1 in exponential, I have i and j and it is now very slow(for evaluating all of them). $\endgroup$
    – L.K.
    Commented Feb 6, 2017 at 14:11
  • $\begingroup$ Probably you can optimize the assignment of variables, but the integration takes the most time. Try numeric integration in parallel? $\endgroup$
    – Stitch
    Commented Feb 6, 2017 at 14:28
  • $\begingroup$ Just a last and most essential query, can we use Module instead of Block. Will it still work? $\endgroup$
    – L.K.
    Commented Feb 6, 2017 at 14:34

Not the answer you're looking for? Browse other questions tagged or ask your own question.