posso fidarmi di questo integrale triplo numerico di Matlab?


15

Persone di scienza computazionale:

Originariamente ho pubblicato questa domanda a Math Stack Exchange e qualcuno ha commentato che potrei ottenere risposte "molto migliori" qui:

Sono alle prime armi con metodi numerici e Matlab. Sto tentando di valutare la seguente somma di due integrali tripli (ovviamente può essere scritta più semplicemente, ma non è ancora possibile valutarla simbolicamente (?)). Ho problemi a far funzionare qui , quindi con riluttanza l'ho diviso in pezzi qui: voglio trovare la somma diLUNTEX

2((1/0.3)-1)2(11/0.31r10r1-r0F1(r0,r1,t)exp(-(0.3)2t24)dtdr0dr1),

e

2((1/0.3)-1)2(11/0.31r1r1-r0r1+r0F2(r0,r1,t)exp(-(0.3)2t24)dtdr0dr1),

dove

F1(r0,r1,t)=t2r03*(0.3)32r13π

e

F2(r0,r1,t)=(0.3)3π3/2(r0+r1-t)4(t2+2t(r0+r1)-3(r1-r0)2)2288(43πr03)(43πr13).

EDIT (2 marzo 2013): Qualcuno ha risposto di aver indotto Mathematica a fare gli integrali in modo simbolico. Ho appena provato a farlo (con versioni semplificate degli integrali) e Mathematica poteva fare solo i due esterni del primo, e si fermò sul secondo. Gradirei un aiuto. Ecco cosa ho fatto .:

Ho provato a valutare

121r20r2-r1r13t2exp(-t2)r23dtdr1dr2
attraverso

Integra [r1 ^ 3 / r2 ^ 3 * t ^ 2 * Exp (-t ^ 2), {t, 0, r2 - r1}, {r1, 1, r2}, {r2, 1, 2}]

e Mathematica ritorna (ho avuto problemi con qui perché il risultato è lungo. L'ho diviso in due equazioni. Se qualcuno conosce un buon modo per mostrarlo, per favore, dimmelo):LUNTEX

12164r22e-1-r22(2e2r2(25+r2(19+2r2(1+r2)))-

e1+r22(32r2(2+r22))+π(11+4r22(9+r22))Erf[1-r2])dr2.

Quindi ho provato a valutare

121r2r2-r1r2+r1...

...exp(-t2)(r1+r2-t)4(t2+2t(r1+r2)-3(r2-r1)2)2r13r23dtdrdr2

utilizzando

Integra [(r1 + r2 - t) ^ 4 * (t ^ 2 + 2 * t * (r1 + r2) - 3 * (r2 - r1) ^ 2) ^ 2 * Exp [-t ^ 2] / r1 ^ 3 / r2 ^ 3, {r2, 1, 2}, {r1, 1, r2}, {t, r2-r1, r2 + r1}]

proprio ora, e Mathematica non ha restituito una risposta dopo circa mezz'ora (ma al momento sto riscontrando problemi con la rete di computer, e potrebbero essere la colpa).

[FINE DEL 2 MARZO MODIFICA]

Ho usato il comando "triplequad" di Matlab, senza opzioni extra. Ho gestito i limiti variabili dell'integrazione mediante le funzioni heaviside, perché non conoscevo nessun altro modo per farlo. Matlab mi ha dato . ,007164820144202

So che Matlab è un buon software, ma ho sentito che i tripli integrali numerici sono difficili da eseguire in modo accurato e che i matematici dovrebbero essere scettici, quindi voglio un modo per verificare l'accuratezza di questa risposta. Gli integrali danno il valore atteso di un certo esperimento (se qualcuno lo desidera, posso modificare questa domanda per descrivere l'esperimento): ho implementato l'esperimento in Matlab usando numeri generati casualmente in modo casuale, un milione di volte, e calcolando la media dei risultati. Ho ripetuto questo processo quattro volte. Ecco i risultati (mi scuso se ho usato la parola "prova" in modo improprio):

Prova 1:,007133292603256

Prova 2:,007120455071989

Prova 3:,007062595022049

Prova 4:,007154940168452

Prova 5:,007215000289130

Sebbene ogni prova abbia utilizzato un milione di campioni, i valori di simulazione concordano solo nella prima cifra significativa. Non sono abbastanza vicini l'uno all'altro per me per determinare se l'integrale triplo numerico è preciso.

Qualcuno può dirmi se posso fidarmi del risultato di "triplequad" qui, e in quali circostanze ci si può fidare in generale?

Un suggerimento che ho ricevuto al Math Stack Exchange è stato quello di provare altri software come Mathematica, Octave, Maple e SciPy. Questo è un buon consiglio? Le persone svolgono effettivamente lavori numerici in Mathematica e Maple? Octave è una specie di clone di Matlab, quindi posso supporre che usi gli stessi algoritmi di integrazione? Non avevo mai sentito parlare di SciPy prima e apprezzerei qualsiasi opinione al riguardo.


