<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> Estoy tratando de encontrar el área debajo de una curva de un conjunto de datos determinado. En una publicación anterior encontré algunas secuencias de comandos jsl que ayudan a obtener el área después de usar analizar> modelar> no lineal y luego usar una función Gompertz para obtener la ecuación. El problema es que el código se bloquea cuando intento ejecutarlo después de haber encontrado esa ecuación. A continuación se muestra el código y gracias por cualquier ayuda o sugerencia.
Globos claros ();
xmin = 0;
xmax = 120;
parada = 0.000000001;
pdf = función ({x}, 1.16929740059737 * Exp (-Exp (0.46956698638041 - 0.00339164235623826 * x)));
// parece que {x} es lo que bloquea el programa, pero sin él, esa línea de código tiene errores
intervalos = 1;
último = 0;
nuevo = 0;
flag = 0;
while (flag == 0,
intervalos = intervalos + 1;
incremento = (xmax-xmin) / intervalos;
total = 0;
para (i = 1, i <= intervalos, i ++,
si (i == 1, x = xmin);
si (i> 1, x = x + incremento);
total = total + ((pdf (x)) / 2) * incremento;
);
último = nuevo;
nuevo = total;
diff = abs (último nuevo);
if (diff <= stop, flag = 1);
);
show (intervalos);
show (total);
Su valor de parada es bastante pequeño. Podría considerar subirlo un poco, pero eso realmente depende de cuántos dígitos significativos desea converger. Tambien usar {predeterminado local} en su función para no confundir JMP acerca X . Aquí está mi modificación:
Globos claros () ;
xmin = 0 ;
xmax = 120 ;
detener = 0.000000001 ;
pdf = Función ( { X } , {predeterminado local} ,
1.16929740059737 * Exp ( - Exp ( 0.46956698638041 - 0.00339164235623826 * X ) )
) ;
// parece que {x} es lo que bloquea el programa, pero sin él, esa línea de código tiene errores
intervalos = 1 ;
último = 0 ;
nuevo = 0 ;
bandera = 0 ;
Mientras ( bandera == 0 ,
intervalos = intervalos + 1 ;
incremento = ( xmax - xmin ) / intervalos ;
total = 0 ;
por ( yo = 1 , yo <= intervalos , yo ++,
Si ( yo == 1 , X = xmin ) ;
Si ( yo > 1 , X = X + incremento ) ;
total = total + (( pdf ( X )) / 2 ) * incremento ;
) ;
último = nuevo ;
nuevo = total ;
dif = Abdominales ( último - nuevo ) ;
Si ( dif <= detener , bandera = 1 ) ;
// imprimir (intervalos);
Si ( mod ( intervalos , 1000 ) == 0 ,
impresión ( carbonizarse ( intervalos ) || ":" || carbonizarse ( dif ) || "Total:" || carbonizarse ( total )) ;
)
) ;
Show ( intervalos ) ;
Show ( total ) ;
Los resultados se muestran aquí. Presiono la tecla ESC para detener la ejecución.
"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"