第3章MATLAB符号计算

符号计算则是可以对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。MATLAB具有符号数学工具箱(Symbolic Math Toolbox),将符号运算结合到MATLAB的数值运算环境。符号数学工具箱是建立在Maple软件基础上的。

3.1符号表达式的建立

Symbolic Math Toolbox2.1版规定在进行符号计算时,首先要定义基本的符号对象然后才能进行符号运算。

3.1.1创建符号常量

符号常量是不含变量的符号表达式,用sym命令来创建符号常量。

语法:

sym(‘常量’)%创建符号常量

例如,创建符号常量,这种方式是绝对准确的符号数值表示:

>> a=sym('sin(2)')

a =

sin(2)

sym命令也可以把数值转换成某种格式的符号常量。

语法:

sym(常量,参数)%把常量按某种格式转换为符号常量

说明:参数可以选择为’d’、’f’、’e’或’r’ 四种格式,也可省略,其作用如表3.1所示。

表3.1参数设置

参数

作用

d

返回最接近的十进制数值(默认位数为32位)

f

返回该符号值最接近的浮点表示

r

返回该符号值最接近的有理数型(为系统默认方式),可表示为p/q、p*q、10^q、pi/q、2^q和sqrt(p)形式之一

e

返回最接近的带有机器浮点误差的有理值

例如,创建符号常量,这种方式是绝对准确的符号数值表示:

sin(2)

例如,把常量转换为符号常量,按系统默认格式转换:

8190223105242182*2^(-53)

【例3.1】创建数值常量和符号常量。

7.6137

2*sqrt(5)+pi

8572296331135796*2^(-50)

7.6137286085893727261009189533070

a31=a3-a1 %数值常量和符号常量的计算

0

2*sqrt(5)+pi

可以通过查看工作空间来查看各变量的数据类型和存储空间,工作空间如图3.1所示。

3.1.2创建符号变量和表达式

创建符号变量和符号表达式可以使用sym和syms命令。

1.使用sym命令创建符号变量和表达式

语法:

sym(‘变量’,参数)%把变量定义为符号对象

说明:参数用来设置限定符号变量的数学特性,可以选择为’positive’、’real’和’unreal’, ’positive’ 表示为“正、实”符号变量,’real’表示为“实”符号变量,’unreal’ 表示为“非实”符号变量。如果不限定则参数可省略。

【例3.2】创建符号变量,用参数设置其特性。

z=x+i*y;%创建z为复数符号变量

real(z) %复数z的实部是实数x

x

real(z) %复数z的实部

1/2*x+1/2*conj(x)

程序分析:设置x、y为实数型变量,可以确定z的实部和虚部。

语法:

sym(‘表达式’)%创建符号表达式

【例3.2续】创建符号表达式。

a*x^2+b*x+c

2.使用syms命令创建符号变量和符号表达式

语法:

syms(‘arg1’, ‘arg2’, …,参数)%把字符变量定义为符号变量

syms arg1 arg2 …,参数%把字符变量定义为符号变量的简洁形式

说明:syms用来创建多个符号变量,这两种方式创建的符号对象是相同的。参数设置和前面的sym命令相同,省略时符号表达式直接由各符号变量组成。

【例3.2续】使用syms命令创建符号变量和符号表达式。

f2=a*x^2+b*x+c %创建符号表达式

a*x^2+b*x+c

f3=a*x^2+b*x+c; %创建符号表达式

程序分析:既创建了符号变量a、b、c、x,又创建了符号表达式,f2、f3和f1符号表达式相同。

3.1.3符号矩阵

用sym和syms命令也可以创建符号矩阵。

[ a, b]

[ c, d]

例如,使用syms命令创建相同的符号矩阵:

A=[a b;c d]

[ a, b]

[ c, d]

【例3.3】比较符号矩阵与字符串矩阵的不同。

[ a, b]

[ c, d]

[a,b;c,d]

程序分析:由于数值变量a、b、c、d未事先赋值,MATLAB给出错误信息。

[ a, b]

[ c, d]

A2x2                      312 sym object

B1x9                       18 char array

