簡體   English   中英

如何在Apache Commons Math中使用BicubicSplineInterpolator?

[英]How to use BicubicSplineInterpolator in Apache Commons Math?

我有三個數組x,y和value。 對於每個x,y,f(x,y)=值;

我不明白如何使用BicubicSplineInterpolator類。 我需要找到不同的x和y的值

這是指向該類的鏈接http://commons.apache.org/proper/commons-math/javadocs/api-3.3/org/apache/commons/math3/analysis/interpolation/BicubicSplineInterpolator.html

TIA

從文檔開始,BicubicSplineInterpolator()要求數據點形成網格狀圖案。 因此,您應該提供一個x值數組(長度= m)和一個y值數組(長度= m)以及一個函數值矩陣(長度= mxn)。

我同意這些文檔是違反直覺的。 更糟的是,BicubicSplineInterpolator()有問題,請參閱https://issues.apache.org/jira/browse/MATH-1166 ,而應使用BicubicInterpolator,如http://commons.apache.org/proper/commons- math / changes-report.html

插值適用於常規網格(例如3x3網格,並且每個網格點都有一個值)。

您需要定義網格位置。 (在此示例中,我們在x和y維度上都有0、128、256。但是,這些只是數字,您可以在X上使用,例如溫度和濕度在Y上使用不同的范圍。)

然后定義一個在每個網格點具有實際值的矩陣,制作一個插值器,該插值器返回一個插值函數,該函數可以計算任何x,y處的任何值。

    final double[] xValues = new double[] {0,128,256};
    final double[] yValues = new double[] {0,128,256};

    final double[][] fValues = new double[][] {{1, 0, 1},
        {0, 0, 1},
        {0, 0, 1}};

        final BivariateGridInterpolator interpolator = new BicubicInterpolator();
        final BivariateFunction function = interpolator.interpolate(xValues, yValues,fValues);

        for (int y=0;y<255;y++) {
            for (int x=0;x<255;x++) {
                double value=function.value(x,  y);
                // do something with this
            }
        }

暫無
暫無

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

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