簡體   English   中英

Java上的插值和導數

[英]Interpolation and derivative on Java

我試圖使一個項目巫婆涉及從原始數據及其導數計算插值。 我有兩個看起來像這樣的數組:

A = { 1, 2, 3, 4, ... , n }
B = { 0.23, 0.43, 0.24, 0.19, ... , n }

我想要一個函數來描述以下數組,所以我正在使用apache-common-math庫來插值將描述函數的多項式,其中:F(A [i])= B [i]。 然后,我希望計算該函數的導數,以便能夠找到極值(max / min)。

由於某種原因,我在派生部分上遇到了麻煩。

目前正在使用:

        DividedDifferenceInterpolator devider = new DividedDifferenceInterpolator();
        PolynomialFunctionNewtonForm polynom = devider.interpolate(xArray,  
        yArray);

現在我有多項式,這是代表我以前的數組的函數。 我應該如何計算其導數..?

謝謝。

您可以通過從牛頓形式多項式中提取系數,從中創建一個PolynomialFunction ,然后使用該函數的derivative方法來獲得derivative 這是一個例子:

double[] x = {0, 1, 2, 3, 4, 5};
double[] y = new double[6];
for (int i = 0; i < 6; i++) {
    y[i] = 1 + 2 * x[i] + 3 * x[i] * x[i];
}
DividedDifferenceInterpolator divider = new DividedDifferenceInterpolator();
PolynomialFunctionNewtonForm polynom = divider.interpolate(x, y);
double[] coefficients = polynom.getCoefficients();
System.out.println(Arrays.toString(coefficients));
PolynomialFunction derivative =
 (PolynomialFunction) new PolynomialFunction(coefficients).derivative();
System.out.println(Arrays.toString(derivative.getCoefficients()));

上面的代碼從多項式y = 1 + 2x + 3x ^ 2生成點。 輸出應為

[1.0, 2.0, 3.0, 0.0, 0.0, 0.0]
[2.0, 6.0]

通過使用拉格朗日多項式而不是使用庫,可以很容易地找到多項式的導數。

您可以編寫一個簡單的函數(來自Apache Commons的UnivariateFunction實現)。 請參閱此頁面上@Krokop的公式。

然后,您可以使用此處提供的通用數學中的查找根的庫,查看頁面上提供的“典型用法”。

我不確定是否有更簡單的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM