主要内容

选择数字或符号算术

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

双精度运算

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.991008991008991008991008991009

将分数近似为至少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

Z = 80435758145817515 zaccurate = sym(80435758145817515)
Z = 8.0436e+16 zaccurate = 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在二次方程中。

表示a b c 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(pi) sin(B)
B = 3.1415926535897932384626433832795 ans = -3.2101083013100396069547145883568e-40
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.3333333333333 ans = 3.308722450212111e-24
C = sym(4)/3 1 - 3*(C - 1)
C = 4/ 3ans = 0
函数的使用 vpa
数字
信谊
数据类型 信谊 信谊
舍入误差 是的,答案有16位精度。 是的,位数取决于使用的精度。 不,结果是准确的。
速度 更快,取决于使用的精度 最慢的
内存使用情况 至少 变量,取决于所使用的精度 最大的

相关的话题

Baidu
map