首页数学计算数学MATLAB基础与应用 02 第二章 数值计算与字符串操作.pptx

02 第二章 数值计算与字符串操作.pptx

页数:41页文件大小:172.8 KB来源: MATLAB基础与应用ppt课件

本课件讲解MATLAB数值计算与字符串操作的基础知识:从常量与变量、赋值语句讲起,说明算术、关系与逻辑三类运算符及优先级,梳理指令行中标点符号的作用,给出常用基本数学函数与输入输出函数,并系统介绍字符串的创建、标识、ASCII码表示与常用操作函数。

第2章数值计算与字符串操作封面,标示本章主题为MATLAB数值表达、数值计算与字符串操作语句
第2章学习目标页,列出掌握数值表达方式、数值计算基本操作与字符串表达及操作四项要求
第2章知识结构图,展示数值变量表达式与字符串两大分支及赋值、运算、输入输出等子项
查看本课件的文字版(共 41 页,供检索与复制)

第1页:第2章 数值计算与字符串操作

本页为《MATLAB基础与应用》第2章 数值计算与字符串操作的章节封面。

第2页:本章学习目标

学习目地:本章要求掌握以下内容。

  • 掌握MATLAB中数值表达方式
  • 掌握MATLAB中数值计算的基本操作及其使用方法
  • 掌握MATLAB中字符串表达
  • 掌握MATLAB中字符串操作语句及其使用方法

第3页:本章知识结构

本章知识结构:数值计算与字符串操作分为两大分支。

  • 数值变量表达式:数值变量、赋值语句、MATLAB表达式、标点符号的作用、数据的输入输出、基本数学函数
  • 字符串与字符串操作:字符串创建、字符串标识、字符串ASCII码表示、字符串数组的运算、字符串替换和查找、常用字符串操作函数、其他字符串操作函数、字符串的显示和打印

第4页:2.1 数值、变量与表达式

2.1 数值、变量与表达式:本节介绍MATLAB赋值语句以及数值表达式,是MATLAB在数值计算中的基础知识。

常量
其值始终不变的一些量,整型、实型、双精度和复型常量是算数型常量,也为常数。
变量
程序运行期间其值可以变化的量,系统为每一个变量开辟一个存储单元用来存放变量的值。

MATLAB中有预先定义变量,默认为常量,默认常量见表2-1。

第5页:表2-1 MATLAB默认常量

表2-1 MATLAB默认常量:下表列出MATLAB预定义的默认常量。

MATLAB默认常量
名称说明
ANS(或ans)默认变量名,最近一次操作的计算结果
NaN(或nan)非数,代表不定值,如0/0
Inf(或inf)无穷大,如1/0
nargin函数输入宗量个数
nargout函数输出宗量个数
pi圆周率
eps零阈值,浮点数相对的误差
i(或j)虚单元
realmax最大的正实数
realmin最小的正实数

说明:源文件中虚单元写作「I(或j)」,MATLAB标准写法为 i(或j),此处按标准写法列出。

第6页:MATLAB变量名规则与赋值语句

MATLAB语言的变量名规则

  • 变量名、函数名区分字母大小写,如变量 scf 和 SCF 为两个不同的变量
  • MATLAB定义的内部函数名不能定义为变量名,例如正余弦函数名 sin、cos 等
  • 变量名的第一个字符必须是英文字母,其后可以使用字母、下划线、数字,但不得包含空格、标点、运算符
  • 变量名最多不超过63个字符,超过时系统默认取63个字符做变量名

MATLAB赋值语句有两种形式

  1. 变量 = 表达式
  2. 表达式

其中第(2)种形式是将表达式的值赋给MATLAB的默认变量 ans。

第7页:2.1.2 MATLAB表达式运算符

2.1.2 MATLAB表达式:MATLAB中常用的三类运算符如下。

