2011-10-12 18 views
12

Valutare seguente integrale deve essere diverso da zero, e matematica dà correttamente diversa da zero risultatomodo corretto per semplificare risultato solidale in Mathematica dati i vincoli interi

Integrate[ Cos[ (Pi * x)/2 ]^2 * Cos[ (3*Pi*x)/2 ]^2, {x, -1, 1}] 

Tuttavia, tentare una più generale integrale:

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]] 

cede a zero, il che non è assolutamente vero per m = n = 1

mi aspetto un'espressione condizionale. È possibile "raccontare" matematicamente i miei vincoli su me prima che l'integrale sia valutato in modo che gestisca correttamente i casi speciali?

+0

Per m = n = 1 si ottiene la divisione per il funzionamento a zero. Quindi MMA 8 dice che l'integrale non è definito per quanto riguarda il campo reale. Ecco l'integrale '(Sin [(- 1 + m - n) * Pi]/(- 1 + m - n) + (2 * Sin [(m - n) * Pi])/(m - n) + Sin [(1 + m - n) * Pi]/(1 + m - n) + Sin [(m + n) * Pi]/(m + n) + (2 * Sin [(1 + m + n) * Pi])/(1 + m + n) + Sin [(2 + m + n) * Pi]/(2 + m + n))/(4 * Pi) ' – PlatoManiac

+2

L'integrazione non ha intenzione di fare qualsiasi cosa utile con un'ipotesi di integralità di uno o più parametri. Il meglio si può sperare è che lo convertirà internamente in uno di valore reale. In questo modo, almeno il risultato non è probabile che sia zero. Quindi Limite può essere utilizzato per ottenere risultati diversi da zero per i casi di interesse finiti. –

+0

@Daniel È la stessa limitazione (es.utile con un solo parametro) valido per 'GenerateConditions'? –

risposta

11

Mentre sono in ritardo per la festa, nessuno ha dato una soluzione completa, finora.

A volte, vale la pena capire meglio l'integrando prima di integrarlo. Si consideri,

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] ] ] 

che restituisce

