第7章 符号计算——7.2 符号对象和符号表达式(1)

简介: 第7章 符号计算——7.2 符号对象和符号表达式(1)

7.2  符号对象和符号表达式(1)


符号数学工具箱中定义了一种新的数据类型,叫sym类。sym类的实例就是符号对象,符号对象是一种数据结构,是用来存储代表符号的字符串的复杂数据结构。

符号表达式是符号变量或常量的组合,在某些特定的情况下,符号变量和符号常量也可以被认为是符号表达式。符号表达式的创建依然使用函数sym


7.2.1  符号对象的创建命令


作为符号对象的符号常量、符号变量、符号函数及符号表达式,可以使用函数sym()syms()规定和创建,利用class()函数可以测试创建的操作对象为何种操作对象类型,以及是否为符号对象类型。


1.函数sym()


函数sym()的语法格式如下。

● S=sym(A):将非符号对象A(如数字、表达式、变量等)转换为符号对象,并存储在符号变量S中。

● x=sym('x'):创建符号变量x,其名字是'x',如alpha=sym('alpha')

● x=sym('x','real'):假设x是实数,因此有x的共轭conj(x)等于x,如r=sym('Rho','real')

● k=sym('k','positive'):创建一个正的(实数)符号变量。

● x=sym('x','clear'):创建一个没有额外属性的纯形式上的符号变量x(例如,创建符号变量x,但是并没指定它是正的或它是一个实数)。


函数sym()的调用格式有如下两种:

● variable=sym(A,flag)

● S=sym('A',flag)


命令公式由A来建立一个符号对象variable,其类型为sym。如果A(不带单引号)是一个数字、数值矩阵或数值表达式,则输出结果是由数值对象转换成的符号对象。如果A(带单引号)是一个字符串,则输出结果是由字符串转换成的符号对象。

其中flag为转换的符号对象应该符合的格式。如果被转换的对象为数值对象,则flag可以有如下选择。

● d:最接近的十进制浮点精确表示。

● e:带(数值计算时)估计误差的有理表示。

● f:十六进制浮点表示。

● r:为默认设置时,最接近有理表示的形式。


当被转换对象为字符串时,flag有如下几个选项。

● positive:限定A为正的实型符号变量。

● real:限定A为实型符号变量。


2.函数syms()


函数syms()的调用格式如下:

syms a b c flag


该命令可以建立3个或多个符号对象,如abc。同样,flag为对转换格式的限定,具体选项同上。


提示:在利用syms()函数创建多个符号变量时,符号变量之间以空格隔开。


7.2.2  符号对象的创建示例


本节将依次介绍符号常量、符号变量、符号表达式(符号函数、符号方程)及符号矩阵的创建方法。


7-1:符号常量的创建。

sym()函数中,如果输入参数为数值常量,则函数返回值为一个符号常量。虽然看上去它是一个数值量,但实际上是一个符号对象。

在命令行窗口中输入:

r = sym(2/3)

输出结果:

r =
2/3


在命令行窗口中输入:

f = sym(2/3, 'f')

输出结果:

f =
6004799503160661/9007199254740992


在命令行窗口中输入:

d = sym(2/3, 'd')

输出结果:

d =
0.66666666666666662965923251249478


在命令行窗口中输入:

e = sym(2/3, 'e')

输出结果:

e =
2/3 - eps/6


7-2:符号变量的创建。

在符号计算中,符号变量是内容可变的符号对象。通常,符号变量是指一个或多个特定的字符。符号变量的命名规则与MATLAB数值计算中变量的命名规则相同,主要包括以下3点:

变量名由英文字母开头,可以包括英文字母、数字和下画线。

变量名的长度不大于31个字符。

字母区分大小写。


MATLAB使用sym()函数或syms()函数来创建符号变量。符号变量名与变量字符串可以是相同的,也可以是不相同的。


在命令行窗口中输入:

x = sym('x')

输出结果:

x =
x

在命令行窗口中输入:

y = sym('x')

输出结果:

y =
x


在命令行窗口中输入:

