我有以下代码在 C# 中使用 ALGLIB 进行样条插值:
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 值的双精度数组。
最后一行CreateGraph()只是调用了绘制 ZedGraph 图表的方法,它应该可以正常工作,所以问题既不在这一行,也不在于它调用的方法。
上周我已经让它工作了,我几乎可以肯定从那以后我没有改变任何东西。
任何帮助表示赞赏。
提前致谢。
编辑: y 值应在 0-8000 的范围内,但从略高于零到大约 -320.000.000.000.000
PS:不要将此问题标记为离题、重复或其他任何问题。我能找到的关于这个库的所有问题都没有对我的问题有用。