(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 

in cui ogni termine ha la forma Cos[q Pi x] con integrale q. Ora, ci sono due casi da considerare quando si integra Cos[q Pi x] su -1 a 1 (dove q è integrale): q == 0 e q != 0.

Caso q = 0: Questo è un caso speciale che Mathematica manca nel risultato generale, in quanto implica un integrando costante. (Mi mancherà spesso, anche, quando lo faccio a mano, quindi Mathematica non è completamente da incolpare.) Quindi, l'integrale è 2, in questo caso.

Strettamente parlando, questo non è vero. Quando ha detto di integrare Cos[ q Pi x ] sopra -1 < x < 1, Mathematica ritorna

2 Sin[ Pi q ]/(Pi q) 

che è 0 tranne quando q == 0. A quel punto, la funzione non è definita in senso stretto, ma è Limit[Sin[x]/x, q -> 0] == 1. Poiché la singolarità a q == 0 è removable, l'integrale è 2 quando q -> 0. Quindi, Mathematica non lo manca, è solo in una forma non immediatamente riconosciuta.

Caso q != 0: Da Cos[Pi x] è periodica di periodo 2, un integrale di Cos[q Pi x] da x == -1 a x == 1 sarà sempre sopra q periodi. In altre parole,

Integrate[ Cos[q Pi x], {x, -1, 1}, 
    Assumptions -> (Element[ q, Integers ] && q != 0) ] == 0 

Presi insieme, ciò significa

Integrate[ Cos[q Pi x], {x, -1, 1}, Assumptions -> Element[ q, Integers ] ] == 
Piecewise[{{ q == 0, 2 }, { 0, q!=0 }}] 

Usando questo, si può integrare la forma espansa dell'integrando via

intef = ef /. Cos[q_ Pi x] :> Piecewise[{{2, q == 0}, {0, q != 0}}] // 
PiecewiseExpand 

che ammette soluzioni non integrali.Per pulire che fino, abbiamo bisogno di ridurre le condizioni solo a quelli che hanno soluzioni integrali, e potremmo anche semplificare come andiamo:

(Piecewise[{#1, 
    LogicalExpand[Reduce[#2 , {m, n}, Integers]] // 
    Simplify[#] &} & @@@ #1, #2] & @@ intef) /. C[1] -> m 

\ begin {Modifica}

Per limitare la confusione , internamente Piecewise ha la struttura

{ { { value, condition } .. }, default } 

Nell'utilizzare Apply (@@), l'elenco condizione è il primo parametro e il valore predefinito è il secondo. Per elaborare questo, ho bisogno di semplificare la condizione per ogni valore, così poi uso la seconda forma breve di Apply (@@@) sulla lista condizione in modo che per ogni valore condizione pair ottengo

{ value, simplified condition } 

La semplificazione il processo utilizza Reduce per limitare le condizioni ai numeri interi, LogicalExpand per aiutare a eliminare la ridondanza e Simplify per limitare il numero di termini. Reduce utilizza internamente il arbitrary constant, C[1], che si pone come C[1] == m, così abbiamo impostato C[1] torna a m a completare la semplificazione

\ end {Modifica}

che dà

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} 
} 

come la soluzione completa.

Un'altra Edit: Tengo a precisare che sia i 1/2 e 1/4 casi comprendono i valori per m e n nel caso 3/4. Sembra che il caso 3/4 possa essere l'intersezione degli altri due e, quindi, la loro somma. (Non ho eseguito il calcolo, ma sospetto fortemente che sia vero). Piecewise valuta le condizioni nell'ordine (credo), quindi non c'è alcuna possibilità di ottenere questo errore.

Modifica, di nuovo: La semplificazione dell'oggetto Piecewise non è efficiente come potrebbe essere. In questione è il posizionamento della regola di sostituzione C[1] -> m. Succede fino a tardi nel processo per Simplify per farne uso. Ma, se viene portato all'interno della LogicalExpand e le assunzioni sono aggiunti Simplify

(Piecewise[{#1, 
    LogicalExpand[Reduce[#2 , {m, n}, Integers] /. C[1] -> m] // 
    Simplify[#, {m, n} \[Element] Integers] &} & @@@ #1, #2] & @@ intef) 

quindi un risultato molto più pulito è produrre

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} 
}] 
+0

Nella tua risposta c'è un sacco di notazioni matematiche speciali e funzioni che dovrò cercare, ma l'idea del tuo approccio è almeno chiara. Risposta ben fatta! –

+0

@PeeterJoot, quali? I soliti sospetti sono ['@@'] (http://reference.wolfram.com/mathematica/ref/Apply.html), ['@@@'] (http: // reference.wolfram.com/mathematica/ref/Apply.html) e [':>'] (http://reference.wolfram.com/mathematica/ref/RuleDelayed.html). Chiunque altro? – rcollyer

+0

più di quanto pensi ... Sono un principiante: # # 1 e tutti sembrano essere usati in modi speciali. Da dove viene C [1]? /. C [1] -> m sembra essere un'operazione di sostituzione dai tuoi commenti, una scorciatoia per la funzione Con []? –

4

Se si interrompe l'intera parte FullSimplify, mathematica fa l'integrazione perfettamente per voi.

Integrate[ 
Cos[(Pi x)/2]^2 Cos[((2 n + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/ 
    2], {x, -1, 1}] 

enter image description here

Per includere la condizione che m e n sono numeri interi, è meglio utilizzare l'opzione Assumptions in Integrate.

Integrate[ 
Cos[(Pi x)/2]^2 Cos[((2 n + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/ 
    2], {x, -1, 1}, Assumptions -> Element[{m, n}, Integers]] 

enter image description here

+0

Ottengo solo zero se valuto il tuo secondo integrale con l'ipotesi. – PlatoManiac

+0

È strano. [Straight off my mma] (http://i.stack.imgur.com/zPvOA.png). Non so se ha qualcosa a che fare con la versione. Io uso la versione 7.0 – abcd

+0

Hai ragione Posso riprodurre il tuo risultato in MMA 7 ma MMA 8 dà solo zero. – PlatoManiac

2

Consente di utilizzare alcune condizioni conclusive circa i due interi m=n||m!=n.

Assuming[{(n \[Element] Integers && m \[Element] Integers && m == n)}, 
Integrate[Cos[(Pi x)/2]^2 Cos[((2 n + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/2], 
{x, -1, 1}]] 

La risposta per questo caso è 1/2. Per l'altro caso è

Assuming[{(n \[Element] Integers && m \[Element] Integers && m != n)}, 
Integrate[ 
Cos[(Pi x)/2]^2 Cos[((2 n + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/ 
2], {x, -1, 1}]] 

e la risposta è 0.

Tuttavia, sono stupito nel vedere che se aggiungiamo queste due condizioni come "uno o l'altro", Mathematica restituisce uno zero dopo l'integrazione. Intendo in caso di quanto segue sto ottenendo solo zero ma non `` 1/2 || 0`.

Assuming[{(n \[Element] Integers && m \[Element] Integers && 
m == n) || (n \[Element] Integers && m \[Element] Integers && 
m != n)}, 
Integrate[ 
Cos[(Pi x)/2]^2 Cos[((2 n + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/ 
2], {x, -1, 1}]] 

proposito possiamo vedere le condizioni esclusivamente dove questo integrale diventa Indeterminate.

res = Integrate[ 
Cos[(Pi x)/2]^2 Cos[((2 n + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/ 
    2], {x, -1, 1}] // Simplify 

L'uscita è qui.

enter image description here

Ora consente di vedere tutte le relazioni m e n può avere per rendere il Integral male!

BadPart = (res*4 Pi); 
[email protected](Solve[(Denominator[#] == 0), m] & /@ 
Table[BadPart[[i]], {i, 1, [email protected]}] /. 
Rule -> Equal) // TableForm 

enter image description here

Quindi questi sono i casi particolari di come Sjoerd menzionati stanno avendo infinite istanze.

BR

+0

Quale risultato ottieni dall'integrazione con {m -> 2, n -> 1}? –

+0

Vedere la mia risposta per quei "casi speciali" risultati –

5

Non sempre zero ...

k = Integrate[ 
     Cos[(Pi x)/2]^2 Cos[((2 (n) + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/ 2], 
     {x, -1, 1}, Assumptions -> Element[{m, n}, Integers]]; 

(*Let's find the zeroes of the denominator *) 

d = Denominator[k]; 
s = Solve[d == 0, {m, n}] 

(*The above integral is indeterminate at those zeroes, so let's compute 
    the integral again there (a Limit[] could also do the work) *) 

denZ = Integrate[ 
      Cos[(Pi x)/2]^2 Cos[((2 (n) + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/ 2] /.s, 
      {x, -1, 1}, Assumptions -> Element[{m, n}, Integers]]; 

(* All possible results are generated with m=1 *) 

denZ /. m -> 1 

(* 
{1/4, 1/2, 1/4, 1/4, 1/2, 1/4} 
*) 

visualizzazione quei casi:

Plot[Cos[(Pi x)/2]^2 Cos[((2 (n) + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/2] 
    /. s /. m -> 1, {x, -1, 1}] 

enter image description here

Confronto con un risultato nullo solidale uno:

Plot[Cos[(Pi x)/2]^2 Cos[((2 (n) + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/ 2] 
    /. {m -> 1, n -> 4}, {x, -1, 1}] 

enter image description here

+0

Si potrebbe utilizzare 'Limit' invece di rifare l'integrale. Vedi [qui] (http://pastebin.com/NxPBgizU). Tuttavia, la cosa interessante da notare è che 'Reduce' non restituisce il risultato giusto, nonostante i documenti dicendo che "Il risultato di ridurre [espr, VAR] descrive esattamente lo stesso insieme matematico come expr sempre." – Simon

+0

@Simon Sto cercando di convincere Mma a realizzare le esclusioni del dominio da solo. Ancora senza fortuna ... –

+0

@Simon E la cosa di Reduce è strana! –

Problemi correlati