可变精度算术(任意精度算术)
金宝app支持未删除未定义数字的字符向量。相反,首先使用符号编号和变量使用轶事
和Syms.
,然后使用对它们的操作。例如,使用VPA((1 + SQRT(SYM(5)))/ 2)
代替VPA(1 + SQRT(5))/ 2')
。
使用可变精度浮点算术评估符号输入。默认,VPA.
计算要素到32个有效数字。
syms x p = sym(pi);Pivpa = VPA(P)
Pivpa = 3.1415926535897932384626433832795
a = sym(1/3);f = a * sin(2 * p * x);FVPA = VPA(F)
FVPA = 0.3333333333333333333333333333333333 * sin(6.283185307179586476925286766559 * x)
评估具有可变精度算术的向量或矩阵的元素。
v = [x / p a ^ 3];m = [sin(p)cos(p / 5);exp(p * x)x / log(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.
函数只返回五位有效数字,这可能意味着剩下的数字是零。
digitsold =数字(7);Y = SYM(100001)/ 10001;VPA(Y)
ans = 9.9991.
检查剩余数字是否使用更高的精度值来zeros25.
。结果表明,剩余数字实际上是重复十进制。
数字(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 = root(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.43001428832971577641651985839602i 0.72713608449119683997667565867496 + 0.43001428832971577641651985839602i - 0.72713608449119683997667565867496 - 0.93409928946052943963903028710582i - 0.72713608449119683997667565867496 + 0.93409928946052943963903028710582i
VPA.
使用保护数字来保持精度价值数字
函数指定所使用的最小数字数。在内部,VPA.
可以使用更多的数字而不是数字
指定。这些附加数字称为保护数字,因为它们会在后续计算中防止循环错误。
数值近似1/3
使用四个有效数字。
A = VPA(1/3,4)
a = 0.3333.
近似结果一种
使用20位数。结果表明,在计算时,工具箱内部使用了超过四位数字一种
。由于舍入错误,结果的最后一个数字不正确。
VPA(A,20)
ANS = 0.3333333333303016843
隐藏的圆形错误可能会导致意外结果。
评估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.0000000000000000 00039803547206/033617370603547206/0336173706035473060336173706035472060336173706033617370603547206033617720603354720603361737060081584720600815844403.
差异不等于零,因为B.
仅计算10.
精度的数字并包含较大的圆形误差一种
。当你找到A - B.
那VPA.
近似B.
32位数字。展示这种行为。
A - VPA(B,32)
ans = 0.0000000000000000 00039803547206/033617370603547206/0336173706035473060336173706035472060336173706033617370603547206033617720603354720603361737060081584720600815844403.
VPA.
恢复常用双精度输入的精度与确切的符号值不同,双重精度值固有地包含圆形错误。你打电话时VPA.
在双精度输入,VPA.
即使它返回比双精度值更多的数字,也无法恢复丢失的精度。然而,VPA.
可以识别并恢复表格表达式的精度P./问:那P.π/问:那(P./问:)1/2那2问:,和10.问:,在哪里P.和问:是适度大小的整数。
首先,证明这一点VPA.
无法为双精度输入恢复精度。呼叫VPA.
在双精度结果和相同的符号结果。
dp = log(3);s = log(sym(3));DPVPA = VPA(DP)SVPA = VPA(S)D = SVPA - DPVPA
DPVPA = 1.0986199065 SVPA = 1.09861228866809691952452369225d = 0.00000000 0001,0001d = 0.0986228866809692225d = 0.00000000 0001,000
正如预期的那样,双重精度结果与16的确切结果不同TH.小数位。
证明VPA.
恢复表单表达式的精度P./问:那P.π/问:那(P./问:)1/2那2问:,和10.问:,在哪里P.和问:是适度的大小整数,通过找到差异VPA.
呼吁双重精度结果和精确的符号结果。差异是0.0
表明这一点VPA.
在双精度输入中恢复损失精度。
VPA(1/3) - VPA(1 / SYS(3))VPA(PI) - VPA(SYM(PI))VPA(1 / SQRT(2)) - VPA(1 / SQRT(SYM(2)))VPA(2 ^ 66) - VPA(2 ^ SYM(66))VPA(10 ^ 25) - VPA(10 ^ SYM(25))
ans = 0.0 ans = 0.0 ans = 0.0 ans = 0.0 ans = 0.0
VPA.
不会将指数中的分数转换为浮点。例如,VPA(A ^ SYM(2/5))
回报A ^(2/5)
。
VPA.
使用比由指定的位数更多的数字数字
。这些额外的数字防范随后的计算中的圆形错误,并称为警卫数字。
你打电话时VPA.
在数字输入上,例如1/3
那2 ^( - 5)
, 要么罪(PI / 4)
,数字表达式被评估为包含循环错误的双重精度编号。然后,VPA.
在该双精度编号上调用。对于准确的结果,将数字表达式转换为符号表达式轶事
。例如,近似EXP(1)
, 使用VPA(exp(Sym(1)))
。
如果是第二个论点D.
不是一个整数,VPA.
将其舍入到最接近的整数回合
。
VPA.
恢复符合表单的数字输入的精度P./问:那P.π/问:那(P./问:)1/2那2问:,和10.问:,在哪里P.和问:是适度大小的整数。
使用可变精度算术回合到最近的原子操作。
可变精度算术和IEEE浮点标准754之间的差异是
内部计算,归零划分抛出错误。
指数范围大于任何预定义的IEEE模式。VPA.
下面下面大致流出10 ^( - 323228496)
。
非规范化的数字未实施。
零没有签名。
的数量二进制结果的Mantissa中的数字可能在可变精度算术和IEEE预定义类型之间有所不同。
只有一个南
表示。在安静和信令之间没有区别南
。
没有浮点数例外可用。