(1)算术表达式
加「+」、减「-」、乘「*」、右除「/」、左除「\」、乘方「^」。优先级:指数运算级别最高,乘除运算次之,加减运算级别最低。
(2)关系表达式
等于「==」、小于「<」、大于「>」、小于或等于「<=」、大于或等于「>=」、不等于「~=」。
(3)逻辑表达式
与「&」、或「|」和非「~」。

第8页:2.1.2 表达式运算规则

表达式运算符运算规则

  • 在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示
  • 参与逻辑运算的可以是两个标量、两个同维矩阵,或其中一个为标量、另一个为矩阵
  • 在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低

MATLAB表达式由变量名、运算符和函数名组成,书写规则与手写算式几乎完全相同,按与常规相同的优先级自左至右执行运算,括号可以改变运算次序。表达式中乘号不能省略,必须写成 a*sin(x),而不能写成 asin(x)。

第9页:例2-2、例2-3 表达式运算实例

例2-2:在MATLAB命令窗口用两种不同表达式形式计算算术运算结果。

>> 3^5+sin(pi)+exp(5) ans = 391.4132 >> a=3^5+sin(pi)+exp(5) a = 391.4132

如果在表达式的后面加「;」,则只进行运算,执行后不显示运算结果。

例2-3:已知矩阵 A、B,对它们做简单的关系与逻辑运算。

>> A=[1,2;1,2]; B=[1,1;2,2]; >> C=(A<B)&(A==B) C = 0 0 0 0

第10页:2.1.3 标点符号作用(一)

2.1.3 指令行中的标点符号:下表列出空格、逗号、黑点与分号的作用。

指令行标点符号作用(一)
名称作用
空格用作输入量与输入量之间的分隔符;数组元素分隔符
, 逗号用作要显示计算结果的指令与其后指令之间的分隔;用作输入量与输入量之间的分隔符;用作数组元素分隔符号
. 黑点数值表示中用作小数点;用于运算符号前,构成「数组」运算符
; 分号用于指令的「结尾」,抑制计算结果的显示;用作不显示计算结果指令与其后指令的分隔;用作数组的行间分隔符

第11页:2.1.3 标点符号作用(二)

下表继续列出其余标点符号的作用。

指令行标点符号作用(二)
名称作用
: 冒号用以生成一维数值数组;用做单下标援引时表示全部元素构成的长列;用做多下标援引时表示那维上的全部元素
% 注释号由它「启首」的所有物理行部分被看作非执行的注释
' ' 单引号对字符串记述符
( ) 圆括号改变运算次序;在数组援引时用;函数指令输入宗量列表时用
[ ] 方括号输入数组时用;函数指令输出宗量列表时用
{ } 花括号胞元数组记述符;图形中被控特殊字符括号
_ 下连符(为使人易读)用作一个变量、函数或文件名中的连字符;图形中被控下脚标前导符

第12页:2.1.3 标点符号作用(三)

指令行标点符号作用(三)
名称作用
... 续行号由三个以上连续黑点构成,把其下的物理行看作该行的「逻辑」继续,以构成一个「较长」的完整指令
@「At」号放在函数名前形成函数句柄;匿名函数前导符;放在目录名前形成「用户对象」类目录

在MATLAB中操作符「:」具有步进长的意义。

  • j:k 表示步长为1的等差数列构成的数组:[j, j+1, j+2, …, k]
  • j:i:k 表示步长为i的等差数列构成的数组:[j, j+i, j+2*i, …, k]

第13页:例2-4 冒号操作符实例

例2-4:建立1到5的等差为1的数列,建立1到7的等差为2的数列,建立8到0的等差为-2的递减数列。

>> 1:5 % 步长为1的等差数列 ans = 1 2 3 4 5 >> 1:2:7 % 步长为2的等差数列 ans = 1 3 5 7 >> 8:-2:0 % 步长为-2的等差、递减数列 ans = 8 6 4 2 0

例中MATLAB中「%」为注释标示符。

第14页:表2-3 常用的基本函数(一)

2.1.4 MATLAB基本数学函数:MATLAB拥有丰富的内部函数,常用的基本函数如表2-3,包括常用的计算函数与三角函数。

