使用可变精度
默认情况下,MATLAB®使用16位精度。如果需要更高的精度,请使用vpa
。的默认精度vpa
是32位。增加精度超过32位数字使用数字
。
找到π
使用vpa
,它使用默认的32位精度。通过使用,确认当前精度为32数字
。
pi32 = vpa(π)
pi32 = 3.1415926535897932384626433832795
currentPrecision =数字
currentPrecision = 32
保存当前值数字
在digitsOld
并将新的精度设置为One hundred.
位数。找到π
使用vpa
。结果是100位。
digitsOld =数字(100);pi100 = vpa(π)
pi100 = 3.1415926535897932384626433832795028841971693993751058209……74944592307816406286208998628034825342117068
vpa
输出是象征性的。若要使用不接受符号值的MATLAB函数进行符号输出,请使用以下方法将符号值转换为双精度双
。
最后,恢复旧价值数字
进行进一步的计算。
数字(digitsOld)
有关更多信息,请参见提高数值计算的精度。
通过使用MATLAB提高计算速度vpa
精确度较低。设置较低的精度使用数字
。
首先,找出在大输入上执行操作所花费的时间。
输入= 1:0.01:500;抽搐泽塔(输入);toc
运行时间为48.968983秒。
现在,重复操作,以一个较低的精度使用vpa
。将精度降低到10
数字用数字
。然后,用vpa
降低…的精确度输入
并执行相同的操作。花费的时间显著减少。
digitsOld =数字(10);vpaInput = vpa(输入);抽搐泽塔(vpaInput);toc
运行时间为31.450342秒。
vpa
输出是象征性的。若要使用不接受符号值的MATLAB函数进行符号输出,请使用以下方法将符号值转换为双精度双
。
最后,恢复旧价值数字
进行进一步的计算。
数字(digitsOld)
有关更多信息,请参见通过降低精度来提高速度。
属性指定的位数vpa
函数或数字
函数是保证的位数。在内部,工具箱可以使用比您指定的多几个数字。这些额外的数字被称为保护数字。例如,设置数字数为4,然后用4个数字显示1/3的浮点近似值:
老=数字(4);一个= vpa (1/3)
一个= 0.3333
现在,显示一个
使用20位数。结果表明,该工具箱在计算时内部使用的数字超过4位一个
。由于四舍五入误差,以下结果的最后几位不正确:
数字(20)vpa (a)数字(旧)
ans = 0.33333333333303016843
隐藏的舍入错误会导致意想不到的结果。例如,以默认的32位精度和10位精度计算数字1/10:
a = vpa(1/10) old =数字(10)b = vpa(1/10)位数(old)
a = 0.1 b = 0.1
现在,计算它们的差值a - b
。结果不为0:
a - b
ans = 0.000000000000000000086736173798840354720600815844403
的区别a - b
不等于零,因为工具箱内部增加了10位数字b = 0.1
32-digit精度。这个过程意味着舍入错误。工具箱实际上计算了差异a - b
如下:
b = vpa(b) a - b
ans = 0.000000000000000000086736173798840354720600815844403
假设您将一个双数字转换为一个符号对象,然后对该对象执行VPA操作。结果可能取决于将浮点数转换为符号对象所使用的转换技术。的信谊
函数允许您通过指定第二个可选参数来选择转换技术,该参数可以是“r”
,“f”
,' d '
,或“e”
。默认值是“r”
。例如,转换常数π= 3.141592653589793……对一个象征性的对象:
r =符号(pi) f =符号(π,f) d =符号(π,' d ') e =符号(π,“e”)
r = pi f = 884279719003555/281474976710656 d = 3.1415926535897931159979634685442 e = pi - (198*eps)/359
虽然工具箱在屏幕上显示的这些数字不同,但它们是合理的近似π
。使用vpa
转换这些合理的近似π
回到浮点值。
将位数设置为4。四种近似中有三种给出了相同的结果。
数字(4)vpa(r) vpa(f) vpa(d) vpa(e)
ans = 3.142 - 0.5515*eps
现在,将位数设置为40。的符号近似之间的区别π
变得更加明显。
数字(40)vpa(r) vpa(f) vpa(d) vpa(e)
ans = 3.141592653589793238463279502884197 ans = 3.1415926535897931159979634685442 ans = 3.14159265358979323846264338279502884197…0.5515320334261838440111420612813370473538 *每股收益