2

我知道有几个与插值有关的问题,但我没有找到任何对我有足够帮助的答案,所以我有以下问题。

我有两个点数组。一个跟踪时间(x 轴)和一个跟踪费用(y 轴),我想得到这样的东西:

InterpolatingPolynomial[{{0, 10}, {1, 122}, {2, 3.65}, {3, 56.3}, {4, 12.4}, {5, 0}}, x]

(在返回拟合点的构造多项式的 Mathematica 中)。是否有可能返回由 C# 中func<double,double>的两个double数组构造的?

提前致谢。

4

2 回答 2

1

本文准确描述了您想要的内容。Vandermonde 行列式方法实现起来非常简单,因为它需要计算矩阵的行列式以获得插值多项式的系数。
不过,我建议构建一个具有适当接口的类,因为动态构建Funcs 非常复杂(参见此处的示例)。您可以执行以下操作:

public class CosineInterpolation {
    public CosineInterpolation(double[] x, double[] y) { ... }
    public double Interpolate(double x) { ... }
}
于 2013-01-26T12:40:58.460 回答
1

经过一整天的搜索,我想我自己找到了解决方案。我使用拉格朗日插值法对函数进行插值。Func<double,double>然后可以使用 LINQ 轻松构建A。例如

public Func<doube,double> GetFunction()
{
    LagrangeInterpolation lagInter = new LagrangeInterpolation(xVals, yVals);
    return ( val => lagInter(GetValue(val) );
}

这将返回Func<double,double>对象。(我知道每次都创建一个新对象不是一个好的解决方案,但这只是为了演示目的)

于 2013-01-26T16:22:48.557 回答