z1 = sym('z1', 'real')

输出结果:

z1 =
z1


在命令行窗口中输入:

z2 = sym('z2', 'positive')

输出结果:

z2 =
z2


在命令行窗口中输入:

assumptions

输出结果:

ans =
[ in(z1, 'real'), 0 < z2]

在命令行窗口中输入:

syms a b c
a, b, c

输出结果:

a =
a
b =
b
c =
c


7-3:符号表达式的创建。

在符号计算中,符号表达式是由符号常量、符号变量、符号运算符及专用函数连接起来的符号对象组成的。符号表达式可以分为两类:不带等号的为符号函数;带等号的为符号方程。

MATLAB使用sym()函数或syms()函数来创建符号表达式。


在命令行窗口中输入:

syms a b c d e x;
f = sym(a * x^4 + b * x^3 + c * x^2 + d * x + e)

输出结果:

f =
a*x^4 + b*x^3 + c*x^2 + d*x + e


在命令行窗口中输入:

e = sym(x^2 + x^-2 == 1)

输出结果:

e =
1/x^2 + x^2 == 1


调用syms()函数来创建符号表达式。


在命令行窗口中输入:

syms a b c d e x;
f = a * x^4 + b * x^3 + c * x^2 + d * x + e

输出结果:

f =
a*x^4 + b*x^3 + c*x^2 + d*x + e


7-4:符号矩阵的创建。

元素是符号对象的矩阵叫作符号矩阵。符号矩阵既可以构成符号矩阵函数,也可以构成符号矩阵方程,它们都是符号表达式。通过syms()函数或sym()函数可以创建符号矩阵。


在命令行窗口中输入:

syms x y;
m1 = [1, 2 + x, 1; 2 + x, 1, 3 + y; 1, 3 + y, 0]

输出结果:

m1 =
[     1, x + 2,     1]
[ x + 2,     1, y + 3]
[     1, y + 3,     0]

在命令行窗口中输入:

m2 = sym([1, 2 + x, 1; 2 + x, 1, 3 + y; 1, 3 + y, 0])

输出结果:

m2 =
[     1, x + 2,     1]
[ x + 2,     1, y + 3]
[     1, y + 3,     0]



7.2.3  符号计算中的运算符和函数


MATLAB 5.3集成的2.1版本的符号计算工具包开始,MATLAB采用全新的数据结构、面向对象编程和重载技术,使得符号计算和数值计算在形式和风格上浑然统一。符号计算表达式的运算符和基本函数,无论在形状、名称上,还是在使用方法上,都与数值计算中的运算符和基本函数近乎相同。

以下将介绍符号计算中的运算符和基本函数。


1.算术运算符


1)运算符“+”“-”“*”“\”“/”“^”分别实现矩阵的加法、减法、乘法、左除、右除和求幂运算。


7-5:符号矩阵加法运算。

在命令行窗口中输入:

syms a b c d e f g h;
A = sym([a, b; c, d])
B = sym([e, f; g, h])
R = A + B

输出结果:

A =
[ a, b]
[ c, d]
B =
[ e, f]
[ g, h]
R =
[ a + e, b + f]
[ c + g, d + h]


7-6:符号矩阵左除运算。

在命令行窗口中输入:

syms a b c d e f g h;
A = sym([a, b; c, d])
B = sym([e, f; g, h])
R = A \ B

输出结果:

A =
[ a, b]
[ c, d]
B =
[ e, f]
[ g, h]
R =
[ -(b*g - d*e)/(a*d - b*c), -(b*h - d*f)/(a*d - b*c)]
[  (a*g - c*e)/(a*d - b*c),  (a*h - c*f)/(a*d - b*c)]


2)运算符“.*”“.\”“./”“.^”分别实现元素对元素的数组乘法、左除、右除和求幂运算。


7-7:符号矩阵的乘法与点乘运算。

在命令行窗口中输入:

syms a b c d e f g h;
A = sym([a, b; c, d])
B = sym([e, f; g, h])
R1 = A * B

输出结果:

