Re: Manera correcta de usar el derivado JSL¡Gracias por la respuesta!
¿Podemos llevar esto un paso más allá?
Digamos que tengo una función multivariada y quiero recorrer una lista de entradas que conozco de antemano para hacer derivadas.
Entonces, en cambio, la configuración sería
formula = Expr((-211374703.282551) + 30.8532207444449 * :MyVar1 - 0.42 * :AnotherVar2);<BR />factors = List(MyVar1, AnotherVar2);
// Clone formula n times into columns
dt << Clone Formula Column(
"Pred Formula",
N Items(factors),
);
For(i = 1, i < N Items(factors), i++,
col = Column( dt, "Pred Formula " || char(eval(i+1)) );
col << Set Name( "doptval d" || factors[i]);
// Get Formula
formula = col << Get Formula;
// Make derivative
derivative = Derivative(name expr(formula), factors[i]);
// Apply derivative to new column
col << Set Formula( derivative );
);
Ahora, tratar de hacer referencia a la variable en este ciclo está causando que la función Derivada falle. ¿Alguna idea?
Re: Manera correcta de usar el derivado JSLformula = Expr((-211374703.282551) + 30.8532207444449 * :X1);
Show( formula );
// Make derivative
derivative = Derivative(name expr(formula), X1);
show(derivative);
La clave es evitar que la fórmula se evalúe cuando se pasa a Derivado. Envolver una segunda capa de Expr crea el comportamiento deseado, pero en realidad quita la primera capa de Expr cuando se pasa a la llamada.
Re: Manera correcta de usar el derivado JSLIntente agregar Expr adicional a su fórmula:
formula = Expr(Expr((-211374703.282551) + 30.8532207444449 * :X1));
Forma correcta de usar el derivado JSLHe estado intentando crear derivados de un modelo de superficie de respuesta con JSL desde hace algún tiempo. La falta de documentación y publicaciones en el foro aquí que solo apuntan a la creación manual de derivados no han resuelto mi problema. Ya tengo un ajuste y la fórmula de predicción se guardó en una columna de la tabla de datos. Lo que me gustaría hacer es usar JSL para crear la derivada simbólica de la fórmula y aplicarla a otra columna. Hasta ahora, el siguiente código son todas las diferentes formas en que he intentado resolver este problema en vano.
// Get Formula
//formula = col << Get Formula;
formula = Expr((-211374703.282551) + 30.8532207444449 * :X1);
Show( formula );
// Make derivative
derivative = Derivative(formula, X1);
Show(derivative);
derivative = Derivative(formula, :X1);
Show(derivative);
derivative = Derivative(formula, "X1");
Show(derivative);
derivative = Derivative(formula, ":X1");
Show(derivative);
derivative = Derivative(formula, Column(:X1));
Show(derivative);
derivative = Derivative(Eval(formula), X1);
Show(derivative);
derivative = Derivative(formula, Eval(X1));
Show(derivative);
derivative = Derivative(Eval(formula), Eval(X1));
Show(derivative);
derivative = Derivative(Expr(formula), X1);
Show(derivative);
derivative = Derivative(formula, Expr(X1));
Show(derivative);
derivative = Derivative(Expr(formula), Expr(X1));
Show(derivative);
Y la salida que obtengo es
formula = (-211374703.282551) + 30.8532207444449 * :X;
derivative = 0;
derivative = 0;
derivative = .;
derivative = .;
derivative = .;
derivative = 0;
derivative = .;
derivative = .;
derivative = 0;
derivative = .;
derivative = .;
Por lo general, la fórmula se extrae de la columna que contiene la fórmula de predicción guardada y, en este caso, la impresión muestra correctamente la fórmula.
¿Que me estoy perdiendo aqui? Pensé que sería un proceso sencillo.
¡Gracias por cualquier ayuda que puedas brindar!
Exploración y visualización de datos