主要内容

VPA

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

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

描述

例子

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

例子

vpa (xd至少使用d有效数字,而不是数字

例子

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

用可变精度浮点算法计算符号输入。默认情况下,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数字的精度和包含较大的舍入误差比一个.当你发现一个 - BVPA近似的b与32位。证明这种行为。

一个 -  VPA(B,32)
ANS = 0.000000000000000000086736173798840354720600815844403

VPA恢复普通双精度输入的精度

不同于精确符号值,双精度值本身包含舍入误差。当你打电话VPA在双精度输入时,VPA不能恢复丢失的精度,即使它返回的数字比双精度值多。然而,VPA能识别和还原形式表达的精确性吗p/pπ/p/1/22, 和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/22, 和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

输入参数

全部收缩

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

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

提示

  • VPA不将指数中的分数转换为浮点数。例如,vpa(^符号(2/5))返回^ (2/5)

  • VPA使用的位数比指定的位数多数字.这些额外的数字防止后续计算舍入误差,被称为守护位数。

  • 当你打电话VPA在一个数字输入上,例如1/32 ^ (5),或罪(π/ 4)时,数值表达式进行评估,以包含舍入误差的双精度数。然后,VPA被称为对双精度数。对于准确的结果,转换数字表达式与符号表达式信谊.例如,以近似实验(1),使用VPA(EXP(符号(1)))

  • 如果第二个参数d不是整数,VPA四舍五入到最接近的整数

  • VPA为匹配形式的数字输入还原精度p/pπ/p/1/22, 和10, 在哪里p是中等规模的整数。

  • 使用可变精度算术到最接近的原子操作。

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

    • 在计算内部,除以0会抛出一个错误。

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

    • 未实现非正规化数。

    • 零没有签名。

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

    • 只有一个表示。安静和发信号之间没有区别

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

R2006a前推出