2015-09-14 22 views
5

Creo due funzioni fx e fy come segue:strano comportamento in funzione integrale in MATLAB

fx = @(x) ncx2pdf(x, 10, 1); 
fy = @(y) ncx2pdf(y + 25, 10, 10); 

Poi, definisco funzione fs come segue:

shift = 0 
fs = @(s) fx(s) .* fy(shift - s) 

noti che fs è sempre positiva (prodotto di due funzioni di densità di probabilità). Se computo:

integral(fs, -Inf, 100) 

ho ottenere il vero valore 0,0413, ma se computo

integral(fs, -Inf, 1000) 

ottengo 0. Perché questo strano comportamento si verifica utilizzando funzione integrale? Si noti che se computo

integral(fs, -Inf, Inf) 

ottengo il valore vero 0.0413.

+1

". Perché "è davvero una bella domanda! Ma come prima soluzione potresti prendere in considerazione 'trapz': ad es. 'trapz (fs (-1000: 1000))' – thewaywewalk

+1

Credo che l'errore (restituendo 0) provenga dal tentativo di rappresentare un valore inferiore a un 'double' è in grado di contenere. Il valore minimo è nell'ordine di 'Xe-308' per documentazione Matlab. Sono stato in grado di produrre 1.9e-323 prima che tutto tornassi a 0. – Matt

+1

@Matt è probabilmente sulla buona strada. Devi stare attento all'integrazione numerica delle funzioni con valori piccoli. L'ho visto anche in altre lingue. Quindi per verificare, calcolare il valore di una "fetta" della funzione di integrazione numerica e vedere qual è il suo valore. –

risposta

-1

"La quadratura numerica funziona dividendo iterativamente l'intervallo e approssimando l'integrale di ciascuna partizione.L'approssimazione viene effettuata discretizzando i sottointervalli e usando una qualche forma di approssimazione integrale (somme di Riemann ecc.) Dal momento che c'è una discretizzazione, ci sarà qualche errore e questo dipende dalla partizione, quindi siamo meglio per mantenere i nostri limiti di integrazione più vicino ai punti che contribuiranno maggiormente alla integrale "Brendan Hamm

Rif: http://www.mathworks.com/matlabcentral/answers/242910-strange-behaviour-in-integral-function-in-matlab#answer_192302