可变精度算法(任意精度算法)
金宝app对于没有定义多个特征向量的支持已被删除。取而代之的是,首先使用符号数和变量信谊
和信谊
,然后对它们进行操作。例如,使用vpa(1 +√(信谊(5)))/ 2)
而不是vpa((1 +√6(5)/ 2”)
.
用可变精度浮点算法计算符号输入。默认情况下,VPA
计算值,以32个显著数字。
Syms x p = sym(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 = [罪(P)COS(P / 5);EXP(P * X)X /日志(P)];VPA(V)VPA(M)
ANS = [0.31830988618379067153776752674503 * X,0.037037037037037037037037037037037] ANS = [0,0.80901699437494742410229341718282] [EXP(3.1415926535897932384626433832795 * X),0.87356852683023186835397746476334 * X]
请注意
你必须与包裹内的所有输入VPA
,如EXP(VPA(200))
.否则,输入被MATLAB自动转换为双精度®.
VPA
默认情况下,VPA
计算结果输入到32个显著数字。您可以通过改变显著的位数数字
函数。
近似表达式100001/10001
与使用七个显著位数字
.保存的旧值数字
返回的数字(7)
.这VPA
函数只返回5位有效数字,这可能意味着其余的数字都是零。
digitsOld =位(7);Y =符号(100001)/ 10001;VPA(y)的
ans = 9.9991
检查剩下的数字是零通过使用更高的精度值25
.结果表明,剩下的数字实际上是循环小数。
数字(25)VPA(y)的
ans = 9.999100089991000899910009
另外,覆盖数字
为一个VPA
调用时,通过指定第二个参数更改精度。
通过指定第二个参数找到π到100位有效数字。
vpa(π,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
使用四个显著数字。
一个VPA =(1/3,4)
A = 0.3333
近似的结果一个
使用20位数。结果表明,该工具箱在计算时使用了四位以上的数字一个
.在结果的最后一个数字是由于舍入误差不正确的。
VPA(A,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
是平等的。通过求来检查它们的相等性一个 - B
.
一个 - B
ANS = 0.000000000000000000086736173798840354720600815844403
所不同的是不等于零,因为b
仅用10
数字的精度和包含较大的舍入误差比一个
.当你发现一个 - B
,VPA
近似的b
与32位。证明这种行为。
一个 - 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.0986122886681096913952452369225 d = 0.0000000000000000000013133163257501600766255995767652
正如预期的那样,双精度结果与16处的精确结果不同th小数位。
证明VPA
恢复窗体表达式的精度p/问,pπ/问,(p/问)1/2,2问, 和10问, 在哪里p和问是中等大小的整数,通过求VPA
呼吁双精度结果和确切的象征性结果。的差异0.0
显示,VPA
恢复双精度输入中丢失的精度。
VPA(1/3) - VPA(1 /符号(3))VPA(PI) - VPA(符号(PI))VPA(1 / SQRT(2)) - VPA(1 / SQRT(符号(2)))VPA(2 ^ 66) - VPA(2 ^符号(66))VPA(10 ^ 25) - VPA(10 ^符号(25))
ANS = 0.0 ANS = 0.0 ANS = 0.0 ANS = 0.0 ANS = 0.0
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之间的差异是
在计算内部,除以0会抛出一个错误。
指数范围比任何预定义模式IEEE较大。VPA
约低于下溢10 ^ (-323228496)
.
未实现非正规化数。
零没有签名。
的数量二进制在结果的尾数数字可以可变精度算术之间不同,并且IEEE预定义类型。
只有一个南
表示。安静和发信号之间没有区别南
.
无浮点数异常是可用的。