找到一组整数的多项式

时间:2012-07-04 12:51:16

标签: c++ wolfram-mathematica integer porting polynomial-math

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

我已经请求Wolfram的MathCode C ++试用版,看看是否会为我转换它,但我想我宁愿尝试自己做这个,所以任何人都可以指出我的权利如何开始这样做?

2 个答案:

答案 0 :(得分:0)

你可能会想到最小二乘拟合。这就是你假设某些功能来描述你的数据,然后计算最小化所有点上的均方误差的系数。在Mathematica中查看 - 了解您正在寻找的东西的名称有很多帮助。

插值完全是另一回事。

答案 1 :(得分:0)

您可以使用伪逆计算一种形式的插值多项​​式,这里是一个使用5 {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}]
  

Mathematica graphics

您可以看到它提供与InterpolatingPolynomial函数相同的输出:

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

Mathematica graphics

此处描述的技术Polynomial Interpretation构造插值多项式

部分中

希望这应该足以构建一个可用的C ++版本。