VPA

变精度算法(任意精度算法)

万博1manbetx对于没有定义多个特征向量的支持已被删除。取而代之的是,首先使用符号数和变量信谊信谊,然后对其进行操作。例如,使用VPA((1个+ SQRT(符号(5)))/ 2)而不是vpa ((1 +√6 (5) / 2”)

描述

例子

vpa (x)使用可变精度浮点算术(VPA)到符号输入中的每个元素评价x至少d显著的数字,其中d是的值数字函数。的默认值数字是32。

例子

vpa (x,d)至少使用d显著数字,而不是价值数字

例子

评估具有可变精度运算符号输入

用可变精度浮点运算计算符号输入。默认情况下,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 = [罪(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(PI,100)
ANS = 3.141592653589793238462643383279502884197169 ... 39937510582097494459230781640628620899862803 ... 4825342117068

中恢复原始精度值digitsOld为进一步计算。

数字(digitsOld)

数值近似符号结果

虽然象征性的结果是精确的,但它们可能不是一种方便的形式。您可以使用VPA在数值上近似精确的符号结果。

解决了使用它的根高多项式解决。该解决功能不能象征性地解决高次多项式,并使用表示根

SYMS X Y =解决(X ^ 4  -  X + 1,x)的
(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)
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,210,其中p是中等规模的整数。

首先,证明VPA对于双精度输入无法恢复精度。呼叫VPA在双精度结果和相同的符号结果。

DP =日志(3);S =日志(符号(3));DPVPA = VPA(DP)sVpa = VPA(S)d = sVpa  -  DPVPA
sVpa = 1.0986122886685600636126619065 d = 0.000000000000000131331632575016007662559957676652

正如预期的那样,双精度结果与16的精确结果不同th小数位。

证明VPA恢复表单表达式的精度p/,pπ/,(p/)1/2,210,其中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

输入参数

全部收缩

输入求值,指定为数字、向量、矩阵、多维数组或符号数、向量、矩阵、多维数组、表达式、函数或字符向量。

的显著数字,指定为整数。d必须大于1且小于 2 29 + 1

提示

  • 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,210,其中p是中等规模的整数。

  • 原子操作使用可变精度算术,四舍五入。

  • 变精度算法和IEEE浮点标准754之间的差异是

    • 里面的计算,被零除抛出一个错误。

    • 指数范围比任何预定义模式IEEE较大。VPA约低于下溢10 ^( - 323228496)

    • 没有实现非正规化的数字。

    • 零没有签名。

    • 的数量二进制在结果的尾数数字可以可变精度算术之间不同,并且IEEE预定义类型。

    • 只有一个表示。不区分安静和信号

    • 无浮点数异常是可用的。

R2006a前推出