正确使用 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 函数失败。 有什么想法吗?