2

我正在尝试将 commons-math 库用于一些数值微分任务。我使用我认为可行的 DerivativeStructures 构建了一个非常简单的函数;显然我错了。

public static void main(String[] args) {
    DerivativeStructure x0 = new DerivativeStructure(2, 2, 2.0);
    DerivativeStructure y0 = new DerivativeStructure(2, 2, 4.0);
    DerivativeStructure xi = x0.pow(2);
    DerivativeStructure yi = y0.pow(2);
    DerivativeStructure f = xi.add(yi);

    System.out.println(f.getValue());
    System.out.println(f.getPartialDerivative(1, 0)); // (?)
    System.out.println(f.getPartialDerivative(0, 1)); // (?)
}

我试图在点 (2.0, 4.0) 处获得多元函数 f(x)=x^2+y^2 的一阶和二阶偏导数。因此,我希望 df/dx 为 4.0,df/dy 为 8.0 作为一阶部分。2.0 用于二阶部分。但是,我得到了正确的 f(x,y) 值,而且我什至没有从这个 javadoc 中获得丝毫的想法。我在 stackoverflow 上看到了几个问题,其中有一些关于 commons-math 的不透明文档的评论,但不是关于多元函数的工作示例。单变量我可以解决,但不是这个......

任何提示将不胜感激!

4

1 回答 1

2

在您的代码中,您并没有真正指定 2 个自变量 x0, y0 而只有 1。对于DerivativeStructurex0, y0 实际上被视为函数本身,具体取决于 variables 的隐式向量p。对于每个自变量,您必须为p自变量向量提供不同的索引。你需要做的是:

DerivativeStructure x0 = new DerivativeStructure(2, 2, 0, 2.0);
DerivativeStructure y0 = new DerivativeStructure(2, 2, 1, 4.0);

其中第三个参数 0 和 1 表示p向量中的 2 个不同索引,因此是两个不同的自变量。如果在创建 a 时省略此参数DerivativeStructure,则假定为 0,因此在您的代码中 x0, y0 不是独立的。

延伸阅读

于 2016-12-31T13:54:13.320 回答