A =
[ a, b]
[ c, d]
B =
[ e, f]
[ g, h]
R1 =
[ a*e + b*g, a*f + b*h]
[ c*e + d*g, c*f + d*h]


在命令行窗口中输入:

R2 = A .* B

输出结果:

R2 =
[ a*e, b*f]
[ c*g, d*h]


3)运算符“'”“.'”分别实现矩阵的共轭转置和非共轭转置。


7-8:符号矩阵的转置。

在命令行窗口中输入:

syms a b c d;
A = sym([a, b; c, d])
R1 = A'

输出结果:

A =
[ a, b]
[ c, d]
R1 =
[ conj(a), conj(c)]
[ conj(b), conj(d)]


在命令行窗口中输入:

R2 = A.'

输出结果:

R2 =
[ a, c]
[ b, d]


2.关系运算符


与数值计算中的关系运算符不同的是,符号计算中的关系运算符只有以下两种:

1)运算符“==”表示对运算符两边的符号对象进行相等的比较,返回值为“1”表示相等,返回值为“0”表示不相等。

2)运算符“~=”表示对运算符两边的符号对象进行不相等的比较,返回值为“1”表示不相等,返回值为“0”表示相等。


3.指数、对数函数


1sqrtexpexpm等指数函数在符号计算中的使用方法与数值计算中的使用方法一致。

2)自MATLAB 7.x版本开始,MATLAB新增加了log2函数和log10函数,其用法与数值计算中的用法一致。


4.三角函数、双曲函数及其反函数


atan2函数仅能用于数值计算外,其余的三角函数、双曲函数及它们的反函数,无论在数值计算还是在符号计算中,用法一致。


5.复数函数


复数函数包括复数的共轭(conj)、实部(real)、虚部(imag)和模(abs)函数,在数值计算和符号计算中的用法都是一样的。


6.矩阵代数函数


在符号计算中,常用的矩阵代数函数包括:diag函数、triu函数、tril函数、inv函数、det函数、rank函数、rref函数、null函数、colspace函数、poly函数、expm函数、eig函数和svd函数。

除了svd函数的使用方法有所不同,其余函数的用法与数值计算中的用法一致。


7-9:符号矩阵的SVD(奇异值分解)。

在命令行窗口中输入:

f = sym([1, 2, 1; 2, 3, 6; 1, 7, 5])
[U, S, V] = svd(f)

输出结果:

2f29cda9ffe191ee839cf5c667a1f43d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


相关文章
|
2月前
|
C#
C#学习相关系列之常用符号介绍
C#学习相关系列之常用符号介绍
|
8月前
第7章 符号计算——7.5 符号函数的操作
第7章 符号计算——7.5 符号函数的操作
|
4月前
|
编译器 C++ 索引
C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)
C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)
|
8月前
|
Java
第7章 符号计算——7.2 符号对象和符号表达式(2)
第7章 符号计算——7.2 符号对象和符号表达式(2)
|
8月前
|
资源调度
第7章 符号计算——7.4 符号表达式替换
第7章 符号计算——7.4 符号表达式替换
|
8月前
第7章 符号计算——7.3 符号表达式操作
第7章 符号计算——7.3 符号表达式操作
|
9月前
隐式类型转换 算术转换 操作符的属性
隐式类型转换 算术转换 操作符的属性
34 0
|
10月前
|
机器学习/深度学习 Cloud Native Go
779. 第K个语法符号:简单模拟
这是 力扣上的 779. 第K个语法符号,难度为 中等。
|
11月前
|
C语言 C++
C++ 链接库顺序导致的符号未定义问题
C++ 链接库顺序导致的符号未定义问题
84 0
|
12月前
|
存储 Unix 编译器
表达式求值过程中会发生哪些隐藏的变化?求值顺序又由什么决定?——详解C表达式求值中的隐式类型转换,算术转换问题,以及操作符的属性
表达式求值过程中会发生哪些隐藏的变化?求值顺序又由什么决定?——详解C表达式求值中的隐式类型转换,算术转换问题,以及操作符的属性
115 0