我一直在研究Mathematica中的一个函数,它生成然后改变一组整数,然后找到该集合的插值多项式。我可以在C ++中完成集合生成,但我不知道如何模拟Mathematica的Expand[InterpolatingPolynomial[]]
命令。我知道这与多项式插值问题有关,我只是不知道在哪里开始为它编写C ++代码。
我已经请求Wolfram的MathCode C ++试用版,看看是否会为我转换它,但我想我宁愿尝试自己做这个,所以任何人都可以指出我的权利如何开始这样做?
答案 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}]
您可以看到它提供与InterpolatingPolynomial
函数相同的输出:
Simplify[InterpolatingPolynomial[Sin /@ Range@6, x] // N]
Plot[{Sin[x], %}, {x, 0, 10}]
此处描述的技术Polynomial Interpretation在构造插值多项式
部分中希望这应该足以构建一个可用的C ++版本。