C2x2                      312 sym object

Grand total is 25 elements using 642 bytes

程序分析:查看符号矩阵A,可以看到为2×2的符号矩阵,占用较多的字节。

3.2符号表达式的代数运算

符号运算与数值运算的区别主要有以下几点:

§传统的数值型运算因为要受到计算机所保留的有效位数的限制,它的内部表示法总是采用计算机硬件提供的8位浮点表示法,因此每一次运算都会有一定的截断误差,重复的多次数值运算就可能会造成很大的累积误差。符号运算不需要进行数值运算,不会出现截断误差,因此符号运算是非常准确的。

§符号运算可以得出完全的封闭解或任意精度的数值解。

§符号运算的时间较长,而数值型运算速度快。

3.2.1符号表达式的代数运算

符号表达式的运算符和基本函数都与数值计算中的几乎完全相同。

1.符号运算中的运算符

(1) 基本运算符

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

§运算符“.*”,“./”,“.\”,“.^”分别实现符号数组的乘、除、求幂,即数组间元素与元素的运算。

§运算符“′”,“.′”分别实现符号矩阵的共轭转置、非共轭转置。

(2) 关系运算符

§在符号对象的比较中,没有“大于”、“大于等于”、“小于”、“小于等于”的概念,而只有是否“等于”的概念。

§运算符“= =”、“~=”分别对运算符两边的符号对象进行“相等”、“不等”的比较。当为“真”时,比较结果用1表示;当为“假”时,比较结果则用0表示。

2.函数运算

(1) 三角函数和双曲函数

三角函数包括sin、cos、tan;双曲函数包括sinh、cosh、tanh;三角反函数除了atan2函数仅能用于数值计算外,其余的asin、acos、atan函数在符号运算中与数值计算的使用方法相同。

(2) 指数和对数函数

指数函数sqrt、exp、expm的使用方法与数值计算的完全相同;对数函数在符号计算中只有自然对数log(表示ln),而没有数值计算中的log2和log10。

(3) 复数函数

复数的共轭conj、求实部real、求虚部imag和求模abs函数与数值计算中的使用方法相同。但注意,在符号计算中,MATLAB没有提供求相角的命令。

(4) 矩阵代数命令

MATLAB提供的常用矩阵代数命令有diag,triu,tril,inv,det,rank, poly,expm,eig等,它们的用法几乎与数值计算中的情况完全一样。

【例3.4】求矩阵的行列式值、非共轭转置和特征值。

syms a11 a12 a21 a22

A=[a11 a12;a21 a22] %创建符号矩阵

[ a11, a12]

[ a21, a22]

a11*a22-a12*a21

A.' %计算非共轭转置

[ a11, a21]

[ a12, a22]

[ 1/2*a11+1/2*a22+1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)]

[ 1/2*a11+1/2*a22-1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)]

【例3.5】符号表达式f=2x2+3x+4与g=5x+6的代数运算。

2*x^2+3*x+4

5*x+6

f+g %符号表达式相加

2*x^2+8*x+10

f*g %符号表达式相乘

(2*x^2+3*x+4)*(5*x+6)

3.2.2符号数值任意精度控制和运算

1. Symbolic Math Toolbox中的算术运算方式

在Symbolic Math Toolbox中有三种不同的算术运算:

§数值型:MATLAB的浮点运算。

§有理数型:Maple的精确符号运算。

§VPA型:Maple的任意精度运算。

2.任意精度控制

任意精度的VPA型运算可以使用digits和vpa命令来实现。

语法:

digits(n)%设定默认的精度

说明:n为所期望的有效位数。digits函数可以改变默认的有效位数来改变精度,随后的每个进行Maple函数的计算都以新精度为准。当有效位数增加时,计算时间和占用的内存也增加。命令“digits”用来显示默认的有效位数,默认为32位。

语法:

S=vpa(s,n)%将s表示为n位有效位数的符号对象

说明:s可以是数值对象或符号对象,但计算的结果S一定是符号对象;当参数n省略时则以给定的digits指定精度。vpa命令只对指定的符号对象s按新精度进行计算,并以同样的精度显示计算结果,但并不改变全局的digits参数。