常用的基本函数(一)
功能函数
正弦函数sin(x)
求变量x绝对值|x|abs(x)
余弦函数cos(x)
复数x的相角angle(x)
正切函数tan(x)
求变量x的算术平方根sqrt(x)
余切函数cot(x)
求复数x的实部real(x)
正割函数sec(x)
求复数x的虚部imag(x)
双曲函数sinh(x)
求复数x的共轭复数conj(x)

说明:源文件抽取文字时该表函数名称列串行(如「正弦函数cossin(x)」),此处按MATLAB标准函数名与功能的对应关系还原;求虚部的函数标准写法为 imag(x),源文件写作 image(x),已按标准写法列出。

第15页:表2-3 常用的基本函数(二)

下表续列常用的基本函数。

常用的基本函数(二)
功能函数
反双曲函数asinh(x)
四舍五入至最近整数round(x)
反正弦函数asin(x)
加入正小数至最近整数ceil(x)
反余弦函数acos(x)
舍去正小数至最近整数floor(x)
反正切函数atan(x)
将实数化为分数表示rat(x)
反余切函数acot(x)
符号函数sign(x)
反正割函数asec(x)
求x除以y的余数rem(x, y)
自然指数exp(x)
整数x和y的最大公因数gcd(x, y)
2的指数pow2(x)
整数x和y的最小公倍数lcm(x, y)
自然对数 lnxlog(x)
以10为底的对数log10(x)
无论正负,舍去小数至最近整数fix(x)
以2为底的对数log2(x)
实数化为多项分数表示rats(x)

第16页:例2-5至例2-7 基本函数应用

例2-5:使用fix与cos函数的效果。

>> A=[1 2 3]; B=fix(pi*A); C=cos(pi*B) A = 1 2 3 B = 3 6 9 C = -1 1 -1

例2-6:求表达式的值。

>> sqrt(5^2+7^3)+log(2)+sin(pi/6) ans = 20.3765

例2-7:求表达式及其结果。

>> y=exp(-0.8*sin(0.5)) y = 0.6814

第17页:2.1.5 input函数与例2-8

2.1.5 数据的输入输出

input函数
用于向计算机输入一个参数。调用格式:A=input(提示信息,选项);选项为‘s’时,允许用户输入一个字符串。

例2-8:输入字符串实例,例如询问是否输入「Y」或者「N」。

>> reply = input('Do you want more? Y/N [Y]:','s'); if isempty(reply) reply ='Y'; end

又如想输入一个人的姓名,可采用命令:

>> reply = input('What\'s your name:','s') >> x=input('please input a string:','s') please input a string:this is a string x = this is a string

第18页:2.1.5 数值输入与pause、disp函数

例2-9:输入语句后输入相应的数值。

>> x=input('please input a number:') please input a number:3 x = 3

求一元二次方程 ax2+bx+c=0 的根:

a=input('a=?'); b=input('b=?'); c=input('c=?'); d=b*b-4*a*c; x=[(-b+sqrt(d))/(2*a), (-b-sqrt(d))/(2*a)]

将该程序以 wym.m 文件保存,然后运行 wym.m 文件(M文件使用详见第6章)。

pause函数
暂停程序的执行。调用格式:pause(延迟秒数);省略延迟时间直接使用 pause,则暂停程序直到用户按任一键后继续执行。
disp函数
命令窗口输出函数。调用格式:disp(输出项);输出项为字符串或矩阵。

第19页:例2-10 disp与fprintf输出

例2-10:disp函数应用。

>> A='Hello,MATLAB'; disp(A) Hello,MATLAB >> disp(23+45-3*4) % 输入数值计算表达式 56 >> disp([1 2 3; 4 5 6; 7 8 9]) % 输入矩阵或数组 1 2 3 4 5 6 7 8 9 >> disp('this is a example') this is a example

格式化输出使用 fprintf 函数:

fprintf('The area is %8.5f\n', area) The area is 12.56637 % 输出值为8位数含5位小数

