JSLデリバティブを使用する適切な方法私はしばらくの間、JSLを使用して応答曲面モデルの導関数を作成しようと試みてきました。 デリバティブの手動作成のみを指しているドキュメントとフォーラム投稿の欠如は、私の問題を解決していません。 すでにFitがあり、予測式がデータテーブルの列に保存されています。 私がやりたいのは、JSLを使用して数式の記号導関数を作成し、それを別の列に適用することです。 これまでのところ、次のコードは、私がこの問題を解決しようと試みたすべての異なる方法です。
// 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);
そして、私が得る出力は
formula = (-211374703.282551) + 30.8532207444449 * :X;
derivative = 0;
derivative = 0;
derivative = .;
derivative = .;
derivative = .;
derivative = 0;
derivative = .;
derivative = .;
derivative = 0;
derivative = .;
derivative = .;
通常、数式は保存された予測数式を保持する列から抽出されます。この場合、印刷出力には数式が正常に表示されます。
ここで何が欠けていますか? これは簡単なプロセスだと思いました。
あなたが与えることができるかもしれないどんな助けにも感謝します!
分析Re:JSLデリバティブを使用する適切な方法数式にExprを追加してみてください。
formula = Expr(Expr((-211374703.282551) + 30.8532207444449 * :X1));
Re:JSLデリバティブを使用する適切な方法formula = Expr((-211374703.282551) + 30.8532207444449 * :X1);
Show( formula );
// Make derivative
derivative = Derivative(name expr(formula), X1);
show(derivative);
重要なのは、数式がDerivativeに渡されるときに数式が評価されないようにすることです。 Exprの2番目のレイヤーをラップすると、目的の動作が作成されますが、実際には、Exprの最初のレイヤーが呼び出しに渡されるときに剥がれます。
Re:JSLデリバティブを使用する適切な方法返信してくれてありがとう!
これをさらに一歩進めることはできますか?
多変量関数があり、導関数を作成するために事前に知っている入力のリストをループしたいとします。
したがって、代わりにセットアップは次のようになります
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 );
);
このループで変数を参照しようとすると、微分関数が失敗します。 何かご意見は?