<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> Sto cercando di trovare l'area sotto una curva di un dato set di dati. In un post precedente ho trovato alcuni script jsl che aiutano a ottenere l'area dopo aver usato analizzare> modellazione> non lineare e quindi utilizzando una funzione di Gompertz per ottenere l'equazione. Il problema è che il codice si blocca quando provo a eseguirlo dopo aver trovato l'equazione. Di seguito è riportato il codice e grazie per qualsiasi aiuto o suggerimento
Clear Globals ();
Xmin = 0;
xmax = 120;
interrompere = 0,000000001;
pdf = function ({x}, 1.16929740059737 * Exp (-Exp (0.46956698638041 - 0.00339164235623826 * x)));
// sembra che {x} sia ciò che blocca il programma, ma senza di esso, quella linea di codice ha degli errori
intervalli = 1;
ultimi = 0;
nuovi = 0;
flag = 0;
mentre (bandiera == 0,
Intervalli = intervalli + 1;
incremento = (xmax-xmin) / intervalli;
totale = 0;
per (i = 1, i <= intervalli, i ++,
se (i == 1, x = xmin);
se (i> 1, x = x + incremento);
totale = totale + ((pdf (x)) / 2) * incremento;
);
ultima = new;
nuovo = totale;
diff = abs (ultimo-nuovo);
se (diff <= stop, flag = 1);
);
Show (intervalli);
mostra (totale);
Il tuo valore di stop è piuttosto piccolo. Potresti considerare di aumentarlo un po ', ma in realtà dipende da quante cifre significative vuoi convergere. Usa anche {predefinito locale} nella tua funzione in modo da non confondere JMP X . Ecco la mia modifica:
Chiari Globali () ;
xmin = 0 ;
Xmax = 120 ;
fermare = 0,000000001 ;
PDF = Funzione ( { X } , {predefinito locale} ,
1,16929740059737 * Exp ( - Exp ( ,46956698638041 - ,00339164235623826 * X ) )
) ;
// sembra che {x} sia ciò che blocca il programma, ma senza di esso, quella linea di codice ha degli errori
intervalli = 1 ;
scorso = 0 ;
nuovo = 0 ;
bandiera = 0 ;
Mentre ( bandiera == 0 ,
intervalli = intervalli + 1 ;
incremento = ( Xmax - xmin ) / intervalli ;
totale = 0 ;
Per ( io = 1 , io <= intervalli , io ++,
Se ( io == 1 , X = xmin ) ;
Se ( io > 1 , X = X + incremento ) ;
totale = totale + (( PDF ( X )) / 2 ) * incremento ;
) ;
scorso = nuovo ;
nuovo = totale ;
diff = Addominali ( scorso - nuovo ) ;
Se ( diff <= fermare , bandiera = 1 ) ;
// stampa (intervalli);
Se ( mod ( intervalli , 1000 ) == 0 ,
stampare ( carbonizzare ( intervalli ) || ":" || carbonizzare ( diff ) || " Totale: " || carbonizzare ( totale )) ;
)
) ;
Mostrare ( intervalli ) ;
Mostrare ( totale ) ;
I risultati sono mostrati qui. Ho premuto il tasto ESC per interrompere l'esecuzione.
"1000: 0,0000050154411717074 Totale: 19,0754942945052"
"2000: 0,0000012532594197978 Totale: 19,0779995336205"
"3000: 0.0000005569154488683 Totale: 19.0788346249656"
"4000: 0,0000003132397878858 Totale: 19,0792521728205"
"5000: 0,0000002004643206988 Totale: 19,0795027022319"
"6000: 0.0000001392066906192 Totale: 19.0796697221303"
"7000: 0,0000001022719047228 Totale: 19,0797890222006"
"8000: 0,0000000783009035388 Totale: 19,0798784973311"
"9000: 0,0000000618661744056 Totale: 19.0799480891457"
"10000: 0,0000000501117192186 Totale: 19,0800037626261"
"11000: 0,0000000414136884785 Totale: 19,0800493136749"