变精度算法(任意精度算法)
万博1manbetx对不定义数字的字符向量的支持已被删除。相反,首先使用以下命令创建符号数字和变量信谊
和信谊
,然后对它们进行操作。例如,使用VPA((1个+ SQRT(符号(5)))/ 2)
而不是vpa ((1 +√6 (5) / 2”)
。
使用可变精度浮点算法计算符号输入。默认情况下,vpa
计算到32位有效数字的值。
SYMS X P =符号(PI);piVpa = VPA(p)的
piVpa = 3.1415926535897932384626433832795
a =符号(1/3);f = a * sin (2 * p * x);fVpa = vpa (f)
fVpa = 0.33333333333333333333333333333333 * sin (6.283185307179586476925286766559 * x)
用可变精度算法计算向量或矩阵的元素。
V = [x/p a^3];M = [sin(p) cos(p/5);exp (p * x) x /日志(p)];vpa (V) vpa (M)
ans = [0.3183098861837906752674503 *x, 0.03703703703703703703703703703703703703703701718282] ans = [0, 0.8090169943747424102291718282]
你必须包装所有的内部输入vpa
,如exp (vpa (200))
。否则输入将被MATLAB自动转换为双精度®。
vpa
默认情况下,vpa
计算输入到32位有效数字。可以使用。来更改有效数字的数目数字
函数。
近似表达式100001/10001
使用7位有效数字数字
。保存旧值数字
通过返回数字(7)
。的vpa
函数只返回5位有效数字,这意味着其余的数字都是0。
digitsOld =数字(7);y =符号(100001)/ 10001;vpa (y)
ans = 9.9991
使用精度更高的值来检查其余的数字是否为零25
。结果表明,其余数字实际上是一个循环小数。
数字(25)vpa (y)
ANS = 9.999100089991000899910009
另外,覆盖数字
为一个vpa
打电话,通过指定第二个参数改变的精度。
找到π- 100通过指定第二个参数有效数字。
VPA(PI,100)
ans = 3.141592653589793238462643383279502884197169……39937510582097494459230781640628620899862803……4825342117068
恢复原来的精度值digitsOld
进行进一步的计算。
数字(digitsOld)
虽然符号结果是精确的,但它们可能不是一种方便的形式。您可以使用vpa
在数字上近似精确的符号结果。
求一个高次多项式的根解决
。的解决
功能不能象征性地解决高次多项式,并使用表示根根
。
syms x y =解(x^4 - x + 1, x)
y =根(z^4 - z + 1, z, 1)根(z^4 - z + 1, z, 2)根(z^4 - z + 1, z, 3)根(z^4 - z + 1, z, 4)
使用vpa
来计算根的近似值。
yVpa = vpa (y)
yVpa我0.72713608449119683997667565867496 + 0.43001428832971577641651985839602 = 0.72713608449119683997667565867496 - 0.43001428832971577641651985839602 - 0.72713608449119683997667565867496 - 0.93409928946052943963903028710582 - 0.72713608449119683997667565867496 + 0.93409928946052943963903028710582我
vpa
使用保护数字来保持精度的价值数字
函数指定使用的有效数字的最小数目。在内部,vpa
可以使用更多的数字吗数字
指定。这些额外的数字称为保护数字,因为它们可以防止后续计算中的舍入错误。
数值近似1/3
使用四位有效数字。
a = vpa(1/3, 4)
一个= 0.3333
近似的结果一个
使用20位。结果表明,工具箱计算当在内部使用多于四个数字一个
。由于舍入错误,结果中的最后一位数字是不正确的。
vpa (20)
ans = 0.33333333333303016843
隐藏的舍入错误可能会导致意外的结果。
评估1/10
使用默认的32位精度,然后使用10位精度。
a = vpa(1/10, 32) b = vpa(1/10, 10)
a = 0。1 b = 0。1
从表面上看,一个
和b
是平等的。通过查找来检查它们是否相等a - b
。
a - b
ans = 0.000000000000000000086736173798840354720600815844403
这个差值不等于0,因为b
与只计算10
精度的数字,其包含的舍入误差大于一个
。当你发现a - b
,vpa
接近b
与32位。证明这种行为。
a - vpa(b, 32)
ans = 0.000000000000000000086736173798840354720600815844403
vpa
恢复普通双精度输入的精度与精确的符号值不同,双精度值内在地包含舍入错误。当你打电话vpa
在双精度输入,vpa
无法恢复丢失的精度,即使它返回的位数比双精度值多。然而,vpa
能否识别和恢复表达式的精度p/问,pπ/问,(p/问)1/2,2问,10问,在那里p和问是普通整数。
首先,证明vpa
无法为双精度输入恢复精度。调用vpa
对于双精度结果和相同的符号结果。
dp =日志(3);s =日志(信谊(3));dpVpa = vpa(dp) sVpa = vpa(s) d = sVpa - dpVpa
dpVpa = 1.0986122886681095600636126619065 sVpa = 1.09861228866810969139552369225 d = 0.00000000000000013133163257501600766255995767652
正如预期的那样,双精度结果与16的精确结果不同th小数位。
证明vpa
恢复窗体表达式的精度p/问,pπ/问,(p/问)1/2,2问,10问,在那里p和问是大小适中的整数,通过查找vpa
调用双精度结果和精确的符号结果。的差异是0.0
显示,vpa
在双精度输入中恢复丢失的精度。
vpa (1/3)——vpa(1 /信谊(3))vpa(π)——vpa(信谊(π))vpa (1 /√(2))——vpa(1 /√(信谊(2)))vpa (2 ^ 66)——vpa(2 ^符号(66))vpa (10 ^ 25)——vpa(10 ^符号(25)
0.0 ans = 0.0 ans = 0.0 ans = 0.0 ans = 0.0 ans = 0.0 ans = 0.0 ans = 0.0 ans
vpa
不将指数中的分数转换为浮点数。例如,vpa(^符号(2/5))
返回^ (2/5)
。
vpa
使用的位数比指定的位数多数字
。这些额外的数字防止后续计算中的舍入错误,称为保护数字。
当你打电话vpa
对数值输入,如1/3
,2 ^ (5)
,或罪(π/ 4)
时,数值表达式将计算为包含舍入错误的双精度数字。然后,vpa
在双精度数字上调用。若要得到精确的结果,请将数值表达式转换为符号表达式信谊
。例如,近似实验(1)
, 采用vpa (exp(信谊(1)))
。
如果第二个参数d
不是整数,vpa
四舍五入到最接近的整数回合
。
vpa
恢复与表单匹配的数字输入的精度p/问,pπ/问,(p/问)1/2,2问,10问,在那里p和问是普通整数。
使用可变精度算术四舍五入的原子操作。
变精度算法与IEEE浮点标准754之间的区别是
里面的计算,被零除抛出一个错误。
指数范围大于任何预定义的IEEE模式。vpa
下溢下面大约10 ^( - 323228496)
。
未实现非正态化的数字。
0是没有符号的。
的数量二进制在可变精度算法和IEEE预定义类型之间,结果尾数中的数字可能不同。
只有一个南
表示。安静和信号之间没有区别南
。
没有浮点数异常可用。