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}
}]
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
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. –
@Daniel È la stessa limitazione (es.utile con un solo parametro) valido per 'GenerateConditions'? –