数字
使用的变化变量精度
描述
例子
提高结果的精确度
默认为MATLAB®使用16位精度。对于更高的精度,使用vpa
.的默认精度vpa
是32位数字。使用将精度提高到32位以上数字
.
找到π
使用vpa
,它使用默认的32位精度。通过使用确认当前精度为32数字
.
Pi32 = vpa(pi)
Pi32 = 3.1415926535897932384626433832795
currentPrecision = digits
currentPrecision = 32
保存的当前值数字
在digitsOld
并将新的精度设置为One hundred.
位数。找到π
使用vpa
.结果有100个数字。
digitsOld =数字(100);Pi100 = vpa(pi)
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);A = vpa(1/3)
A = 0.3333
现在,显示一个
使用20位数字。结果表明,工具箱内部在计算时使用了4位以上的数字一个
.由于舍入错误,以下结果的最后一位数字是不正确的:
数字(20)vpa(a)数字(旧)
Ans = 0.33333333333303016843
隐藏四舍五入错误
隐藏的舍入错误可能导致意想不到的结果。例如,用默认的32位精度和10位精度计算数字1/10:
A = vpa(1/10) old = digits(10);B = vpa(1/10) digits(old)
A = 0.1 b = 0.1
现在,计算差值A - b
.结果不是0:
A - b
Ans = 0.000000000000000000086736173798840354720600815844403
的区别A - b
不等于零,因为工具箱内部增加了10位数字B = 0.1
32位精度。这个过程意味着舍入错误。这个工具箱实际上计算了差值A - b
如下:
B = vpa(B) a - B
B = 0.099999999999999991326382620116 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 Ans = 3.142 Ans = 3.142 Ans = 3.142 - 0.5515*eps
现在,将位数设置为40。的符号近似之间的区别π
变得更引人注目。
数字(40)vpa(r) vpa(f) vpa(d) vpa(e)
Ans = 3.141592653589793238462643383279502884197 Ans = 3.141592653589793115997963468544185161591 Ans = 3.1415926535897931159979634685442 Ans = 3.141592653589793238462643383279502884197 -…0.5515320334261838440111420612813370473538 *每股收益