<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> J'essaie de trouver l'aire sous la courbe d'un ensemble de données donné. Dans un précédent article, j’ai trouvé un script jsl qui permet d’obtenir la zone après avoir utilisé analyse> modélisation> non linéaire, puis une fonction de Gompertz pour obtenir l’équation. Le problème est que le code se bloque lorsque j'essaie de l'exécuter après avoir trouvé cette équation. Ci-dessous le code et merci pour toute aide ou suggestion
Effacer les globes ();
xmin = 0;
xmax = 120;
stop = 0.000000001;
pdf = fonction ({x}, 1.16929740059737 * Exp (-Exp (0.46956698638041 - 0.00339164235623826 * x)));
// il semble que {x} bloque le programme, mais sans celui-ci, cette ligne de code contient des erreurs
intervalles = 1;
dernier = 0;
nouveau = 0;
drapeau = 0;
while (indicateur == 0,
intervalles = intervalles + 1;
incrément = (xmax-xmin) / intervalles;
total = 0;
pour (i = 1, i <= intervalles, i ++,
si (i == 1, x = xmin);
si (i> 1, x = x + incrément);
total = total + ((pdf (x)) / 2) * incrémentation;
)
dernier = nouveau;
nouveau = total;
diff = abs (dernier-nouveau);
if (diff <= stop, flag = 1);
)
show (intervalles);
montrer (total);
Votre valeur d'arrêt est assez petite. Vous pouvez envisager de le relever un peu, mais cela dépend vraiment du nombre de chiffres significatifs sur lesquels vous souhaitez converger. Utiliser aussi {local par défaut} dans votre fonction afin de ne pas confondre JMP à propos de X . Voici ma modification:
Effacer les globes () ;
xmin = 0 ;
xmax = 120 ;
Arrêtez = 0.000000001 ;
pdf = Une fonction ( { X } , {local par défaut} ,
1.16929740059737 * Exp ( - Exp ( 0.46956698638041 - 0.00339164235623826 * X ) )
) ;
// il semble que {x} bloque le programme, mais sans celui-ci, cette ligne de code contient des erreurs
intervalles = 1 ;
dernier = 0 ;
Nouveau = 0 ;
drapeau = 0 ;
Tandis que ( drapeau == 0 ,
intervalles = intervalles + 1 ;
incrément = ( xmax - xmin ) / intervalles ;
total = 0 ;
Pour ( je = 1 , je <= intervalles , je ++,
Si ( je == 1 , X = xmin ) ;
Si ( je > 1 , X = X + incrément ) ;
total = total + (( pdf ( X )) / 2 ) * incrément ;
) ;
dernier = Nouveau ;
Nouveau = total ;
diff = Abdos ( dernier - Nouveau ) ;
Si ( diff <= Arrêtez , drapeau = 1 ) ;
// print (intervalles);
si ( mod ( intervalles , 1000 ) == 0 ,
impression ( carboniser ( intervalles ) || ":" || carboniser ( diff ) || " Total: " || carboniser ( total )) ;
)
) ;
Spectacle ( intervalles ) ;
Spectacle ( total ) ;
Les résultats sont affichés ici. J'appuie sur la touche ESC pour arrêter l'exécution.
"1000: 0.0000050154411717074 Total: 19.0754942945052"
"2000: 0.0000012532594197978 Total: 19.0779995336205"
"3000: 0.0000005569154488683 Total: 19.0788346249656"
"4000: 0.0000003132397878858 Total: 19.0792521728205"
"5000: 0.0000002004643206988 Total: 19.0795027022319"
"6000: 0.0000001392066906192 Total: 19.0796697221303"
"7000: 0.0000001022719047228 Total: 19.0797890222006"
"8000: 0.0000000783009035388 Total: 19.0798784973311"
"9000: 0,0000000618661744056 Total: 19.0799480891457"
"10000: 0.0000000501117192186 Total: 19.0800037626261"
"11000: 0.0000000414136884785 Total: 19.0800493136749"