ALGLIB を使用して C# でスプライン補間を行う次のコードがあります。
void interpolateData() // Spline 1D convcubic
{
int anzNeueWerte = Convert.ToInt32(
Interaction.InputBox("Enter the new number of x-values:"
", x.Length / 2 + "", 500, 500));
double[] xNeu = new double[anzNeueWerte]; double[] yNeu;
double tempXNeu = 0;
for(int i = 0; i < xNeu.Length; i ++)
{
xNeu[i] = tempXNeu
tempXNeu += ((double) x.Length / anzNeueWerte);
}
alglib.spline1dconvcubic(x, y, xNeu, out yNeu);
for(int i = 0; i < y.Length; i ++)
{
vorher.Add(new PointPair(x[i], y[i]));
Debug.WriteLine("Vorher:" + vorher.ElementAt(i).ToString());
}
for(int i = 0; i < yNeu.Length; i ++)
{
nachher.Add(new PointPair(xNeu[i], yNeu[i]));
Debug.WriteLine("Nachher:" + nachher.ElementAt(i).ToString());
}
CreateGraph();
}
入力値が誤って読み取られた場合に備えて、入力値を既に確認しましたが、正しい値です。うまくいかないのはalglib.spline1dconvcubic(..)の行だけです。計算がうまくいかないのか、それとも小数点が何らかの理由で非常に異なる場所にあるように書いているだけなのかはわかりません。
変数anzNeueWerte (ドイツ語) は、データセットの新しい x 値の数を決定します。変数xNeuとyNeuは、新しい x 値と y 値を含む double 配列です。
最後の行であるCreateGraph()は、ZedGraph グラフを描画するためのメソッドを呼び出しているだけなので、問題はこの行にも呼び出されたメソッドにもありません。
先週はすでに動作していましたが、それ以来何も変更していないことはほぼ確実です。
どんな助けでも感謝します。
前もって感謝します。
編集: y 値は 0 ~ 8000 の範囲である必要がありますが、ゼロを少し超えてから約 -320.000.000.000.000 になります。
PS:この質問をトピック外、重複、またはその他のものとしてマークしないでください。このライブラリについて見つけた質問には、私の問題に役立つものは何も含まれていません。