首页 > 编程笔记 > MATLAB笔记 阅读:22

MATLAB符号对象的创建(附带实例)

数值运算在科学与工程技术中固然重要,但在自然科学的理论分析中,处理各种公式、关系式及其推导则是符号运算要解决的问题。与数值运算同样重要,符号运算也是科学计算的关键内容之一。

在 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 格式:

表: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 位不带符号整型数组

相关文章