发现和避免舍入误差

当数值近似的值,请记住,浮点结果可以是所使用的精度是敏感的。此外,浮点结果倾向于舍入误差。下面的方法可以帮助你识别和避免不正确的结果。

使用符号计算时可能

表演象征性的计算建议因为确切的符号计算不容易舍入误差。例如,标准的数学常数有符号数学工具箱™自己的符号表示:

PI符号(PI)
ANS = 3.1416 ANS = PI

避免数值近似的不必要的使用。甲浮点数近似于常数;它不是常量本身。使用这种近似,可以得到不正确的结果。例如,特殊函数返回的正弦不同的结果符号(PI)和数值近似正弦波PI

希维赛德(SIN(符号(PI)))希维赛德(SIN(PI))
ANS = 1/2 ANS = 1

与精密度提高了执行计算

黎曼假设指出,黎曼ζ函数的所有非平凡零点ζ(ž具有相同的实部ℜ(ž)= 1/2。要找到Zeta函数的零点可能,绘制其绝对值|ζ(1/2 +IY)|。下图显示了Zeta函数的前三个平凡的根|ζ(1/2 +IY)|

SYMSÿfplot(ABS(ζ电(1/2 + I * Y)),[0 30])

使用数字求解vpasolve逼近这个Zeta函数的前三个零:

vpasolve(ζ电(1/2 + I * Y)中,Y,15)vpasolve(ζ电(1/2 + I * Y)中,Y,20)vpasolve(ζ电(1/2 + I * Y)中,Y,25)
ANS = 14.134725141734693790457251983562 ANS = 21.022039638771554992628479593897 ANS = 25.010857580145688763213790992563

现在,考虑相同的功能,但略有增加的实部, ζ 1000000001 20亿 + 一世 ÿ 。据黎曼猜想,这个功能不具有零对任何真正的价值ÿ。如果您使用vpasolve与10个显著十进制数字,解算器发现(不存在的)以下的Zeta函数的零:

旧=数字;数字(10)vpasolve(ζ电(2000000000分之1000000001+ I * Y)中,Y,15)
ANS = 14.13472514

增加的数字显示的数字,结果不正确。该Zeta函数 ζ 1000000001 20亿 + 一世 ÿ 没有任何实际价值为零14 <ÿ<15

数字(15)vpasolve(ζ电(2000000000分之1000000001+ I * Y)中,Y,15)的数字(旧)
ANS = 14.1347251417347 + 0.000000000499989207306345i

对于进一步的计算,恢复数字的默认号码:

数字(旧)

比较符号和数字结果

与半整数指数的贝塞尔函数返回精确的符号表达式。这些近似表达式用浮点数会产生非常不稳定的结果。例如,对于下面的贝塞尔函数的精确符号表达式为:

B = BESSELJ(53/2,符号(PI))
B =(351 * 2 ^(1/2)*(119409675 / PI ^ 4  -  20300 / PI ^ 2  -  315241542000 / PI ^ 6 ... + 445475704038750 / PI ^ 8  -  366812794263762000 / PI ^ 10 + ...182947881139051297500 / PI ^ 12  -  55720697512636766610000 / PI ^ 14 ... + 10174148683695239020903125 / PI ^ 16  -  1060253389142977540073062500 / PI ^ 18 ... + 57306695683177936040949028125 / PI ^ 20  -  1331871030107060331702688875000 / PI ^ 22 ... + 8490677816932509614604641578125 / PI ^ 24+ 1))/ PI ^ 2

VPA近似与10位的精度此表达式:

VPA(B,10)
ANS = -2854.225191

现在,调用带有浮点参数贝塞尔函数。这两个近似之间显著差异表明一个或两个结果不正确:

BESSELJ(53/2,PI)
ANS = 6.9001e-23

增加数字加工精度,从而获得了更准确的近似

VPA(B,50)
ANS = 0.000000000000000000000069001456069172842068862232841396473796597233761161

绘制功能或表达

绘制的结果可以帮助你认识不正确的近似值。例如,下面的贝塞尔函数返回的数字近似值:

B = BESSELJ(53/2,符号(PI));VPA(B,10)
ANS = -2854.225191

绘制此贝塞尔函数的值X周围53/2。该函数曲线表明近似是不正确:

SYMSXfplot(BESSELJ(X,符号(PI)),[26 27])