主要内容

vpa

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

金宝app移除对不定义数字的字符向量的支持。相反,首先创建符号数字和变量使用信谊而且信谊,然后对它们进行操作。例如,使用Vpa((1 +根号(sym(5)))/2)而不是Vpa('(1 +√(5))/2')

描述

例子

xVpa= vpa (x使用可变精度算术(任意精度浮点数)计算符号输入的每个元素x至少是这样d有效数字,其中d是值数字函数。的默认值数字是32。

例子

xVpa= vpa (x,d至少使用d的值改为有效数字数字

例子

全部折叠

用可变精度浮点算法计算符号输入。默认情况下,vpa计算值为32位有效数字。

P = sym(pi);vpa = vpa(p)
pVpa =
                       
                        
                         
                          3.1415926535897932384626433832795
                        
                       
信谊xA = sym(1/3);F = a*sin(2*p*x);fVpa = vpa(f)
fVpa =
                       
                        
                         
                          
                           
                            0.33333333333333333333333333333333
                           
                           
                           
                            
                             
                            
                            
                             
                             
                              
                               
                                
                                 
                                  6.283185307179586476925286766559
                                 
                                 
                                 
                                  x
                                
                               
                              
                             
                             
                            
                           
                          
                         
                        
                       

用变精度算法计算向量或矩阵的元素。

V = [x/p a^3];vpa = vpa(V)
VVpa =
                       
                        
                         
                          
                          
                           
                            
                             
                              
                               
                                
                                 0.31830988618379067153776752674503
                                
                                
                                
                                 x
                               
                              
                             
                            
                            
                             
                              
                               0.037037037037037037037037037037037
                             
                            
                           
                          
                          
                         
                        
                       
M = [sin(p) cos(p/5);exp (p * x) x /日志(p)];MVpa = vpa(M)
MVpa =

0 0.80901699437494742410229341718282 e 3.1415926535897932384626433832795 x 0.87356852683023186835397746476334 x

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

近似表达式100001/10001使用7位有效数字数字.保存的旧值数字返回的数字(7).的vpa函数只返回5位有效数字,这可能意味着其余数字为零。

digitsOld =数字(7);Y = sym(100001)/10001;yVpa = vpa(y)
yVpa =
                       
                        
                         
                          9.9991
                        
                       

的更高精度值,检查剩余数字是否为零25.结果表明,剩余的数字实际上是零,是重复小数的一部分。

yVpa = vpa(y)
yVpa =
                       
                        
                         
                          9.999100089991000899910009
                        
                       

或者,重写数字单人房vpa调用时,通过指定第二个参数来更改精度。

通过指定第二个参数,找到π到100位有效数字。

vpa = vpa(pi,100)
pVpa =
                       
                        
                         
                          3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
                        
                       

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

数字(digitsOld)

虽然象征性的结果是准确的,但它们可能不是一种方便的形式。你可以使用vpa数值近似:数值接近精确的符号结果

求其根的高次多项式解决.的解决函数不能符号化地求解高次多项式,并使用

信谊xY = solve(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可以使用更多的数字比数字指定。这些额外的数字被称为保护数字,因为它们可以防止后续计算中的舍入错误。

数值近似1/3使用四位有效数字。

A = vpa(1/3,4)
一个=
                       
                        
                         
                          0.3333
                        
                       

近似结果一个使用20位数字。结果表明,工具箱内部在计算时使用了4位以上的数字一个.由于舍入错误,结果中的最后一位数字是不正确的。

aVpa = vpa(a,20)
aVpa =
                       
                        
                         
                          0.33333333333303016843
                        
                       

隐藏的舍入错误可能导致意想不到的结果。

评估1/10默认是32位精度,然后是10位精度。

A = vpa(1/10,32)
一个=
                       
                        
                         
                          0.1
                        
                       
B = vpa(1/10,10)
b =
                       
                        
                         
                          0.1
                        
                       

从表面上看,一个而且b是平等的。通过求来检验它们是否相等A - b

舍入= a - b
舍入=
                       
                        
                         
                          0.000000000000000000086736173798840354720600815844403
                        
                       

差值不等于零,因为b只计算了10精度的数字,包含更大的舍入误差一个.当你发现A - b,vpa接近b32位数字。演示这种行为。

舍入= a - vpa(b,32)
舍入=
                       
                        
                         
                          0.000000000000000000086736173798840354720600815844403
                        
                       

与精确的符号值不同,双精度值固有地包含舍入误差。当你打电话时vpa在双精度输入下,vpa不能恢复丢失的精度,即使它返回比双精度值更多的数字。然而,vpa能否识别和恢复形式表达的准确性 p , p π , p 1 2 , 2 , 10 ,在那里 p 而且 是中等大小的整数。

首先,证明vpa无法恢复双精度输入的精度。调用vpa在双精度结果和相同的符号结果上。

Dp = log(3);S = log(sym(3));dpVpa = vpa(dp)
dpVpa =
                       
                        
                         
                          1.0986122886681095600636126619065
                        
                       
sVpa = vpa(s)
sVpa =
                       
                        
                         
                          1.0986122886681096913952452369225
                        
                       
d = sVpa - dpVpa
d =
                       
                        
                         
                          0.00000000000000013133163257501600766255995767652
                        
                       

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

证明vpa恢复窗体表达式的精度 p , p π , p 1 2 , 2 , 10 ,在那里 p 而且 都是中等大小的整数,通过求vpa调用双精度结果和精确的符号结果。区别在于 0 0 显示,vpa为双精度输入恢复丢失的精度。

D = vpa(1/3) - vpa(1/sym(3))
d =
                       
                        
                         
                          0.0
                        
                       
D = vpa(pi) - vpa(sym(pi))
d =
                       
                        
                         
                          0.0
                        
                       
D = vpa(1/√(2))- vpa(1/√(sym(2)))
d =
                       
                        
                         
                          0.0
                        
                       
D = vpa(2^66) - vpa(2^sym(66))
d =
                       
                        
                         
                          0.0
                        
                       
D = vpa(10^25) - vpa(10^sym(25))
d =
                       
                        
                         
                          0.0
                        
                       

创建一个符号表达式年代代表 π π 2 π 2 π 3. X ,在那里 X 是一个2乘1的符号矩阵变量。

信谊X(2 - 1)矩阵S = sin(hilb(2)*pi*X)
S =

Σ 1 X 在哪里 Σ 1 π π 2 π 2 π 3.

用变精度算法计算表达式。

SVpa = vpa(S)
SVpa =

3.1415926535897932384626433832795 X 1 + 1.5707963267948966192313216916398 X 2 1.5707963267948966192313216916398 X 1 + 1.0471975511965977461542144610932 X 2

输入参数

全部折叠

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

有效数字数,指定为正整数标量。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,2,10,在那里p而且是中等大小的整数。

  • 变精度算法不同于IEEE算法®浮点标准754在以下方面:

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

    • 指数范围大于任何预定义的IEEE模式。vpa下面的底流约为10 ^ (-323228496)

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

    • 0没有符号。

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

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

    • 没有可用的浮点数异常。

版本历史

R2006a之前介绍

全部展开