MATLAB符号对象的创建(附带实例)
数值运算在科学与工程技术中固然重要,但在自然科学的理论分析中,处理各种公式、关系式及其推导则是符号运算要解决的问题。与数值运算同样重要,符号运算也是科学计算的关键内容之一。
在 MATLAB 中,数值运算的操作对象是具体数值,而符号运算的操作对象则是非数值的符号对象。
符号对象是 Symbolic Math Toolbox 定义的一种新的数据类型(sym 类型),用来存储非数值的字符符号(通常是大写或小写的英文字母及其字符串)。符号对象可以是符号常量(符号形式的数)、符号变量、符号函数及各种符号表达式(符号数学表达式、符号方程与符号矩阵)等。
在 MATLAB 中,可利用函数 sym()、syms() 来建立符号对象,以及利用函数 class(() 来测试建立的操作对象为何种类型、是否为符号对象类型(sym 类型)。
利用 sym() 函数可以创建符号变量、表达式、函数、矩阵,其调用格式如下:
例如,A=sym('a',[13]) 会创建行向量 A=[a1 a2 a3]。生成的元素 a1、a2 和 a3 不会出现在 MATLAB 工作区中。多维数组元素的命名格式为前缀 a,加上使用 _ 作为分隔符的元素索引,如 a1_3_2。
与 sym 函数类似,syms 函数通过简化的语法使符号变量的定义更加方便。它允许一次性定义多个符号变量,并自动将这些符号变量存储在 MATLAB 工作区中,便于后续的符号计算和操作。其调用格式如下:
在 MATLAB 中,利用函数 class() 可以查看数据对象的类型,其调用格式如下:
在 MATLAB 中,数值运算的操作对象是具体数值,而符号运算的操作对象则是非数值的符号对象。
符号对象是 Symbolic Math Toolbox 定义的一种新的数据类型(sym 类型),用来存储非数值的字符符号(通常是大写或小写的英文字母及其字符串)。符号对象可以是符号常量(符号形式的数)、符号变量、符号函数及各种符号表达式(符号数学表达式、符号方程与符号矩阵)等。
在 MATLAB 中,可利用函数 sym()、syms() 来建立符号对象,以及利用函数 class(() 来测试建立的操作对象为何种类型、是否为符号对象类型(sym 类型)。
MATLAB创建符号对象
在一个 MATLAB 程序中,作为符号对象的符号常量、符号变量、符号函数及符号表达式,首先要利用 sym()、syms() 函数创建。利用 sym() 函数可以创建符号变量、表达式、函数、矩阵,其调用格式如下:
x = sym('x') % 创建一个符号变量 x A = sym('a', [n1...nM]) % 创建一个大小为 n1x...xnM 的符号数组,元素是自动生成的
例如,A=sym('a',[13]) 会创建行向量 A=[a1 a2 a3]。生成的元素 a1、a2 和 a3 不会出现在 MATLAB 工作区中。多维数组元素的命名格式为前缀 a,加上使用 _ 作为分隔符的元素索引,如 a1_3_2。
A = sym('a', n) % 创建一个 n×n 的符号矩阵,矩阵中的元素是自动生成的 sym(_, set) % 创建符号变量或数组,并设置这些变量或数组元素的假设条件 set % set 可以是 'real'、'positive'、'integer' 或 'rational',也可以组合多个条件 sym(_, 'clear') % 清除符号变量或数组上的假设条件 sym(num) % 将由 num 指定的数字或数值矩阵转换为符号数或符号矩阵 sym(num, flag) % 使用由 flag 指定的方法,将浮点数转换为符号数,如下表所示 sym(strnum) % 将由 strnum 指定的字符向量或字符串转换为精确的符号数 symexpr = sym(h) % 通过与函数句柄 h 关联的匿名函数创建一个符号表达式或矩阵 symexpr symexpr = sym(M) % 将符号矩阵 M 转换成类型为 sym 的符号变量数组 % 转换成的符号对象应符合 flag 格式。转换成的符号对象应符合 flag 格式:
选项 | 描述 |
---|---|
d | 最接近的十进制浮点数精确表示 |
e | 带(数值计算时)估计误差的有理数表示 |
f | 十六进制浮点数表示 |
r | 为默认设置,是最接近有理数表示的形式 |
T | 指用两个正整数 p、q 构成的 p/q、p*pi/q、sqrt(p)、2^p、10^q 的形式之一 |
与 sym 函数类似,syms 函数通过简化的语法使符号变量的定义更加方便。它允许一次性定义多个符号变量,并自动将这些符号变量存储在 MATLAB 工作区中,便于后续的符号计算和操作。其调用格式如下:
1) 创建符号变量
syms var1 ... varN % 创建符号变量 var1...varN,类型为 sym,使用空格分隔 syms var1 ... varN [n1 ... nM] % 创建大小为 n1-by-...-by-nM 的符号变量数组 syms var1 ... varN n % 创建一个大小为 n-by-n 的符号矩阵,自动生成元素 syms __ set % 设置符号变量属于 set,并清除其他假设条件,set 同 sym
2) 创建符号函数
syms f(var1,...,varN) % 创建类型为 symfun 的符号函数 f(var1,...,varN) syms f(var1,...,varN) [n1 ... nM] % 创建一个大小为 n1-by-...-by-nM 的符号数组 syms f(var1,...,varN) n % 创建一个大小为 n-by-n 的符号函数矩阵
3) 创建符号矩阵
syms var1 ... varN [nrow ncol] matrix % 创建符号矩阵,变量为 var1...varN % 其中每个矩阵变量的大小为 nrow-by-ncol syms var1 ... varN n matrix % 创建大小为 n-by-n 的符号矩阵
4) 创建符号矩阵函数
syms f(var1,...,varN) [nrow ncol] matrix % 创建符号矩阵函数 f syms f(var1,...,varN) [nrow ncol] matrix keepargs % 保留工作区中 var1,...,varN 的现有定义 syms f(var1,...,varN) n matrix % 创建一个方阵形式的符号矩阵函数,大小为 n-by-n syms f(var1,...,varN) n matrix keepargs % 保留工作区中 var1,...,varN 的现有定义
5) 创建符号对象数组
syms(symArray) % 创建符号对象数组,它们包含在 symArray 中 % symArray 可以是符号变量的向量或符号变量的单元数组
6) 列出符号对象的名称
syms % 列出工作区中所有符号变量、符号函数、符号矩阵、符号矩阵函数和数组的名称 S = syms % 返回一个包含工作区中所有符号对象名称的单元数组syms() 函数实际上是 sym() 函数的简化版。两者功能相似,syms() 函数更适合一次性定义多个符号变量,并自动将它们存储在工作区中;sym() 函数更灵活,适合需要精确控制变量名称、数组大小或设置特定假设条件的场合。
在 MATLAB 中,利用函数 class() 可以查看数据对象的类型,其调用格式如下:
str = class(object) % 返回指代数据对象类型的字符串
字符串 | 类型 |
---|---|
sym | 符号对象 |
cell | 元胞数组 |
char | 字符数组 |
sparse | 实(或复)稀疏矩阵 |
struct | 结构数组 |
double | 双精度浮点数 |
int8 | 8 位带符号整型数组 |
int16 | 16 位带符号整型数组 |
int32 | 32 位带符号整型数组 |
uint8 | 8 位不带符号整型数组 |
uint16 | 16 位不带符号整型数组 |
uint32 | 32 位不带符号整型数组 |