我是 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 值在一个列表中,我想使用它们。如何将它们从列表中取出并放入 double[,] 中?我最后的方法是这样的
List<double> xz = new List<double>();
...
double[,] x = new double[,]{xz.ToArray()};
它似乎必须在一个 double[,] 数组中,因为它对于后面的函数是必需的
alglib.lsfitcreatef(x, y, c, diffstep, out state);
有人可以帮我吗? 或者有人可以推荐一种更简单的非线性拟合方法吗?
提前致谢
最佳答案
这是将值从列表复制到数组的简单方法:
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
期望数组具有相同的等级(即维数)。
关于c# - 列表<double> 到 ALGLIB 的 double[,],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16964964/