创建符号数、符号变量和符号表达式
此示例说明如何创建符号数、符号变量和符号表达式。要了解如何使用符号数学,请参阅Perform Symbolic Computations。
创建精确表示的符号数
您可以使用 sym 创建符号数。符号数与浮点数不同,它是精确表示的数值。
使用 sym 创建符号数,并将它们与相同的浮点数进行比较。
a1Sym = sym(1/3)
a1Sym =
a1 = 1/3
a1 = 0.3333
a2Sym = sym(pi)
a2Sym =
a2 = pi
a2 = 3.1416
符号数以精确的有理数形式表示,而浮点数表示为小数近似值。
对符号数的计算是精确的。这种精确度可以通过对比以符号方式和数值方式求 sin(pi) 来展示。符号结果是精确的,而数值结果是一个近似值。
bSym = sin(sym(pi))
bSym =
b = sin(pi)
b = 1.2246e-16
当您对数值输入使用 sym 时,MATLAB® 会先将该数值表达式计算为默认的双精度数,其精度可能较低。然后,对该双精度数应用 sym。要表示一个精确的数字而不将其计算为双精度数,请使用带引号的字符向量。例如,创建一个符号数来精确表示一个非常大的整数。
inaccurateNum = sym(123456789012345678)
inaccurateNum =
accurateNum = sym("123456789012345678")accurateNum =
您还可以通过将数字的虚部指定为 1i、2i ... 来创建符号复数。
sym("1234567 + 1i")ans =
要了解有关数字的符号表示的详细信息,请参阅Numeric to Symbolic Conversion。
创建具有可变精度的符号数
您可以使用 vpa 通过可变精度浮点算术创建符号数。默认情况下,vpa 将值计算到 32 位有效数字。
piVpa = vpa(pi)
piVpa =
当您对数值表达式(例如 log(2))使用 vpa 时,MATLAB 会先将该表达式计算为默认的双精度数,其有效数字小于 32 位。然后对该双精度数应用 vpa,得到的结果可能精度较低。要获得精度更高的结果,请使用 sym 将表达式中的双精度数转换为符号数,然后使用 vpa 以可变精度计算结果。例如,以 17 位和 20 位精度计算 log(2)。
vpaOnDouble = vpa(log(2))
vpaOnDouble =
vpaOnSym_17 = vpa(log(sym(2)),17)
vpaOnSym_17 =
vpaOnSym_20 = vpa(log(sym(2)),20)
vpaOnSym_20 =
当您转换较大的数值时,请使用引号来精确表示它们。
inaccurateNum = vpa(123456789012345678)
inaccurateNum =
accurateNum = vpa("123456789012345678")accurateNum =
创建符号变量
可以使用 syms 或 sym 创建符号变量。这些函数的典型用途包括:
sym- 创建带编号的符号变量、MATLAB 函数中的符号变量,或者值与 MATLAB 工作区中名称不同的符号数。syms- 为交互式符号工作流创建新符号变量,即在 MATLAB 命令行或 MATLAB 实时脚本中创建符号变量。新符号变量没有任何假设。
syms 命令是 sym 语法的简化形式,但这两个函数处理假设的方式不同。syms 在创建变量时会清除假设。但是,使用 sym 重新创建变量不会清除其假设。有关这两个函数之间差异的详细信息,请参阅 Choose syms or sym Function。
分别使用 syms 和 sym 创建符号变量 x 和 y。
syms x y = sym("y")
y =
第一个命令在 MATLAB 工作区中创建符号变量 x,并将值 赋给变量 x。第二个命令创建符号变量 y,其值为 。
使用 syms,您可以通过一个命令创建多个变量。创建变量 a、b 和 c。
syms a b c
创建符号变量数组
如果要创建由带编号的符号变量组成的 MATLAB 数组,可以使用 sym 或 syms 语法。
使用 sym 创建一个由多个带编号的符号变量组成的数组。清空工作区。创建一个包含符号变量 的行向量,并将其赋给 MATLAB 变量 A。在 MATLAB 工作区中显示该变量。
clear
A = sym("a",[1 10])A =
whos
Name Size Bytes Class Attributes A 1x10 8 sym
A 是一个 1×10 的数组,包含 10 个自动生成的元素。这些生成的 A 元素不会出现在 MATLAB 工作区中。
使用 syms 在 MATLAB 工作区中创建多个具有相应变量名称的新符号变量。清空工作区。创建新符号变量 a1, ..., a10。在 MATLAB 工作区中显示这些变量。
clear syms a [1 10] whos
Name Size Bytes Class Attributes a 1x10 8 sym a1 1x1 8 sym a10 1x1 8 sym a2 1x1 8 sym a3 1x1 8 sym a4 1x1 8 sym a5 1x1 8 sym a6 1x1 8 sym a7 1x1 8 sym a8 1x1 8 sym a9 1x1 8 sym
MATLAB 工作区中包含 10 个 MATLAB 变量,这些变量是符号变量。
syms 命令是 sym 语法的便捷简化形式,其典型用途是为交互式符号工作流创建新符号变量。使用 sym 语法可创建以下内容:
MATLAB 函数中的符号变量
多个带编号的符号变量
值与在 MATLAB 工作区中名称不同的符号变量
符号数,例如
sym(3)/11继承先前同名符号变量的假设的符号变量
创建符号表达式
假设您想使用符号变量来表示黄金比例 。
使用 sym 创建黄金比例。
phi = (1 + sqrt(sym(5)))/2;
现在您可以对 phi 执行各种数学运算。例如:
f = phi^2 - phi - 1
f =
接下来,假设您想研究二次函数 。首先,创建符号变量 a、b、c 和 x。
syms a b c x
然后,创建一个符号表达式 f 来表示算术表达式 。
f = a*x^2 + b*x + c
f =
使用 solve 求解二次方程 的根 。
x_0 = solve(f == 0,x)
x_0 =
您也可以对算术表达式应用数学函数。例如,将第一类贝塞尔函数 应用于算术表达式 ,并求其关于 的导数。
J_0 = besselj(0,f)
J_0 =
DJ_0 = diff(J_0,x)
DJ_0 =
要在符号表达式中创建符号数,请使用 sym。不要使用 syms 来创建常数符号表达式。例如,要创建一个值为 5 的表达式,请输入 f = sym(5)。命令 f = 5 不会将 f 定义为符号表达式。
当从文本文件中读取表达式或精确指定数字时,也可以使用 str2sym 从字符串创建符号表达式。
重用符号对象的名称
如果将一个变量设置为一个符号表达式,然后对该变量应用 syms 命令,MATLAB 会从该变量中删除先前定义的表达式。
例如,创建一个符号表达式 f。
syms a b f = a + b
f =
如果重新创建 f,则 MATLAB 会从表达式 f 中删除之前定义的值 。
syms f
ff =
您可以使用 syms 命令清除之前在 MATLAB 会话中分配给变量的定义。syms 会清除变量的假设。这些假设(可能是实数、整数、有理数和正数)与符号对象分开存储。但是,使用 sym 重新创建变量不会清除其假设。有关详细信息,请参阅Use Assumptions on Symbolic Variables。