2

我一直在研究 Mathematica 中的一个函数,它生成然后改变一组整数,然后找到该组的插值多项​​式。我可以在 C++ 中很好地生成集合,但我不知道如何模拟 Mathematica 的Expand[InterpolatingPolynomial[]]命令。我知道这与多项式插值问题有关,我只是不知道从哪里开始为它编写 C++ 代码。

我已经向 Wolfram 请求了一份 MathCode C++ 的试用版,看看它是否会为我转换它,但我想我宁愿尝试自己解决这个问题,所以谁能指出我正确的方向可以开始这样做吗?

4

2 回答 2

0

您可以使用伪逆计算一种形式的插值多项​​式,这是一个使用 5 阶多项式近似Sin函数的示例:

(* A function to compute {x^5, x^4, x^3, x^2, x, 1} of x *)
f = Function[x, x^# & /@ Reverse@Range[0, 5]]

xvals = Range@5;
yvals = Sin /@ Range@5;

(* Find the polynomial coefficients by solving the matrix equation *)
coeffs = PseudoInverse[f /@ xvals].yvals
poly = {x^5, x^4, x^3, x^2, x, 1}.coeffs

Plot[{Sin[x], poly}, {x, 0, 10}]

数学图形

您可以看到这给出了与函数相同的输出InterpolatingPolynomial

Simplify[InterpolatingPolynomial[Sin /@ Range@6, x] // N]
Plot[{Sin[x], %}, {x, 0, 10}]

数学图形

该技术在构造插值多项式部分中的多项式解释中进行了描述

希望这足以让您构建一个有效的 C++ 版本。

于 2012-07-04T14:46:31.043 回答
0

您可能正在考虑最小二乘拟合。在那里你假设一些函数来描述你的数据,然后计算最小化所有点的均方误差的系数。在 Mathematica 中查找 - 知道您要查找的东西的名称会很有帮助。

插值完全是另一回事。

于 2012-07-04T12:53:37.700 回答