syms
创建符号标量变量和函数以及矩阵变量和函数
语法
说明
符号标量变量
syms
创建 var1 ... varN
sym
类型的符号标量变量 var1
至 varN
。用空格分隔不同的变量。此语法会清除 var1 ... varN
的所有先前定义。
syms
创建由符号标量变量 var1 ... varN
[n1 ... nM]
var1 ... varN
组成的数组,其中每个数组的大小为 n1
×...
×nM
,并且包含自动生成的符号标量变量作为其元素。例如,syms a [1 3]
会在 MATLAB® 工作区中创建符号数组 a = [a1 a2 a3]
以及符号标量变量 a1
、a2
和 a3
。对于多维数组,这些元素具有前缀 a
,后跟元素的索引并使用 _
作为分隔符,例如 a1_3_2
。
syms
创建由符号标量变量组成的 var1 ... varN
n
n
×n
矩阵,这些变量用自动生成的元素填充。
符号标量函数
syms
创建 f(var1,...,varN)
symfun
类型的符号函数 f
,以及 sym
类型的符号标量变量 var1,...,varN
(表示 f
的输入参量)。此语法会清除 var1,...,varN
的所有先前定义,包括符号假设。计算的符号函数 f(var1,...,varN)
的类型为 sym
。
syms
使用自动生成的符号函数作为元素,创建一个 f(var1,...,varN)
[n1 ... nM]
n1
×...
×nM
符号数组。此语法还可生成符号标量变量 var1,...,varN
,表示 f
的输入参量。例如,syms f(x) [1 2]
会在 MATLAB 工作区中创建符号数组 f(x) = [f1(x) f2(x)]
、符号函数 f1
和 f2
以及符号标量变量 x
。对于多维数组,这些元素具有前缀 f
,后跟元素的索引并使用 _
作为分隔符,例如 f1_3_2
。
syms
创建由符号函数组成的 f(var1,...,varN)
n
n
×n
矩阵,这些符号函数用自动生成的元素填充。
符号矩阵变量
syms
创建 var1 ... varN
[nrow ncol]
matrixsymmatrix
类型的符号矩阵变量 var1 ... varN
,其中每个符号矩阵变量的大小为 nrow
×ncol
。(自 R2021a 起)
syms
创建 var1 ... varN
n
matrixn
×n
符号矩阵变量。(自 R2021a 起)
符号矩阵函数
syms
创建 f(var1,...,varN)
[nrow ncol]
matrixsymfunmatrix
类型的符号矩阵函数 f
和 sym
类型的符号标量变量 var1,...,varN
。计算的符号矩阵函数 f(var1,...,varN)
的类型为 symmatrix
,大小为 nrow
×ncol
。此语法会清除 var1,...,varN
的所有先前定义,包括符号假设。(自 R2022a 起)
syms
会在工作区中保留 f(var1,...,varN)
[nrow ncol]
matrix keepargsvar1,...,varN
的现有定义。如果工作区中不存在任何 var1,...,varN
变量,则此语法会将它们创建为 sym
类型的符号标量变量。计算的符号矩阵函数 f(var1,...,varN)
的大小为 nrow
×ncol
。(自 R2022a 起)
syms
创建方阵符号函数,其中计算的符号矩阵函数 f(var1,...,varN)
n
matrixf(var1,...,varN)
的大小为 n
×n
。此语法会清除 var1,...,varN
的所有先前定义,包括符号假设。(自 R2022a 起)
syms
会在工作区中保留 f(var1,...,varN)
n
matrix keepargsvar1,...,varN
的现有定义。如果工作区中不存在任何 var1,...,varN
变量,则此语法会将它们创建为 sym
类型的符号标量变量。(自 R2022a 起)
符号对象数组
示例
使用自动生成的元素 创建一个由符号标量变量组成的 1×4 向量 a
。此命令还会在 MATLAB 工作区中创建符号标量变量 a1
, …, a4
。
syms a [1 4] a
a =
whos
Name Size Bytes Class Attributes a 1x4 8 sym a1 1x1 8 sym a2 1x1 8 sym a3 1x1 8 sym a4 1x1 8 sym
您可以使用格式化字符向量更改生成的元素的命名格式。通过将每个变量名称放入单引号中来声明符号标量变量。syms
将格式字符向量中的 %d
替换为元素的索引,以生成元素名称。
syms 'p_a%d' 'p_b%d' [1 4] p_a
p_a =
p_b
p_b =
创建符号标量变量 x
和 y
,并假设它们是整数。
syms x y integer
创建另一个标量变量 z
,并假设它具有正有理数值。
syms z positive rational
检查假设。
assumptions
ans =
或者,检查关于每个变量的假设。例如,检查对变量 x
设置的假设。
assumptions(x)
ans =
清除关于 x
、y
和 z
的假设。
assume([x y z],"clear")
assumptions
ans = Empty sym: 1-by-0
创建一个 1×3 符号数组 a
,并假设数组元素具有实数值。
syms a [1 3] real assumptions
ans =
创建具有一个和两个参量的符号函数。
syms s(t) f(x,y)
s
和 f
都是抽象符号函数。这些函数没有分配给它们的符号表达式,因此这些函数的主体分别是 s(t)
和 f(x,y)
。
为 f
指定一个公式。
f(x,y) = x + 2*y
f(x, y) =
计算 x = 1
和 y = 2
时函数的值。
f(1,2)
ans =
使用由符号标量变量组成的矩阵来创建符号函数并指定其公式。
syms x
M = [x x^3; x^2 x^4];
f(x) = M
f(x) =
计算 x = 2
时函数的值。
f(2)
ans =
计算 x = [1 2 3; 4 5 6]
时该函数的值。结果是一个由符号矩阵组成的元胞数组。
xVal = [1 2 3; 4 5 6]; y = f(xVal)
y=2×2 cell array
{2×3 sym} {2×3 sym}
{2×3 sym} {2×3 sym}
使用花括号访问元胞数组中元胞的内容。
y{1}
ans =
使用自动生成的符号函数作为元素,创建一个 2×2 符号矩阵。
syms f(x,y) 2 f
f(x, y) =
将符号表达式赋给符号函数 f1_1(x,y)
和 f2_2(x,y)
。这些函数在实时编辑器中显示为 和 。赋予这些表达式时,符号矩阵 f
的元素仍包含初始符号函数。
f1_1(x,y) = 2*x; f2_2(x,y) = x - y; f
f(x, y) =
使用 subs
函数代入赋给 f1_1(x,y)
和 f2_2(x,y)
的表达式。
A = subs(f)
A(x, y) =
计算 x = 2
和 y = 3
时符号矩阵 A
(包含代入的表达式)的值。
A(2,3)
ans =
自 R2021a 起
创建两个大小为 2
×3
的符号矩阵变量。非标量符号矩阵变量在实时编辑器和命令行窗口中显示为粗体字符。
syms A B [2 3] matrix A
A =
B
B =
将两个矩阵相加。结果由矩阵表示法 表示。
X = A + B
X =
X
的数据类型为 symmatrix
。
class(X)
ans = 'symmatrix'
将符号矩阵变量 X
转换为由符号标量变量组成的矩阵 Y
。结果用矩阵分量之和表示。
Y = symmatrix2sym(X)
Y =
Y
的数据类型为 sym
。
class(Y)
ans = 'sym'
证明 Y
中的转换结果等于由符号标量变量组成的两个矩阵之和。
syms A B [2 3] Y2 = A + B
Y2 =
isequal(Y,Y2)
ans = logical
1
自 R2021a 起
符号矩阵变量以紧凑矩阵表示法来表示矩阵、向量和标量。当表示非标量时,这些变量是不可交换的。当数学公式涉及矩阵和向量时,使用符号矩阵变量编写它们比按分量编写更简洁明确。
创建两个符号矩阵变量。
syms A B [2 2] matrix
检查两个符号矩阵变量之间的乘法的交换关系。
A*B - B*A
ans =
isequal(A*B,B*A)
ans = logical
0
检查两个符号矩阵变量之间的加法的交换关系。
isequal(A+B,B+A)
ans = logical
1
自 R2021a 起
创建 3
×3
和 3
×1
符号矩阵变量。
syms A 3 matrix syms X [3 1] matrix
求 的黑塞矩阵。涉及符号矩阵变量的推导方程将以书本中的排版方式显示。
f = X.'*A*X
f =
H = diff(f,X,X.')
H =
自 R2022a 起
创建函数 ,其中 是 1×3 向量, 是标量。
将 创建为符号矩阵变量,并且将 创建为符号标量变量。将 创建为符号矩阵函数,并在工作区中保留 和 的现有定义。
syms r [1 3] matrix syms t syms v(r,t) [1 1] matrix keepargs
指定 的公式。
v(r,t) = norm(r)/t
v(r, t) =
符号矩阵函数接受标量、向量和矩阵作为其输入参量。计算当向量值为 以及标量值为 时该函数的值。
vEval = v([1 2 2],3)
vEval =
将计算的函数从 symmatrix
数据类型转换为 sym
数据类型。
vSym = symmatrix2sym(vEval)
vSym =
某些函数(例如,solve
和 symReadSSCVariables
)可以返回由符号标量变量组成的向量或由符号标量变量和函数组成的元胞数组。这些变量或函数不会自动显示在 MATLAB 工作区中。使用 syms
从该向量或该元胞数组创建这些变量或函数。
使用 solve
求解方程 sin(x) == 1
。解中的参数 k
不会显示在 MATLAB 工作区中。
syms x
eqn = sin(x) == 1;
[sol,parameter,condition] = solve(eqn,x,ReturnConditions=true);
parameter
parameter =
使用 syms
创建参数 k
。参数 k
现在显示在 MATLAB 工作区中。
syms(parameter)
同样,使用 syms
创建向量或元胞数组中包含的符号对象。返回由符号对象组成的元胞数组的函数示例为 symReadSSCVariables
和 symReadSSCParameters
。
创建一些符号标量变量、函数、矩阵变量、矩阵函数和数组。
syms a f(x) syms A [2 1] syms B [2 2] matrix syms g(B) [2 2] matrix keepargs
使用 syms
显示当前存在于 MATLAB 工作区中的所有符号标量变量、函数、矩阵变量、矩阵函数和数组的列表。
syms
Your symbolic variables are: A A1 A2 B a f g x
通过向 syms
提供输出来返回元胞数组,而不是显示列表。
S = syms
S = 8×1 cell
{'A' }
{'A1'}
{'A2'}
{'B' }
{'a' }
{'f' }
{'g' }
{'x' }
输入参数
符号标量变量、矩阵、数组或矩阵变量,指定为以空格分隔的有效变量名称。也就是说,每个变量名称必须以字母开头,并且只能包含字母数字字符和下划线。要验证变量名称是否有效,请使用 isvarname
。
示例: x y123 z_1
向量、矩阵或由符号标量变量组成的数组的维度,指定为非负整数向量。
示例: [2 3]
, [2,3]
方阵的维度,指定为非负整数标量。例如,syms x 3 matrix
会创建一个 3
×3
方阵符号变量。
示例: 3
关于符号标量变量的假设,指定为 real
、positive
、integer
或 rational
。
您可以使用空格组合多个假设。例如,syms x positive rational
会创建一个具有正有理数值的符号标量变量 x
。
示例: rational
符号函数或矩阵函数及其输入参量,指定为函数及带括号的变量名称。函数名称 f
和变量名称 var1...varN
必须是有效的变量名称。也就是说,这些名称必须以字母开头,并且只能包含字母数字字符和下划线。要验证变量名称是否有效,请使用 isvarname
。
示例: F(r,t)
, f(x,y)
符号矩阵变量或函数的维度,指定为非负整数向量。
示例: [2 3]
, [2,3]
要创建的符号标量变量和函数,指定为由符号标量变量组成的向量或由符号标量变量和函数组成的元胞数组。此类向量或数组通常是另一个函数(例如,solve
或 symReadSSCVariables
)的输出。
输出参量
MATLAB 工作区中所有符号标量变量、函数、矩阵变量、矩阵函数和数组的名称,以字符向量元胞数组的形式返回。
限制
divergence
、curl
、jacobian
和laplacian
等微分函数目前不接受符号矩阵变量和符号矩阵函数作为输入。要计算关于向量和矩阵的微分,请改用diff
函数。要显示 Symbolic Math Toolbox™ 中接受符号矩阵变量和符号矩阵函数作为输入的所有函数,请使用命令
methods symmatrix
和methods symfunmatrix
。
提示
您可以在一次调用中创建多个符号对象。例如,
syms f(x) g(t) y
会创建两个符号函数(f
和g
)和三个符号标量变量(x
、t
和y
)。syms
是sym
、symfun
、symmatrix
和symfunmatrix
的快捷方式。您可以使用此快捷方式通过一次函数调用创建多个符号对象。例如,您可以使用sym
并分别创建每个符号标量变量。但是,当使用sym
创建变量时,针对创建的变量的任何现有假设都会保留。您还可以使用symfun
创建符号函数。在函数和脚本中,请勿使用
syms
创建与 MATLAB 函数同名的符号标量变量。对于这些名称,MATLAB 不会创建符号标量变量,但会保留分配给 MATLAB 函数的名称。如果要在函数或脚本中创建与 MATLAB 函数同名的符号标量变量,请改用sym
。例如,使用alpha = sym("alpha")
。请避免在函数或并行 for 循环中使用
syms
,因为它会生成没有直接输出赋值的变量并修改工作区的全局状态。在函数中使用syms
可能会导致副作用和其他意外行为。请改用带有左侧输出赋值的sym
,例如t = sym("t")
。有关详细信息,请参阅Choose syms or sym Function。下列变量名称对于
syms
无效:integer
、real
、rational
、positive
和clear
。要使用这些名称创建符号标量变量,请使用sym
。例如,real = sym("real")
。clear x
不会清除关于该符号对象的假设,例如实数、正数或者由assume
、sym
或syms
设置的任何假设。要删除假设,请使用以下选项之一:syms x
或syms f(x)
会清除x
的所有假设。assume(x,"clear")
会清除x
的所有假设。clear all
会清除 MATLAB 工作区中的所有对象并重置符号引擎。assume
和assumeAlso
为设置关于符号标量变量的假设提供了更大的灵活性。
当用符号数替换数值向量或矩阵的一个或多个元素时,MATLAB 会将该数字转换为双精度数。
A = eye(3); A(1,1) = sym(pi)
A = 3.1416 0 0 0 1.0000 0 0 0 1.0000
您无法将数值向量或矩阵的元素替换为符号标量变量、表达式或函数,因为这些元素无法转换为双精度数。例如,
syms a; A(1,1) = a
会抛出错误。在计算符号矩阵函数时,您必须代入与定义的输入参量大小相同的值。例如,请参阅创建向量和标量的函数。为了进行比较,此示例返回一个错误:
syms X [2 2] matrix syms f(X) [1 1] matrix keepargs f(ones(4))
版本历史记录
在 R2006a 之前推出您可以使用 syms
列出 MATLAB 工作区中所有符号对象的名称,并使用 S = syms
将它们以元胞数组形式返回。
从 R2022b 开始,返回的所有符号对象名称包括 MATLAB 工作区中 symmatrix
和 symfunmatrix
类型的所有符号矩阵变量和矩阵函数。在以前的版本中,syms
仅返回 sym
和 symfun
类型的所有符号标量变量、函数和数组的名称。
使用下列语法创建 symfunmatrix
类型的符号矩阵函数:
syms f(var1,...,varN) [nrow ncol] matrix syms f(var1,...,varN) [nrow ncol] matrix keepargs syms f(var1,...,varN) n matrix syms f(var1,...,varN) n matrix keepargs
符号矩阵函数允许您以紧凑矩阵表示法表示对标量、向量和矩阵进行运算的参数相关函数。使用它们,您可以在 Symbolic Math Toolbox 中表示基于矩阵的表达式和基于向量的表达式,并执行线性代数计算。例如,请参阅创建向量和标量的函数。
在创建以符号变量作为输入参量的符号函数时,syms
会清除关于符号变量的所有先前设置的假设。例如:
syms x y z real syms t real positive assumptions
ans = [in(x, 'real'), in(y, 'real'), in(z, 'real'), 0 < t]
syms f(x,y,z,t)
assumptions
ans = Empty sym: 1-by-0
要对符号函数的输入参量设置假设,请先创建符号函数,然后对符号变量设置假设(或使用设置的假设重新创建符号变量)。例如:
syms g(x,y,z,t) assume(x,'real') assume(t,'positive') assumptions
ans = [in(x, 'real'), 0 < t]
syms y z real assumptions
ans = [in(x, 'real'), in(y, 'real'), in(z, 'real'), 0 < t]
使用下列语法创建 symmatrix
类型的符号矩阵变量:
syms var1 ... varN [nrow ncol] matrix syms var1 ... varN n matrix
符号矩阵变量的排版简洁,能更清晰地显示数学公式。使用它们,您可以在 Symbolic Math Toolbox 中表示基于矩阵的表达式和基于向量的表达式,并执行线性代数计算。例如,请参阅符号矩阵变量的交换关系和求黑塞矩阵。
syms
现在会清除针对它创建的符号标量变量的任何假设。例如,
syms x real assume(x <= 5); assumptions(x)
ans = x <= 5
syms x
assumptions(x)
ans = Empty sym: 1-by-0
要保留针对已清除变量的现有假设,请使用 sym
而不是 syms
重新创建变量。例如,
syms x real assume(x <= 5); clear x x = sym('x'); assumptions(x)
ans = x <= 5
语法 syms x clear
和等效的 syms('x','clear')
现在会发出警告,指出以后的版本中将会删除它们。
在以前的版本中,这两种语法都会清除应用于 x
的所有假设。要更新代码,请调用 syms
并指定要清除其假设的符号标量变量。例如,syms x
会清除应用于 x
的所有假设。
另请参阅
assume
| assumeAlso
| assumptions
| displayFormula
| sym
| symfun
| symmatrix
| symfunmatrix
| symvar
主题
- Create Symbolic Numbers, Variables, and Expressions
- 创建符号函数
- Create Symbolic Matrices
- Create Symbolic Matrix Variables
- Use Symbolic Objects to Represent Mathematical Objects
- Choose syms or sym Function
- Use Assumptions on Symbolic Variables
- Add Subscripts, Superscripts, and Accents to Symbolic Variables in the Live Editor
- Change Output Format of Symbolic and Variable-Precision Arithmetic
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)