主要内容

创建符号数、符号变量和符号表达式

此示例说明如何创建符号数、符号变量和符号表达式。要了解如何使用符号数学,请参阅Perform Symbolic Computations

创建精确表示的符号数

您可以使用 sym 创建符号数。符号数与浮点数不同,它是精确表示的数值。

使用 sym 创建符号数,并将它们与相同的浮点数进行比较。

a1Sym = sym(1/3)
a1Sym = 

13

a1 = 1/3
a1 = 
0.3333
a2Sym = sym(pi)
a2Sym = π
a2 = pi
a2 = 
3.1416

符号数以精确的有理数形式表示,而浮点数表示为小数近似值。

对符号数的计算是精确的。这种精确度可以通过对比以符号方式和数值方式求 sin(pi) 来展示。符号结果是精确的,而数值结果是一个近似值。

bSym = sin(sym(pi))
bSym = 0
b = sin(pi)
b = 
1.2246e-16

当您对数值输入使用 sym 时,MATLAB® 会先将该数值表达式计算为默认的双精度数,其精度可能较低。然后,对该双精度数应用 sym。要表示一个精确的数字而不将其计算为双精度数,请使用带引号的字符向量。例如,创建一个符号数来精确表示一个非常大的整数。

inaccurateNum = sym(123456789012345678)
inaccurateNum = 123456789012345680
accurateNum = sym("123456789012345678")
accurateNum = 123456789012345678

您还可以通过将数字的虚部指定为 1i2i ... 来创建符号复数。

sym("1234567 + 1i")
ans = 1234567+i

要了解有关数字的符号表示的详细信息,请参阅Numeric to Symbolic Conversion

创建具有可变精度的符号数

您可以使用 vpa 通过可变精度浮点算术创建符号数。默认情况下,vpa 将值计算到 32 位有效数字。

piVpa = vpa(pi)
piVpa = 3.1415926535897932384626433832795

当您对数值表达式(例如 log(2))使用 vpa 时,MATLAB 会先将该表达式计算为默认的双精度数,其有效数字小于 32 位。然后对该双精度数应用 vpa,得到的结果可能精度较低。要获得精度更高的结果,请使用 sym 将表达式中的双精度数转换为符号数,然后使用 vpa 以可变精度计算结果。例如,以 17 位和 20 位精度计算 log(2)

vpaOnDouble = vpa(log(2))
vpaOnDouble = 0.69314718055994528622676398299518
vpaOnSym_17 = vpa(log(sym(2)),17)
vpaOnSym_17 = 0.69314718055994531
vpaOnSym_20 = vpa(log(sym(2)),20)
vpaOnSym_20 = 0.69314718055994530942

当您转换较大的数值时,请使用引号来精确表示它们。

inaccurateNum = vpa(123456789012345678)
inaccurateNum = 123456789012345680.0
accurateNum = vpa("123456789012345678")
accurateNum = 123456789012345678.0

创建符号变量

可以使用 symssym 创建符号变量。这些函数的典型用途包括:

  • sym - 创建带编号的符号变量、MATLAB 函数中的符号变量,或者值与 MATLAB 工作区中名称不同的符号数。

  • syms - 为交互式符号工作流创建符号变量,即在 MATLAB 命令行或 MATLAB 实时脚本中创建符号变量。符号变量没有任何假设。

syms 命令是 sym 语法的简化形式,但这两个函数处理假设的方式不同。syms 在创建变量时会清除假设。但是,使用 sym 重新创建变量不会清除其假设。有关这两个函数之间差异的详细信息,请参阅 Choose syms or sym Function

分别使用 symssym 创建符号变量 x 和 y。

syms x
y = sym("y")
y = y

第一个命令在 MATLAB 工作区中创建符号变量 x,并将值 x 赋给变量 x。第二个命令创建符号变量 y,其值为 y

使用 syms,您可以通过一个命令创建多个变量。创建变量 abc

syms a b c

创建符号变量数组

如果要创建由带编号的符号变量组成的 MATLAB 数组,可以使用 symsyms 语法。

使用 sym 创建一个由多个带编号的符号变量组成的数组。清空工作区。创建一个包含符号变量 a1,,a10 的行向量,并将其赋给 MATLAB 变量 A。在 MATLAB 工作区中显示该变量。

clear
A = sym("a",[1 10])
A = (a1a2a3a4a5a6a7a8a9a10)
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

  • 继承先前同名符号变量的假设的符号变量

创建符号表达式

假设您想使用符号变量来表示黄金比例 φ= 1+ 52

使用 sym 创建黄金比例。

phi = (1 + sqrt(sym(5)))/2;

现在您可以对 phi 执行各种数学运算。例如:

f = phi^2 - phi - 1
f = 

52+122-52-32

接下来,假设您想研究二次函数 f=ax2+bx+c。首先,创建符号变量 abcx

syms a b c x

然后,创建一个符号表达式 f 来表示算术表达式 ax2+bx+c

f = a*x^2 + b*x + c
f = ax2+bx+c

使用 solve 求解二次方程 f=0 的根 x

x_0 = solve(f == 0,x)
x_0 = 

(-b+b2-4ac2a-b-b2-4ac2a)

您也可以对算术表达式应用数学函数。例如,将第一类贝塞尔函数 J0 应用于算术表达式 f,并求其关于 x 的导数。

J_0 = besselj(0,f)
J_0 = Jbesselj0(ax2+bx+c)
DJ_0 = diff(J_0,x)
DJ_0 = -Jbesselj1(ax2+bx+c)b+2ax

要在符号表达式中创建符号数,请使用 sym。不要使用 syms 来创建常数符号表达式。例如,要创建一个值为 5 的表达式,请输入 f = sym(5)。命令 f = 5 不会将 f 定义为符号表达式。

当从文本文件中读取表达式或精确指定数字时,也可以使用 str2sym 从字符串创建符号表达式。

重用符号对象的名称

如果将一个变量设置为一个符号表达式,然后对该变量应用 syms 命令,MATLAB 会从该变量中删除先前定义的表达式。

例如,创建一个符号表达式 f

syms a b
f = a + b
f = a+b

如果重新创建 f,则 MATLAB 会从表达式 f 中删除之前定义的值 a+b

syms f
f
f = f

您可以使用 syms 命令清除之前在 MATLAB 会话中分配给变量的定义。syms 会清除变量的假设。这些假设(可能是实数、整数、有理数和正数)与符号对象分开存储。但是,使用 sym 重新创建变量不会清除其假设。有关详细信息,请参阅Use Assumptions on Symbolic Variables

另请参阅

| |

主题