主要内容

选择数值或符号算术

符号数学工具箱™通过使用数值或符号算术来操作数字。在数值算术中,使用双精度或可变精度以浮点格式表示数字。在符号算术中,你用精确的形式表示数字。本主题比较了双精度、可变精度和符号算术。

双精度运算

MATLAB中的数值计算®默认使用双精度算法。例如,求表达式的值10001/1001,π, 2 .结果被转换为双精度值。

X = 10001/1001 y = PI z =√(2)
X = 9.9910 y = 3.1416 z = 1.4142

有关双精度算法的更多信息,请参见浮点数.当您没有“符号数学工具箱”或正在使用不接受符号输入的函数时,建议使用此算术。否则,建议使用精确符号算法和变精度算法。方法将符号值转换为双精度值函数。

可变精度运算

变精度算法的使用vpa是符号数学工具箱中数值计算的推荐方法。在使用变精度算法执行计算时,可以指定有效位数。

例如,使用vpa求分数的值10001/1001.默认情况下,vpa将输入计算为32位有效数字。近似分数10001/1001至少32位有效数字。

vpa (10001/1001)
Ans = 9.991008991008991008991008991008991008991009

将分数近似为至少8位有效数字。方法更改有效位数数字函数。

数字(8);vpa (10001/1001)
Ans = 9.991009

在变精度算术中,你可以增加有效位数为了更精确。或者,您可以减少有效位数为了更快的计算和减少内存使用。

象征性的算术

符号数学工具箱提供信谊而且信谊精确执行的函数符号计算.在符号算术中,您可以执行包含精确形式的数字和变量的计算,例如x / 22 ^ (1/2),或π.下面的三个例子展示了在符号算术中执行的几种计算。

表达无理数

使用信谊创造符号数字。表达无理数π而且 2 以象征的形式。

X = sym(pi) y =√(sym(2))
X = y = 2^(1/2)

使用大整数执行计算

当您声明一个数字时,MATLAB会自动将该数字转换为双倍精度。例如,声明整数80435758145817515的输入参数信谊.这个数字失去了它的准确性,因为它比最大的连续整数大flintmax精确到双倍,也就是2 ^ 53

zincorrect = sym(80435758145817515)
Z = 8.0436e+16 zincorrect = 80435758145817520
要精确地将大整数声明为符号数,请使用带有单引号的字符向量作为的输入参数信谊

Zaccurate = sym('80435758145817515')
Zaccurate = 80435758145817515

然后,您可以使用符号算术精确地执行对大整数的计算。例如,求三个大整数的立方的和。

Z1 = sym('80435758145817515') Z2 = sym('12602123297335631') Z3 = sym('-80538738812075974') Zsum = Z1^3 + Z2^3 + Z3^3
Z1 = 80435758145817515 Z2 = 12602123297335631 Z3 = -80538738812075974 Zsum = 42

解数学方程

用符号算术,你可以解出一个数学方程。例如,解二次方程斧头2+bx+c= 0.使用信谊要声明变量x这些系数一个b,c在二次方程中。

Syms a bc x eqn = a*x^2 + b*x + c == 0;

使用以下方法找到解万博 尤文图斯决方案解决并将它们作为象征性的表达返回。

Sols = solve(eqn,x)
溶胶= - (b + b ^ 2 - 4 * * c) ^ (1/2)) / (2 *) - (b - b (^ 2 - 4 * * c) ^ (1/2)) / (2 *)

使用潜艇用符号值代替系数。集一个= 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.4142135623730950488016887242097i -1.0 + 1.4142135623730950488016887242097i

数值和符号算术的比较

下表比较了双精度、可变精度和符号算术。

双精度 可变精度 象征性的
示例1:评估sin(π)
A = sin()
A = 3.1416 ans = 1.2246e-16
B = vpa() sin(B)
B = 3.1415926535897932384626433832795 ans = -3.2101083013100396069547145883568e-40
C = sym() 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.333333333333333 ans = 3.308722450212111e-24
C = sym(4)/3 1 - 3*(C - 1)
C = 4/3 ans = 0
函数的使用 vpa
数字
信谊
数据类型 信谊 信谊
舍入误差 是的,答案有16位精度。 是的,数字的数量取决于使用的精度。 不,结果是准确的。
速度 更快,取决于使用的精度 最慢的
内存使用情况 至少 变量,取决于所使用的精度 最大的

相关的话题