gpt4 book ai didi

wolfram-mathematica - 如何在数学中创建合理的错误图?

转载 作者:行者123 更新时间:2023-12-05 00:35:22 28 4
gpt4 key购买 nike

不确定我正在尝试做的事情是否有意义。我正在用mathematica 对一些代码进行原型(prototype)设计,有一天我希望用C++ 编写。我只能以 double 计算的环境(因为我使用的是 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]

获得更明智的情节,但这违背了我的原型(prototype)代码的目的。因为最终我想绘制我在 C++ 中创建的近似值的误差图。在那种环境下,系数只会以 double 计算。

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

谢谢阅读。

最佳答案

首先,绘制approx[x]/Cos[x] - 1在包含 Pi/2 的范围内或 -Pi/2只会导致 Cos[x] 的问题在这些点上归零。在这些时候,approx几乎为零,但并非完全如此。另外,Cos[x]在除法时被转换为数字零之前,被代数评估为零,因此您会在这些点看到尖峰。

其次,在绘制更合理的区域时,

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

我明白了

enter image description here

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

最后,如果您想在整个感兴趣的域中得到一个很好的近似值,我不会使用泰勒展开,它只在展开点附近的邻域中是好的。相反,我会查看 min-max approximation使用 Chebyshev polynomials .例如,将切比雪夫级数和泰勒级数取 14 项给出

enter image description here

我正在绘制每个系列和 Cos 之间的绝对差异.从左边的图中可以看出,切比雪夫级数的整体表现比右边的泰勒级数要好得多。

关于wolfram-mathematica - 如何在数学中创建合理的错误图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492273/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com