【例3.6】对表达式进行任意精度控制的比较。

2*sqrt(5)+pi

digits %显示默认的有效位数

Digits = 32

vpa(a) %用默认的位数计算并显示

7.6137286085893726312809907207421

vpa(a,20) %按指定的精度计算并显示

7.6137286085893726313

vpa(a) %按digits指定的精度计算并显示

7.61372860858937

3. Symbolic Math Toolbox中的三种运算方式的比较

【例3.6续】用三种运算方式表达式比较2/3的结果。

0.6667

2/3

.66666666666666666666666666666667

程序分析:

§三种运算方式中数值型运算的速度最快。

§有理数型符号运算的计算时间和占用内存是最大的,产生的结果是非常准确的。

§VPA型的任意精度符号运算比较灵活,可以设置任意有效精度,当保留的有效位数增加时,每次运算的时间和使用的内存也会增加。

§数值型变量a1结果显示的有效位数并不是存储的有效位数,在第一章中介绍显示的有效位数由“format”命令控制。如下面修改“format”命令就改变了显示的有效位数:

a1

0.66666666666667

3.2.3符号对象与数值对象的转换

1. 将数值对象转换为符号对象

sym命令可以把数值型对象转换成有理数型符号对象,vpa命令可以将数值型对象转换为任意精度的VPA型符号对象。

2.将符号对象转换为数值对象

使用double、numeric函数可以将有理数型和VPA型符号对象转换成数值对象。

语法:

N=double(S)%将符号变量S转换为数值变量N

N=numeric(S)%将符号变量S转换为数值变量N

【例3.7】将符号变量与数值变量进行转换。

a1=sym('2*sqrt(5)+pi')

2*sqrt(5)+pi

7.6137

7.6137286085893726312809907207421

7.6137

【例3.7续】由符号变量得出数值结果。

7.6137

用“whos”命令查看变量的类型,可以看到b1、b2、b3都转换为双精度型:

a11x1                      148 sym object

a21x1                      190 sym object

b11x1                        8 double array

b21x1                        8 double array

b31x1                        8 double array

Grand total is 50 elements using 362 bytes

3.3符号表达式的操作和转换

3.3.1符号表达式中自由变量的确定

1. 自由变量的确定原则

,MATLAB将基于以下原则选择一个自由变量:

§小写字母i和j不能作为自由变量。

§符号表达式中如果有多个字符变量,则按照以下顺序选择自由变量:首先选择x作为自由变量;如果没有x,则选择在字母顺序中最接近x的字符变量;如果与x相同距离,则在x后面的优先。

§大写字母比所有的小写字母都靠后。

2. findsym函数

如果不确定符号表达式中的自由符号变量,可以用findsym函数来自动确定。

语法:

findsym(EXPR,n)%确定自由符号变量

说明:EXPR可以是符号表达式或符号矩阵;n为按顺序得出符号变量的个数,当n省略时,则不按顺序得出EXPR中所有的符号变量。

【例3.8】得出符号表达式中的符号变量。

a*x^2+b*x+c

a, b, c, x

