Betreff: Richtige Verwendung von JSL-DerivatenDanke für Ihre Antwort!
Können wir noch einen Schritt weiter gehen?
Angenommen, ich habe eine multivariate Funktion und möchte eine Liste von Eingaben durchlaufen, die ich im Voraus kenne, um Ableitungen zu erstellen.
Also wäre stattdessen das Setup
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 );
);
Jetzt führt der Versuch, auf die Variable in dieser Schleife zu verweisen, dazu, dass die Ableitungsfunktion fehlschlägt. Irgendwelche Gedanken?
Betreff: 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 ist, zu vermeiden, dass die Formel ausgewertet wird, wenn sie an Derivative übergeben wird. Das Umschließen einer zweiten Ebene von Expr erzeugt das gewünschte Verhalten, schält aber tatsächlich die erste Ebene von Expr ab, wenn sie an den Aufruf übergeben wird.
Betreff: Richtige Verwendung von JSL-DerivatenVersuchen Sie, Ihrer Formel zusätzlichen Ausdruck hinzuzufügen:
formula = Expr(Expr((-211374703.282551) + 30.8532207444449 * :X1));
Richtige Verwendung von JSL-DerivatenIch versuche schon seit einiger Zeit, Ableitungen eines Antwortoberflächenmodells mit JSL zu erstellen. Der Mangel an Dokumentation und Forumbeiträgen, die nur auf die manuelle Erstellung von Derivaten hinweisen, haben mein Problem nicht gelöst. Ich habe bereits eine Anpassung und die Vorhersageformel in einer Spalte der Datentabelle gespeichert. Ich möchte JSL verwenden, um die symbolische Ableitung der Formel zu erstellen und sie auf eine andere Spalte anzuwenden. Der folgende Code zeigt bisher alle verschiedenen Möglichkeiten auf, mit denen ich versucht habe, dieses Problem zu lösen, ohne Erfolg.
// 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 bekomme, 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 wird die Formel erfolgreich auf dem Ausdruck angezeigt.
Was fehlt mir hier? Ich dachte, das wäre ein unkomplizierter Prozess.
Vielen Dank für jede Hilfe, die Sie leisten können!
Datenexploration und -visualisierung