1

我是 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);

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

非常感谢提前

4

2 回答 2

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期望数组具有相同的秩(即维数)。

于 2013-06-06T14:51:15.450 回答
0

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

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

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

因此,等价物是:

List<Double> xz = new List<Double>();
Double[] myDblArray = xz.ToArray();
于 2013-06-06T14:45:57.160 回答