主要内容

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 = sin(p) cos(p/5);exp (p * x) x /日志(p)];vpa (V) vpa (M)
Ans = [0, 0.80901699437494742410229341718282] [exp(3.1415926535897932384626433832795*x), 0.87356852683023186835397746476334*x]

请注意

必须用vpa,如exp (vpa (200)).否则,输入被MATLAB自动转换为双精度®

更换精度vpa

默认情况下,vpa将输入计算为32位有效数字。属性可以更改有效数字的数目数字函数。

近似表达式100001/10001使用7位有效数字数字.保存旧价值数字返回的数字(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使用四个有效数字。

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

差不等于零,因为b仅用10数字的精度和包含较大的舍入误差比一个.当你发现a - bvpa接近b与32位。证明这种行为。

A - 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(π)——vpa(信谊(π))vpa(1 /√(2))——vpa(1 /√(信谊(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 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