<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> Ich versuche, den Bereich unter einer Kurve eines bestimmten Datensatzes zu finden. In einem früheren Posting habe ich ein jsl-Skript gefunden, das hilft, den Bereich nach der Verwendung von analyse> Modellierung> nicht linear zu erhalten und dann eine Gompertz-Funktion zu verwenden, um die Gleichung zu erhalten. Das Problem ist, dass der Code abstürzt, wenn ich versuche, ihn auszuführen, nachdem ich die Gleichung gefunden habe. Nachfolgend finden Sie den Code und vielen Dank für Ihre Hilfe oder Anregungen
Globale löschen ();
xmin = 0;
xmax = 120;
Stop = 0,000000001;
pdf = Funktion ({x}, 1,16929740059737 * Exp (-Exp (0,46956698638041 - 0,00339164235623826 * x));
// Es scheint, dass {x} das Programm zum Absturz bringt, aber ohne sie enthält diese Codezeile Fehler
Intervalle = 1;
last = 0;
neu = 0;
Flag = 0;
while (flag == 0,
Intervalle = Intervalle + 1;
Inkrement = (xmax-xmin) / Intervalle;
total = 0;
für (i = 1, i <= Intervalle, i ++,
wenn (i = 1, x = xmin);
wenn (i> 1, x = x + Inkrement);
total = total + ((pdf (x)) / 2) * Inkrement;
);
last = neu;
neu = gesamt;
diff = abs (last-new);
if (diff <= stop, flag = 1);
);
anzeigen (Intervalle);
show (total);
Ihr Stoppwert ist ziemlich klein. Sie können es in Erwägung ziehen, es etwas anzuheben, aber das hängt wirklich davon ab, mit wie vielen signifikanten Stellen Sie konvergieren möchten. Auch verwenden {default local} in Ihrer Funktion, um JMP nicht zu verwirren x . Hier ist meine Modifikation:
Globale löschen () ;
xmin = 0 ;
xmax = 120 ;
halt = 0,000000001 ;
pdf = Funktion ( { x } . {default local} .
1.16929740059737 * Exp ( - Exp ( 0,46956698638041 - 0,00339164235623826 * x ) )
) ;
// Es scheint, dass {x} das Programm zum Absturz bringt, aber ohne sie enthält diese Codezeile Fehler
Intervalle = 1 ;
zuletzt = 0 ;
Neu = 0 ;
Flagge = 0 ;
Während ( Flagge == 0 .
Intervalle = Intervalle + 1 ;
Zuwachs = ( xmax - xmin ) / Intervalle ;
gesamt = 0 ;
Zum ( ich = 1 . ich <= Intervalle . ich ++
Ob ( ich == 1 . x = xmin ) ;
Ob ( ich > 1 . x = x + Zuwachs ) ;
gesamt = gesamt + (( pdf ( x )) / 2 ) * Zuwachs ;
) ;
zuletzt = Neu ;
Neu = gesamt ;
diff = Abs ( zuletzt - Neu ) ;
Ob ( diff <= halt . Flagge = 1 ) ;
// drucken (Intervalle);
ob ( mod ( Intervalle . 1000 ) == 0 .
drucken ( verkohlen ( Intervalle ) || ":" || verkohlen ( diff ) || "Gesamt:" || verkohlen ( gesamt )) ;
)
) ;
Show ( Intervalle ) ;
Show ( gesamt ) ;
Ergebnisse werden hier angezeigt. Ich drücke die ESC-Taste, um die Ausführung zu stoppen.
1000: 0,0000050154411717074 Gesamt: 19.0754942945052
2000: 0,0000012532594197978 Gesamt: 19.0779995336205
3000: 0,0000005569154488683 Gesamt: 19.0788346249656
4000: 0,0000003132397878858 Gesamt: 19.0792521728205
5000: 0,0000004243206988 Gesamt: 19.0795027022319
6000: 0,0000001392066906192 Gesamt: 19.0796697221303
7000: 0,0000001022719047228 Gesamt: 19.0797890222006
8000: 0,0000000783009035388 Gesamt: 19.0798784973311
9000: 0,0000000618661744056 Gesamt: 19.0799480891457
10000: 0,0000000501117192186 Gesamt: 19.0800037626261
11000: 0,0000000414136884785 Gesamt: 19.0800493136749