2016-04-15 10 views
0

Apache Commons Math libとPolynomialSplineFunction & LinearInterpolator関数を使用して外挿関数を実装しようとしています。外挿OutOfRangeException Apache Commons数学

public double[] linearInterp(double[] x, double[] y, double[] xi) { 
    LinearInterpolator li = new LinearInterpolator(); // or other interpolator 
    PolynomialSplineFunction psf = li.interpolate(x, y); 

    double[] yi = new double[xi.length]; 
    for (int i = 0; i < xi.length; i++) { 
     yi[i] = psf.value(xi[i]); 
    } 
    return yi; 
} 

x = [0, 60, 120,180,240];

y = [196, 232, 250, 157, 300];

xi = [300, 360, 420];

問題は、私は私がOutOfRangeExceptionを得るxの範囲外の値を使用する場合は、このメソッドを使用して推定するためにどのような方法があるということです?このエラーを回避する方法を教えてください。

+0

http://stackoverflow.com/questions/32076041/extrapolation-in-java – whiskeyspider

+0

うまく動作しない可能性があります:https://stackoverflow.com/questions/36655244/extrapolation-using-apache-commons -math-where-x-date 結果にバラツキがなかったのですが、いずれも大きくなったり小さくなったりしました 別の解決方法が必要な入力が多分あったかもしれません。 – Johntk

答えて

1

文書「PolynomialSimlineFunction Doucumentaition」を参照すると、値のメソッド "OutOfRangeException - vがスプライン関数のドメイン外にある(最小のノットポイントよりも小さいか、最大のノットポイントよりも大きい)値を読み取ることができます。

ノットからの補間があなたのfuncitionの近似ではないので、これはかなり合理的です。あなたの試みは単に数学的には意味をなさない。

+0

私は何をしようとしているのか分かりません、私の目標は一般的に達成できないのですか、それともやりたいことですか? wikiページ(私は偉大な参考文献ではない)から、「線形補間の公式は線形補外と同じです」と述べています これを仮定すると、なぜこのようにはできませんか?コメントに掲載されている非常に類似した問題の解決策へのリンクも可能であることを示唆しているでしょうか? 他の解決策は間違っていますか? – Johntk

+0

外挿しようとしている関数が既知の次数の多項式関数であるか、関数の "形"を知っている場合(log、sin、...)、外挿が可能です**ここでの問題は**線形**の補外と、無限大の結び目(基本的に1つの結び目のみ)と線形近似を作ることはできません。 – Nevado

+0

データを外挿することができますか?あなたが正しい方向を指すことができれば、SplineInterpolator、LoessInterpolatorまたはNevilleInterpolatorを使って多分Extrapolateを使うのであれば、何も表示せずにこれに多くの時間を費やしたことは嫌ですね。 私の苦しみから私を救う必要がある場合、私は不本意ながらこの努力から離れます。 – Johntk

関連する問題