Wolfram mathematica 如何在mathematica中创建合理的错误图?

Wolfram mathematica 如何在mathematica中创建合理的错误图?,wolfram-mathematica,Wolfram Mathematica,不知道我想做的是否有意义。我在Mathematica中编写了一些代码,希望有一天能用C++编写。一个我只能以双精度计算的环境(因为我使用的是MS VC++编译器) 我有一个近似函数f的多项式,我想画出误差曲线。多项式的系数已计算到机器精度(如C++中的情况)。但是当我绘制相对误差图时,我只得到了一个数值噪声图。因为多项式是泰勒多项式,所以我认为误差是平滑曲线。我怎样才能得到一个更合理的情节?下面的代码演示了我试图做什么,将Cos函数作为一个测试用例。绘图的结果只是数字噪声 f[x_] = Cos

不知道我想做的是否有意义。我在Mathematica中编写了一些代码,希望有一天能用C++编写。一个我只能以双精度计算的环境(因为我使用的是MS VC++编译器)

我有一个近似函数f的多项式,我想画出误差曲线。多项式的系数已计算到机器精度(如C++中的情况)。但是当我绘制相对误差图时,我只得到了一个数值噪声图。因为多项式是泰勒多项式,所以我认为误差是平滑曲线。我怎样才能得到一个更合理的情节?下面的代码演示了我试图做什么,将Cos函数作为一个测试用例。绘图的结果只是数字噪声

f[x_] = Cos[x]
a[k_] := N[(-1)^k/(2*k)!]
approx[x_] := Sum[a[k]*x^(2*k), {k, 0, 12}]
Plot[approx[x]/f[x] - 1, {x, -Pi, Pi}, WorkingPrecision -> 30]
我可以提高计算系数
a[k]
的精度

a[k_] := N[(-1)^k/(2*k)!,30]
以获得更合理的情节,但这违背了我的原型代码的目的。因为最终我想绘制我在C++中创建的近似值的误差图。在这种环境下,系数只能以双精度计算

我认为这个测试有意义??我希望我的近似值能精确到机器精度,但我如何绘制误差曲线呢


谢谢你的阅读

首先,在包括
Pi/2
-Pi/2
的范围内绘制
approx[x]/Cos[x]-1
只会导致问题,因为
Cos[x]
在这些点变为零。在这些点上,
近似值
非常接近于零,但并不完全如此。此外,
Cos[x]
在除以时被转换为数字零之前,在代数上被计算为零,因此在这些点上可以看到尖峰

第二,在一个比较敏感的地区进行策划时,

Plot[approx[x]/f[x] - 1, {x, 0, 0.5}, WorkingPrecision -> 30, PlotRange -> All]
我明白了

这正是我在接近机器精度时所期望的。每个尖峰大致相当于一个位

最后,如果你想在整个感兴趣的领域内得到一个很好的近似值,我不会使用泰勒展开式,它只适用于展开点附近的一个邻域。相反,我会看一个使用。例如,将切比雪夫级数和泰勒级数取14项,得到

在这里,我绘制了每个系列和
Cos
之间的绝对差值。从左边的图中可以看出,切比雪夫级数的整体性能要比右边的泰勒级数好得多