Die richtige Verwendung von JSL-DerivatenIch versuche seit einiger Zeit, mit JSL Ableitungen eines Antwortflächenmodells zu erstellen. Das Fehlen von Dokumentation und Forenbeiträgen hier, die nur auf die manuelle Erstellung von Derivaten hinweisen, haben mein Problem nicht gelöst. Ich habe bereits eine Anpassung und die Vorhersageformel wurde in einer Spalte der Datentabelle gespeichert. Ich möchte JSL verwenden, um die symbolische Ableitung der Formel zu erstellen und auf eine andere Spalte anzuwenden. Bisher sind der folgende Code all die verschiedenen Möglichkeiten, die ich versucht habe, dieses Problem ohne Erfolg zu lösen.
// 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);
Und die Ausgabe, die ich erhalte, ist
formula = (-211374703.282551) + 30.8532207444449 * :X;
derivative = 0;
derivative = 0;
derivative = .;
derivative = .;
derivative = .;
derivative = 0;
derivative = .;
derivative = .;
derivative = 0;
derivative = .;
derivative = .;
Normalerweise wird die Formel aus der Spalte extrahiert, die die gespeicherte Vorhersageformel enthält, und in diesem Fall zeigt der Ausdruck die Formel erfolgreich an.
Was fehlt mir hier? Ich dachte, das wäre ein einfacher Prozess.
Vielen Dank für jede Hilfe, die Sie geben können!
AnalytikBetreff: Die richtige Verwendung von JSL-DerivatenVersuchen Sie, Ihrer Formel zusätzlichen Expr hinzuzufügen:
formula = Expr(Expr((-211374703.282551) + 30.8532207444449 * :X1));
Betreff: Die richtige Verwendung von JSL-Derivatenformula = Expr((-211374703.282551) + 30.8532207444449 * :X1);
Show( formula );
// Make derivative
derivative = Derivative(name expr(formula), X1);
show(derivative);
Der Schlüssel besteht darin, zu vermeiden, dass Formeln ausgewertet werden, wenn sie an Derivative übergeben werden. Das Umschließen einer zweiten Ebene von Ausdr erzeugt das gewünschte Verhalten, löst aber tatsächlich die erste Ebene von Ausdr ab, wenn sie an den Aufruf übergeben wird.
Betreff: Die richtige Verwendung von JSL-DerivatenDanke für Ihre Antwort!
Können wir noch einen Schritt weitergehen?
Nehmen wir an, ich habe eine multivariate Funktion und möchte eine Liste von Eingaben durchlaufen, die mir im Voraus bekannt sind, um Ableitungen zu bilden.
Also wäre das Setup stattdessen
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 );
);
Wenn Sie nun versuchen, auf die Variable in dieser Schleife zu verweisen, schlägt die Ableitungsfunktion fehl. Irgendwelche Gedanken?