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.
". Perché "è davvero una bella domanda! Ma come prima soluzione potresti prendere in considerazione 'trapz': ad es. 'trapz (fs (-1000: 1000))' – thewaywewalk
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
@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. –