列出<double>为ALGLIB加倍[,] </double>

时间:2013-06-06 14:37:08

标签: c# c arrays curve-fitting alglib

我是C#的新手,我想用它来编写一个用于校准AFM悬臂的软件。因此,我需要在一些非线性数据的第一个峰值上安装一个非常难看的函数。 我认为ALGLIB包可能会为此目的派上用场,这似乎相对容易应用。在他们的主页示例中,他们使用X轴数据:

double[,] x = new double[,]{{-1},{-0.8},{-0.6},{-0.4},{-0.2},{0},{0.2},{0.4},{0.6},{0.8},{1.0}};

我在列表中有我的X值,并希望使用它们。如何将它们从列表中删除并进入双[,]?我的最后一种方法是这样的

List<double> xz = new List<double>();
...
double[,] x = new double[,]{xz.ToArray()};

似乎它必须在double [,]数组中,因为它对于以后的函数是必需的

alglib.lsfitcreatef(x, y, c, diffstep, out state);

有人可以帮我吗? 或者有人可以为非线性拟合推荐一种更简单的方法吗?

提前多多感谢

2 个答案:

答案 0 :(得分:1)

以下是将列表中的值复制到数组的简单方法:

List<double> xz = // something
double[,] x = new double[xz.Count, 1];
for (int i = 0; i < xz.Count; i++)
{
    x[i, 0] = xz[i];
}

我找不到比手动复制更好的方法。 ToArray()创建了一种不兼容的类型(double[]),而Array.Copy期望数组具有相同的排名(即维度数)。

答案 1 :(得分:0)

该示例是一个多维数组:http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx

...但它看起来配置得不是很正确。

无论如何,您的列表是一个维度。

因此,等价物是:

List<Double> xz = new List<Double>();
Double[] myDblArray = xz.ToArray();