Symbolic Math Toolbox™通过使用数字或符号算术对数字进行操作。在数字算术中,可以使用双精度或变量精度以浮点格式表示数字。在符号算术中,用数字的精确形式表示数字。本主题比较双精度、变量精度和符号算术。
用MATLAB进行数值计算®默认使用双精度算术。例如,评估表达式10001/1001,π., 。结果转换为双精度值。
x = 10001/1001 y = pi z = sqrt(2)
X = 9.9910 y = 3.1416 z = 1.4142
有关双重精度算术的更多信息,请参阅浮点数字。当您没有符号数学工具箱或正在使用不接受符号输入的函数时,建议使用此算法。否则,建议使用精确符号算法和变精度算法。要将符号值转换为双精度,请使用双倍的
功能。
可变精度算术使用vpa.
是符号数学工具箱中的数字计算的推荐方法。使用可变精度算术执行计算时,可以指定有效数字的数量。
例如,使用vpa.
评估分数10001/1001。默认情况下,vpa.
评估输入到32个有效数字。近似分数10001/1001至少32位有效数字。
vpa (10001/1001)
ANS = 9.991008991008991008991008991009.
将分数近似到至少8位。通过使用使用的更改有效数字的数量数字
功能。
数字(8);vpa (10001/1001)
ans = 9.991009.
符号数学工具箱提供轶事
和纽带
执行确切的功能符号计算。在符号算术中,您可以执行涉及数字和变量的精确形式的计算,例如X / 2.
那2 ^ (1/2)
, 或者π
。下面三个例子展示了在符号算术中执行的几个计算。
利用轶事
创建符号数字。表达不合理的数量π和
象征性的形式。
x = sym(pi)y = sqrt(sym(2))
x = pi y = 2 ^(1/2)
当您声明一个数字时,MATLAB自动将该数字转换为双精度。例如,声明整数80435758145817515
作为的输入参数轶事
。这个数字失去了它的准确性,因为它大于最大的连续整数Flintmax.
在双精度,是2 ^ 53.
。
Z = 80435758145817515 ZinAccurate = Sym(80435758145817515)
z = 8.0436e + 16 zinaccurate = 80435758145817520
轶事
。
Zaccurate =符号(' 80435758145817515 ')
zaccurate = 80435758145817515
然后,您可以准确地使用符号算术执行大型整数的计算。例如,评估三个大整数的多维数据集的总和。
Z1 = sym('12602123297335631') Z3 = sym('-80538738812075974') Zsum = Z1^3 + Z2^3 + Z3^3
Z1 = 80435758145817515 Z2 = 12602123297335631 Z3 = -80538738812075974
通过符号算术,您可以解决数学方程式。例如,解决二次方程斧头2+BX.+C= 0.。利用纽带
声明变量X和系数一个那B.,C在二次方程中。
Syms a b c x eqn = a*x^2 + b*x + c == 0;
使用解决方案金宝搏官方网站解决
并将其作为象征性表达返回。
溶胶=解决(eqn, x)
溶胶= - (b + b ^ 2 - 4 * * c) ^ (1/2)) / (2 *) - (b - b (^ 2 - 4 * * c) ^ (1/2)) / (2 *)
利用subs
替换系数的符号值。放一个= 1,B.= 2,和C= 3。将二次方程的解决方案作金宝搏官方网站为符号数字返回。
solsSym = subs(sols,[a b c],[1 2 3])
solssym = - (8 ^(1/2)* 1i)/ 2 - 1(8 ^(1/2)* 1i)/ 2 - 1
然后,您可以以双精度或可变精度将符号解决方案转换为浮点格式。金宝搏官方网站
数字(32);solsDouble = double(solsSym) solsVpa = vpa(solsSym)
solsdouble = -1.0000 - 1.4142i -1.0000 + 1.4142i solsvpa = - 1.0 - 1.41421356237309504880168887242097i - 1.4142135623730950488016887242097i - 1.414213562373095048801688724880168872488016887242097i
下表比较了双重精度,可变精度和符号算法。
双精度 | 可变精度 | 象征性的 | |
---|---|---|---|
例1:评估罪(π) |
a = pi sin(pi) A = 3.1416 ans = 1.2246e-16 |
B = VPA(PI)SIN(B) B = 3.141592653588433832626433832798 ANS = -3.21010830131003960695471458835954714588356871458835687145883568714588356847145883568 |
c = sym(pi)sin(c) C = 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.33333333333333 ANS = 3.3087224502121110-24 |
C = sym(4)/ (1 - 1) C = 4/3 ans = 0 |
使用的功能 | 双倍的 |
vpa. 数字 |
轶事 |
数据类型 | 双倍的 |
轶事 |
轶事 |
圆形错误 | 是的,答案有16位精度。 | 是的,数字数取决于所使用的精度。 | 不,结果是准确的。 |
速度 | 快点 | 更快,取决于使用的精度 | 最慢 |
内存使用情况 | 至少 | 变量,取决于所使用的精度 | 最伟大的 |