输出显示语法规则与C语言相似,表2-4列出了常用的输出格式。

第20页:表2-4 常用的输出格式

表2-4 常用的输出格式:下表列出格式化输出常用的格式符及其含义。

常用的输出格式
输出格式代表含义
%d十进制有符号整数
%u十进制无符号整数
%f浮点数
%s字符串
%c单个字符
%e指数形式的浮点数
%g自动选择合适的表示法
%o无符号以八进制表示的整数
%x, %X无符号以十六进制表示的整数
%p指针的值
\n换行
\f清屏并换页
\r回车
\tTab符
\xhh表示一个ASCII码用16进表示

说明:源文件中八进制格式符写作「%0」(数字零),C语言与MATLAB格式化输出的标准写法为「%o」(字母o),此处按标准写法列出。

第21页:2.2.1 字符串创建

2.2 字符串

字符串(String)
由零个或多个字符组成的有限序列,一般记为 s='abc',是编程语言中表示文本的数据类型,主要用于编程、概念说明、函数解释。以字符为元素的数组称为字符数组。

2.2.1 字符串创建:字符变量的创建方法是在指令窗口中先把待建的字符放在「单引号对」中,再按回车键。

  • 该「单引号对」必须在英文状态下输入
  • 「单引号对」是MATLAB用来识别字符串变量所必须的
  • MATLAB中「%」为注释标示符

第22页:2.2.2 字符串标识实例

例2-11:字符串的创建。

>> a='Hello!This is an example.' a = Hello!This is an example. >> b = '中国''你好!' % 带单引号的字符串 b = 中国'你好!

字符串变量的每个字符(英文字母、空格和标点都是平等的)占据一个元素位,在数组中元素所处的位置用自然数标识。

例2-12:字符串标示实例。

>> c=a(1:4) % 提取子字符串 c = Hell

第23页:2.2.3 字符串ASCII码表示

>> d=a(end:-1:1) % 字符串的倒排显示 d = .elpmaxe na si sihT!olleH >> e=size(b) % 符号数组b的「大小」 e = 1 6
  • 字符串的存储是用ASCII码实现的
  • 指令 abs 和 double 都可以用来获取串数组所对应的ASCII码数值数组
  • 指令 char 可把ASCII码数组变为字符串数组

例2-13:字符串与ASCII码转变函数实例演示。

>> f=double(c) f = 72 101 108 108 >> g=char(f)

第24页:例2-14 ASCII码大小写转换

例2-14:利用ASCII码可以对字符串进行操作,例如使字符串a中字母全部大写。

>> w=find(a>='a' & a<='z'); % 找出字符串a中小写字母的元素位置 >> f=double(a); % 将字符串a转变为ASCII值 >> f(w)=f(w)-32; % 大小写字母ASCII值差32 >> char(f) % 把新的ASCII码转换成字符 ans = HELLO!THIS IS AN EXAMPLE.

第25页:2.3.1 字符串数组的运算

2.3 字符串操作:通常以串的整体作为操作对象,如在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。串的两种最基本的存储方式是顺序存储方式和链接存储方式。

length(a)
获取字符串a的长度
strcat(a,c)
连接两个字符串,每个字符串最右边的空格被裁切
char
连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格
strvcat
连接多行字符串,使与最长字符串相等,会忽略空字符串

第26页:例2-15、例2-16 字符串组合与连接

例2-15:字符串组合。

>> a='Hello!This is an example.'; b = '中国''你好!'; >> m=[b,a] m = 中国'你好!Hello!This is an example. >> f=char(a,b,m) % char连接,空字符串会被空格填满 >> size(f) ans = 3 31

例2-16:字符串连接。

>> strcat('This',' is',' an',' example. ') % 连接多个字符串 ans = This is an example.

第27页:2.3.2 字符串替换和查找

