gpt4 book ai didi

c# - 曲线拟合具有可变幂的 3D 多项式

转载 作者:太空狗 更新时间:2023-10-29 23:49:00 27 4
gpt4 key购买 nike

我有 3 个数据集。 2 表示多项式本身(我们称它们为 x 和 y),1 表示函数值(它将是 z)。

多项式看起来像这样(假设两个维度的幂都是 3):

z = a00 + a01*x + a02*x^2 + a03*x^3 + a10*y + a11*y*x + a12*y*x^2 ... etc

在准备“a”的近似值时,我需要能够设置每个维度的幂。

我不太了解 CurveFitting 函数如何与 Math.NET Numerics 一起使用,但我已经尝试过 Fit.LinearMultiDim 和 MultipleRegression.QR。我在初始化 Func 委托(delegate)时遇到问题


var zs = new double[]
{
//values here

};

var x = new double[]
{
//values here
};

var y = new double[]
{
//values here. But the amounts are equal
};

var design = Matrix<double>.Build.DenseOfRowArrays(Generate.Map2(x, y,(t, w) =>
{
var list = new List<double>(); //Can i get this working?
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
list.Add(Math.Pow(t, j)*Math.Pow(w, i));
}
}
return list.ToArray();
}));

double[] p = MultipleRegression.QR(design, Vector<double>.Build.Dense(zs)).ToArray();

因此,理想情况下,我需要能够使用某种循环来组合函数,该循环考虑了两个变量的最大幂。

UPD:函数在任何轴上始终大于零

最佳答案

我想我成功了。

代码如下:

    List<Func<double[], double>> ps = new List<Func<double[],double>>();

for (int i = 0; i <= polynomialOrderFirstVal; i++)
{
for (int j = 0; j <= polynomialOrderSecVal; j++)
{
var orderFirst = j;
var orderSecond = i;
ps.Add(d => Math.Pow(d[0], orderFirst) * Math.Pow(d[1],orderSecond));
}
}
var psArr = ps.ToArray();
double[] coefs = Fit.LinearMultiDim(x, y, psArr);

关于c# - 曲线拟合具有可变幂的 3D 多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56237806/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com