Bonne façon d'utiliser le dérivé JSLJ'essaie de créer des dérivés d'un modèle de surface de réponse avec JSL depuis un certain temps maintenant. Le manque de documentation et les messages du forum pointant uniquement vers la création manuelle de dérivés n'ont pas résolu mon problème. J'ai déjà un ajustement et la formule de prédiction enregistrée dans une colonne de la table de données. Ce que j'aimerais faire, c'est utiliser JSL pour créer la dérivée symbolique de la formule et l'appliquer à une autre colonne. Jusqu'à présent, le code suivant représente toutes les différentes manières dont j'ai tenté de résoudre ce problème en vain.
// 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);
Et la sortie que j'obtiens est
formula = (-211374703.282551) + 30.8532207444449 * :X;
derivative = 0;
derivative = 0;
derivative = .;
derivative = .;
derivative = .;
derivative = 0;
derivative = .;
derivative = .;
derivative = 0;
derivative = .;
derivative = .;
Généralement, la formule est extraite de la colonne contenant la formule de prédiction enregistrée, et dans ce cas, l'impression affiche avec succès la formule.
Qu'est-ce que j'oublie ici? Je pensais que ce serait un processus simple.
Merci pour l'aide que vous pourriez apporter !
AnalytiqueRe: Bonne façon d'utiliser le dérivé JSLEssayez d'ajouter Expr supplémentaire à votre formule :
formula = Expr(Expr((-211374703.282551) + 30.8532207444449 * :X1));
Re: Bonne façon d'utiliser le dérivé JSLformula = Expr((-211374703.282551) + 30.8532207444449 * :X1);
Show( formula );
// Make derivative
derivative = Derivative(name expr(formula), X1);
show(derivative);
La clé est d'éviter que la formule ne soit évaluée lorsqu'elle est transmise à Derivative. L'encapsulation d'une deuxième couche d'Expr crée le comportement souhaité, mais retire en fait la première couche d'Expr lorsqu'elle est passée dans l'appel.
Re: Bonne façon d'utiliser le dérivé JSLMerci pour la réponse!
Pouvons-nous aller plus loin ?
Disons que j'ai une fonction multivariée et que je veux parcourir une liste d'entrées que je connais à l'avance pour faire des dérivées.
Au lieu de cela, la configuration serait
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 );
);
Maintenant, essayer de référencer la variable dans cette boucle entraîne l'échec de la fonction Dérivée. Des pensées?