>> strvcat('This',' is',' an',' example. ') ans = This is an example.
strrep(str1,str2,str3)
用于进行字符串替换,区分大小写,把str1中所有的str2字串用str3来替换
strfind(str,patten)
查找str中是否有pattern,返回出现位置,没有出现返回空数组
findstr(str1,str2)
查找较短字符串在较长字符串中出现的位置,没有出现返回空数组
strmatch(patten,str)
检查patten是否和str最左侧部分一致,寻找符合条件的行

第28页:2.3.2 其他字符串处理函数

strtok(str,char)
返回str中由char指定的字符串前的部分和之后的部分,默认为寻找字符串中第一个空字符前边的字符串
Isstr
字符串判断
Strjust
调整字符串排列位置
Symvar
寻找字符串表达式中的变量(除 i、j、pi、inf、nan、eps 以及通用函数的其他标识符),没找到则返回空单元数组 {}
Strings
MATLAB字符串函数说明
str2mat
字符串转换成文本
Texlabel
将字符串转换为Tex格式(推荐理科同学掌握Latex)

例2-17:字符串替换。

>> b='Hello!This is an example.'; >> strrep(b, 'p', 'P') % 将所有p进行大写替换 ans = Hello!This is an examPle. >> strrep(b, 'Hello', 'Hi') % 改变字符串Hello为Hi ans = Hi!This is an example.

第29页:例2-18 strtok拆分字符串

strrep执行简单的字符串替代,对字符串矩阵不起作用。函数strtok找出由特定字符指定的字符串内的标记,空格是缺省限定字符。

例2-18:显示某一字符串前面与后面部分的字符串。

>> strtok(b) % 找出空格字符串前面的部分 ans = Hello!This >> [c,s]=strtok(b) % 首个空格前与后的字符串分别赋给c与s c = Hello!This s = is an example. >> kk='you are welcome'; [k1,k2]=strtok(kk,'a') k1 = you

第30页:例2-19 findstr查找子串位置

k2 = are welcome

findstr返回一个字符串在另一个字符串内的起始下标值。

例2-19:查询某一子字符串在整个字符串中的位置。

>> b=' Peter Piper picked a peck of pickled peppers '; >> findstr(b,' ') % 找出空格的位置 ans = 1 7 13 20 22 27 30 38 46 >> findstr(b,'p') % 找出字母p的位置 ans = 10 14 23 31 39 41 42

第31页:例2-19(续)find与findstr对比

>> find(b=='p') % 找出单字符p的位置 ans = 10 14 23 31 39 41 42 >> findstr(b,'hello') % 查找不存在的字符串 ans = [ ] >> findstr(b,'pick') % 查找子串pick的位置 ans = 14 31

第32页:表2-5 常用字符串操作函数(一)

2.3.3 常用字符串操作函数:表2-5列出常用的字符串操作基本函数。

常用的字符串操作基本函数(一)
功能函数名称
十六进制字符串转换成十进制数hex2dec
创建有n个空格组成的字符串blanks(n)
十六进制字符串转换成IEEE浮点数hex2num
裁切字符串的尾部空格deblank(str)
整数转换成字符串int2str
裁切字符串的开头和尾部的空格、制表、回车符strtrim(str)
ASCII转换成字符串setstr
将字符串中的字母转换成小写lower(str)
用格式控制,数字转换成字符串sprintf
将字符串中的字母转换成大写upper(str)

第33页:表2-5 常用字符串操作函数(二)

下表续列常用的字符串操作函数。

常用的字符串操作基本函数(二)
功能函数名称
用格式控制,字符串转换成数字sscanf
按照字符的ASCII值对字符串排序sort(str)
字符串转换成一个文本矩阵str2mat
将数字转换为数字字符串num2str
字符串转换成大写upper
将数字字符串转换为数字str2num
求由字符串给定的函数值feval
将数组转换成字符串mat2str
作为一个MATLAB命令求字符串的值eval(string)
把数值数组转换为整数数字组成的字符数组int2str
十进制数到十六进制字符串转换dec2hex

下面对上表常用的字符串部分命令操作进行演示。