AGGIORNAMENTO: Qualcuno del Math Stack Exchange l'ha fatto in Maple e ha ottenuto . Questo è un accordo per tre cifre significative. Questo è un buon segno.,007163085468

Inoltre, apprezzerei i suggerimenti su come inserire espressioni lunghe e multilinea in in Stack Exchange. Puoi usare l'ambiente "allineato" qui? Ci ho provato e non sono riuscito a farlo funzionare.LUNTEX


2
I risultati della simulazione sono perfettamente coerenti con il valore numerico restituito da Matlab: la loro media di è solo errori standard inferiori a quelli restituiti da Matlab. FWIW, Mathematica restituisce . Può anche valutare questi integrali simbolicamente in termini di polinomi e funzioni di errore. - 1,11 0,00716308537 0.00713726-1.11,00716308537...
whuber

@whuber Grazie. Potrei giurare di averlo provato simbolicamente in Maple e Maple non poteva farlo. Proverò di nuovo in Maple e, se non funziona, lo proverò in Mathematica. A proposito, ho fatto un integrale simile in Maple e ho avuto un'enorme risposta simbolica. Sembrava una somma e una differenza di numeri molto grandi il cui totale complessivo era piuttosto piccolo. Ho il sospetto che l'errore di arrotondamento fosse probabilmente nella risposta finale. In un problema come questo, dovresti usare la risposta simbolica o semplicemente fare l'integrale numericamente?
Stefan Smith

Le risposte simboliche hanno il vantaggio di essere combinazioni di funzioni che (spesso) possono essere calcolate in modo efficiente con precisione arbitraria. Di solito, anche, la soluzione simbolica si presta anche a una rapida ricomputazione quando i parametri sono variati. Per questi motivi è spesso utile cercare una soluzione simbolica.
whuber

@whuber: ho provato a fare alcuni integrali essenzialmente equivalenti (cambiando alcune delle costanti e rimuovendo alcune costanti moltiplicative) in Mathematica, e Mathematica poteva fare solo le due integrazioni esterne del primo integrale e sembra essersi bloccata sul secondo. Ho pubblicato il mio codice e i risultati sopra.
Stefan Smith

1
Rielaborazione del 2 marzo: Riducendo simbolicamente l'integrale triplo a un unico integrale (nella prima metà dei tuoi integrali) hai realizzato molto. L'integrando si comporta in modo molto gradevole e può essere integrato numericamente con una precisione estremamente elevata in una frazione di secondo.
whuber

Risposte:


9

Prima di tutto, non è il software (o almeno non dovrebbe essere) a determinare la qualità della soluzione a un problema, è la qualità e l'adeguatezza dell'algoritmo che viene applicato. Dovresti verificare quale algoritmo viene utilizzato da triplequad in Matlab (immagino che utilizzi una quadratura gaussiana adattativa nidificata). E dovresti controllare quali sono le tolleranze richieste (tolleranza assoluta e relativa richiesta). È possibile che, per impostazione predefinita, richieda solo una precisione relativa di . 10-8

La risposta proveniente da Maple è probabilmente fatta da Computer Algebra e forse potrebbe trovare una soluzione chiusa che è stata quindi valutata utilizzando la virgola mobile a precisione doppia. Ciò ha il vantaggio di non approssimare l'integrale con una sommatoria finita (e quindi di introdurre errori di approssimazione), ma il sistema di algebra del computer troverà un'espressione per l'integrale che può quindi essere valutata. Naturalmente, occorre prestare attenzione quando si valuta questa espressione (per arrotondamento).

Se vuoi farlo con SciPy, dovresti anche ricorrere alla quadratura gaussiana adattiva nidificata usando le routine Quadpack sottostanti (Piessens et al.). In Octave avrai lo stesso approccio. E non sarei troppo sorpreso se Matlab usasse anche Quadpack come motore di quadratura (poiché è il riferimento).


@GretVdE: grazie per le informazioni. Ho provato prima a valutare l'integrale simbolicamente e Maple non è riuscito a farlo (quindi era probabilmente impossibile, usando le funzioni standard), quindi ho chiesto a Maple di farlo numericamente. Non so quale algoritmo abbia usato.
Stefan Smith

@StefanSmith: si può scoprire impostando l'InfoLevel a Maple: infolevel[`evalf/int`] := 4. Sei sicuro che Mape non riesca a trovare una soluzione chiusa? L'integrale non sembra essere troppo complicato. Potresti rendere pubblico il tuo foglio di acero da qualche parte?
GertVdE

@StefanSmith: vorrei pubblicare il codice Maple nella domanda sopra.
GertVdE

Al momento non riesco a far funzionare Maple sul mio sistema, ma ho provato integrali equivalenti in Mathematica e Mathematica ha fatto solo i due interni del primo integrale triplo e si è bloccato sul secondo integrale triplo. Si prega di consultare la domanda modificata.
Stefan Smith
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.