正確使用 JSL 導數的方法一段時間以來,我一直在嘗試使用 JSL 創建響應面模型的導數。 此處缺乏文檔和論壇帖子僅指向手動創建衍生產品並沒有解決我的問題。 我已經有了一個擬合,並將預測公式保存到數據表的一列中。 我想做的是使用 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 = .;
通常是從保存預測公式的列中提取公式,在這種情況下,打印輸出確實成功顯示了公式。
我在這裡錯過了什麼? 我認為這將是一個直接的過程。
感謝您提供的任何幫助!
分析回复:使用 JSL 導數的正確方法嘗試在您的公式中添加額外的 Expr:
formula = Expr(Expr((-211374703.282551) + 30.8532207444449 * :X1));
回复:使用 JSL 導數的正確方法formula = Expr((-211374703.282551) + 30.8532207444449 * :X1);
Show( formula );
// Make derivative
derivative = Derivative(name expr(formula), X1);
show(derivative);
關鍵是避免公式在傳遞到 Derivative 時被評估。 包裝第二層 Expr 會創建所需的行為,但當它被傳遞到調用中時,實際上會剝離第一層 Expr。
回复:使用 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 );
);
現在嘗試引用此循環中的變量會導致 Derivative 函數失敗。 有什麼想法嗎?