第34页:例2-20 字符串转变数值操作

例2-20:字符串转变数值操作。

>> d= '[1 2; pi 4]' % 定义一个数值表示为MATLAB矩阵的字符串 d = [1 2; pi 4] >> str2num(d) % 将字符串转变为数值表示 ans = 1.0000 2.0000 3.1416 4.0000 >> f=' 123e+5 ' % 定义一数值形式表示字符串 >> str2num(f) ans = 12300000

函数eval给MATLAB提供宏的能力,提供了将用户创建的函数名传给其它函数以便求值的能力。

第35页:例2-21 eval的应用实例

例2-21:eval的应用实例。

>> a=eval(' sqrt(2) ') a = 1.4142 >> eval(' a=sqrt(2) ') a = 1.4142

当被求值的字符串由子字符串连接而成,或将字符串传给一个函数以求值时,eval非常有用。如果字符串传递到eval不能被辨认,MATLAB提供下列语法:

>> eval(' a=sqrtt(2) ',' a=[ ] ') a = [ ]

这里第二个参量被执行(sqrtt不是有效的MATLAB函数),这种形式常被描述为 eval(try,catch)。函数feval与eval类似,但在用法上有更多的限制:feval('fun',x) 求由字符串‘fun’给定的函数值,输入参量是变量x。

第36页:2.3.4 其他字符串操作函数

2.3.4 其他字符串操作函数:feval('fun',x) 等价于求 fun(x) 值。

>> a=feval('sqrt' ,2) a = 1.4142

函数eval、feval的基本用途限在用户创建的函数内,一般地 feval('fun', x, y, z) 等价于求 fun(x, y, z) 值。

Strcmp
比较两个字符串是否完全相等,是返回真,否则返回假
Strncmp
比较两个字符串前n个字符是否相等,是返回真,否则返回假
Strcmpi
比较两个字符串是否完全相等,忽略字母大小写

第37页:例2-22 字符串检测操作

Strncmpi
两个字符串前n个字符是否相等,忽略字母大小写
Isletter
检测字符串中每个字符是否属于英文字母
Isspace
检测字符串中每个字符是否属于格式字符(空格、回车、制表、换行符等)
Isstrprop
检测每一个字符是否属于指定的范围

例2-22:字符串其它操作示例。

>> a='d hello 15#'; b=isletter(a); c=isspace(a) b = 1 0 1 1 1 1 1 0 0 0 0 c = 0 1 0 0 0 0 0 1 0 0 0

第38页:2.3.5 字符串的显示和打印(一)

2.3.5 字符串的显示和打印 例2-23:字符串显示与打印示例。

>> a=' one '; b= ' two '; c= ' three '; >> disp(str2mat(a, b, c, ' four ')) % 转换成一个字符串矩阵 one two three four >> b=rand(2,2); % 产生2*2随机阵 >> c=num2str(b) % 把数值数组转换为串数组 c = 0.81472 0.12699 0.90579 0.91338 >> s=sprintf('%.10e\n',a) % 10数位科学记述串,每写一个元素就换行

第39页:2.3.5 字符串的显示和打印(二)

s = 3.2000000000e+001 1.1100000000e+002 1.1000000000e+002 1.0100000000e+002 3.2000000000e+001
>> a='one'; fprintf('% .5g\',a) % 以5位数位最短形式显示,不能赋值用 111\110\101\ >> s =sscanf(s,'%f',[2,2]) % 浮点格式把串转换成2*2数值数组 s = 32 110 111 101

第40页:本章小结

本章小结

  • 首先介绍了MATLAB的基础知识,重点介绍了MATLAB的变量与赋值
  • 利用MATLAB显示数学表达式
  • MATLAB的基本数学函数
  • 然后介绍了另一类数据类型——字符串,详细描述了字符串的创建、标识、字符串的ASCII码表示以及字符串的常用操作命令

第41页:谢谢

谢谢!——第2章 数值计算与字符串操作 内容到此结束。

顶部目录