符号数学工具箱™上的数字通过使用数字或符号运算工作。在数字算术,你表示使用任一双精度或可变精度浮点格式的数字。在象征性的算术,你代表了他们的确切形式的数字。这个话题比较双精度,精度可调,并象征性的算术。
在MATLAB数值计算®默认情况下使用双精度运算。例如,对表达式求值10001/1001,π和 。结果被转换为双精度值。
x = 1000 /1001 y = z =√2
X = 9.9910 Y = 3.1416 Z = 1.4142
有关双精度运算的更多信息,请参见浮点数。建议使用此算法,当您没有符号数学工具箱或正在使用不接受符号输入功能做。否则,建议精确符号运算和可变精度运算。为了一个象征性的值转换为双精度,使用双
函数。
可变精度算法使用vpa
是符号数学工具箱中推荐的数值计算方法。在使用可变精度算法执行计算时,可以指定有效位数。
例如,使用vpa
计算分数10001/1001。默认情况下,vpa
将输入计算为32位有效数字。近似的分数10001/1001到至少32个显著数字。
VPA(1001分之10001)
ans = 9.991008991008991008991008991009
将该分数近似为至少8位有效数字。方法更改有效数字的数目数字
函数。
数字(8);VPA(1001分之10001)
ans = 9.991009
符号数学工具箱提供信谊
和信谊
执行精确的函数符号计算。在象征性的运算,可以在他们的确切形式执行涉及数字和变量计算,如x / 2
,2 ^(1/2)
,或PI
。下面的三个例子表明,在象征性的运算执行几种计算。
使用信谊
创造符号数字。表达无理数π和
以符号形式。
x = sym(pi) y =√(sym(2))
x = y = 2的1/2次方
当你声明一个数字,MATLAB自动转换为双精度数。例如,声明整数80435758145817515
作为输入参数信谊
。数字失去了它的精确度,因为它比连续的最大整数更大flintmax
双精度,也就是2 ^ 53
。
z不准= sym(80435758145817515)
z不准= 80435758145817520
信谊
。
Zaccurate =符号( '80435758145817515')
Zaccurate = 80435758145817515
然后可以使用符号算术精确地执行大整数的计算。例如,计算三个大整数的立方体的和。
Z1 =符号( '80435758145817515')Z2 =符号( '12602123297335631')Z3 =符号( ' - 80538738812075974')Zsum = Z1 ^ 3 + Z2 ^ 3 + Z3 ^ 3
Z1 = 80435758145817515 Z2 = Z3 12602123297335631 = -80538738812075974 Zsum = 42
用符号算术,你可以解一个数学方程。例如,解二次方程斧头2+bx+c= 0。使用信谊
要声明变量x和系数一个,b和c在二次方程中。
SYMS A B C X等式= A * X ^ 2 + B * X + C == 0;
使用以下方法找到解金宝搏官方网站决方案解决
并将它们作为符号表达式返回。
溶胶=解决(等式,x)的
溶胶= - (B +(B ^ 2 - 4 * A * C)^(1/2))/(2 * A) - (B - (B ^ 2 - 4 * A * C)^(1/2))/(2 * A)
使用潜艇
用符号值代替系数。集一个= 1,b= 2,和c= 3。返回二次方程的解作为符金宝搏官方网站号数。
solsSym =潜艇(溶胶,[A B C],[1 2 3])
solsSym = - (8^(1/2)*1i)/2 - 1 (8^(1/2)*1i)/2 - 1
然后,您可以将符号解决方案以双精度或可变精度转换为浮点格式。金宝搏官方网站
数字(32);solsDouble =双(solsSym)solsVpa = VPA(solsSym)
solsDouble = -1.0 - 1.4142135623730950488016887242097i -1.0 + 1.4142135623730950488016887242097i
下表比较了双精度、变精度和符号算法。
双精度 | 可变精度 | 象征性的 | |
---|---|---|---|
示例1:评估sin(π) |
a = sin() A = 3.1416 ANS = 1.2246e-16 |
= vpa(pi) sin(b) b = 3.1415926535897932384626433832795 ans = -3.2101083013100396069547145883568e-40 |
= sym(pi) sin(c) C = PI ANS = 0 |
示例2:评估1 - 3*(4/3 - 1) |
a = 4/3 1 - 3*(a - 1) A = 1.3333 ANS = 2.2204e-16 |
数字(16);B = VPA(4/3)1 - 3 *(B - 1) b = 1.3333333333333 ans = 3.308722450212111e-24 |
C =符号(4)/ 3 1 - 3 *(C - 1) c = 4/3 ans = 0 |
函数的使用 | 双 |
vpa 数字 |
信谊 |
数据类型 | 双 |
信谊 |
信谊 |
舍入误差 | 是的,答案有16位的精度。 | 是的,数字的数量取决于使用的精度。 | 不,结果是准确的。 |
速度 | 快 | 更快,这取决于所使用的精度 | 最慢的 |
内存使用情况 | 至少 | 变量,取决于所使用的精度 | 最大的 |