matlab 符号计算,第3章 MATLAB符号计算相关推荐

  1. matlab高级数据结构,Matlab讲义-第四章Matlab语言数据结构1-10.pdf

    Matlab讲义-第四章Matlab语言数据结构1-10.pdf 第四章第四章 Matlab语言基础语言基础 Matlab语言程序简洁.可语言程序简洁.可 读性很强而且调试十分容易.读性很强而且调试十 ...

  2. matlab vdp1000,第四章 MATLAB的数学运算.ppt

    第四章MATLAB的数学运算要点 第四章 MATLAB的数学运算 MATLAB可以进行很多的数学运算, 如:多项式.线性插值.傅里叶变换和微分 方程等. 教学内容 多项式与插值 函数运算 微分方程 应 ...

  3. matlab答案1 8章,MATLAB第1-8章答案

    第1章 一.思考题 4. (1) B=A(2:5,1:2:5) (2)A(7)=[] (3) A=A+30 (4)size(A) (5) t(find(t==0))=eps (6)t=reshape( ...

  4. matlab convert,第1章 MATLAB操作基础.ppt.Convertor

    第1章MA TLAB操作基础 1.1 MA TLAB概述 1.2 MA TLAB的运行环境与安装 1.3 MA TLAB集成环境 1.4 MA TLAB帮助系统 1.1 MA TLAB概述 1.1.1 ...

  5. 大一matlab知识整理,MATLAB基础课程 第二章 MATLAB绘图知识(5)

    作为大一的学生刚接触MATLAB,还要掌握哪些知识呢? 极坐标是属于高中就学习的数学知识,因此有必要在这里讲一下. 还需要简单的讲一些图像处理的知识. 同学们不要担心, 都是最基本的知识. 一点都不难 ...

  6. matlab答案1 8章,MATLAB基础与应用教程 习题答案 作者 蔡旭晖 刘卫国 蔡立燕 第1-8章答案...

    33.4394 21.1547 -9.3974 -0.7443 -0.3938 0.2830 (4)[A,B] ans = 3 54 2 1 -2 67 34 -45 7 2 8 74 87 90 1 ...

  7. matlab作业5答案,《matlab作业题答案》.doc

    <matlab作业题答案>.doc MATLAB作业题答案 第一章MATLAB概述 选择题 (1)在MATLAB中( C )用于括住字符串. A., B.: C.'' D."&q ...

  8. MATLAB GUI 文献或书,MATLAB GUI程序设计epub

    MATLAB GUI程序设计 作者:王广,邢林芳 MATLAB GUI程序设计 出版社:清华大学出版社 MATLAB GUI程序设计 内容简介 全书的编写基于当前版本的MATLAB环境,书中由浅入深地 ...

  9. 第9章matlab符号计算答案,第9章 MATLAB符号计算_MATELAB课程设计_ppt_大学课件预览_高等教育资讯网...

    第 9章 MATLAB符号计算 9.1 符号对象 9.2 符号微积分 9.3 级 数 9.4 符号方程求解 9.1 符号对象 9.1.1 建立符号对象 1.建立符号变量和符号常量 MATLAB提供了两 ...

最新文章

  1. win10+Chrome浏览器截长图方法
  2. 库克称苹果不会学脸书发行加密货币
  3. pip安装itchat模块成功后annocanda中No module named 'itchat'
  4. mysql5.7.23权限问题_部署MySQL5.7时的权限问题
  5. LeetCode-166- Fraction to Recurring Decimal
  6. python-包package
  7. 1.Jenkins 在windows下的安装与配置
  8. 为什么数组排序大写字母在前小写字母在后
  9. CSS 选择器 :last-child与:last-of-type的区别
  10. pe系统如何读取手机_图文详解怎么用pe重做系统
  11. 项目管理学习总结(2)——需求收集和管理
  12. skyline TerraBuilder(TB)处理不规则范围影像,去除空值,填充高程等(转载)
  13. 还对Angel平台一知半解?腾讯专家为你指点迷津!
  14. Linux绝对战胜不了Windows系统
  15. css table中设置tr行间距
  16. 【单片机竞赛:共阳数码管静态控制】
  17. 信号的平均功率与均方值
  18. JavaScript学习之旅-导言篇
  19. Python配置清华软件安装源
  20. linux下生成dump文件方法及设置

热门文章

  1. fortran数组下标、行号、continue
  2. 电视信号中的一些基本概念 (转自驱动之家)
  3. Linux aarch64交叉编译之 weston窗口管理程序
  4. C语言中access函数
  5. SQlServer的日期相减(间隔)dateadd ,datediff 函数
  6. 动态设置html样式或style具体属性
  7. Java课程大作业设计:实现联网对战、实时聊天、多线程编程的五子棋项目
  8. c# 获取进程cpu的使用率 简单试验
  9. (转)IST:Iterative Shrinkage/Thresholding和Iterative Soft Thresholding
  10. 记录大坑:用Xamarin引入UHF读写器dll,报错: 所生成项目的处理器架构“MSIiL”与引用的Reader.dll处理器架构“x86”不匹配