页数:41页文件大小:172.8 KB来源: MATLAB基础与应用ppt课件
本课件讲解MATLAB数值计算与字符串操作的基础知识:从常量与变量、赋值语句讲起,说明算术、关系与逻辑三类运算符及优先级,梳理指令行中标点符号的作用,给出常用基本数学函数与输入输出函数,并系统介绍字符串的创建、标识、ASCII码表示与常用操作函数。
本页为《MATLAB基础与应用》第2章 数值计算与字符串操作的章节封面。
学习目地:本章要求掌握以下内容。
本章知识结构:数值计算与字符串操作分为两大分支。
2.1 数值、变量与表达式:本节介绍MATLAB赋值语句以及数值表达式,是MATLAB在数值计算中的基础知识。
MATLAB中有预先定义变量,默认为常量,默认常量见表2-1。
表2-1 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),此处按标准写法列出。
MATLAB语言的变量名规则
MATLAB赋值语句有两种形式
其中第(2)种形式是将表达式的值赋给MATLAB的默认变量 ans。
2.1.2 MATLAB表达式:MATLAB中常用的三类运算符如下。
表达式运算符运算规则
MATLAB表达式由变量名、运算符和函数名组成,书写规则与手写算式几乎完全相同,按与常规相同的优先级自左至右执行运算,括号可以改变运算次序。表达式中乘号不能省略,必须写成 a*sin(x),而不能写成 asin(x)。
例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 02.1.3 指令行中的标点符号:下表列出空格、逗号、黑点与分号的作用。
| 名称 | 作用 |
|---|---|
| 空格 | 用作输入量与输入量之间的分隔符;数组元素分隔符 |
| , 逗号 | 用作要显示计算结果的指令与其后指令之间的分隔;用作输入量与输入量之间的分隔符;用作数组元素分隔符号 |
| . 黑点 | 数值表示中用作小数点;用于运算符号前,构成「数组」运算符 |
| ; 分号 | 用于指令的「结尾」,抑制计算结果的显示;用作不显示计算结果指令与其后指令的分隔;用作数组的行间分隔符 |
下表继续列出其余标点符号的作用。
| 名称 | 作用 |
|---|---|
| : 冒号 | 用以生成一维数值数组;用做单下标援引时表示全部元素构成的长列;用做多下标援引时表示那维上的全部元素 |
| % 注释号 | 由它「启首」的所有物理行部分被看作非执行的注释 |
| ' ' 单引号对 | 字符串记述符 |
| ( ) 圆括号 | 改变运算次序;在数组援引时用;函数指令输入宗量列表时用 |
| [ ] 方括号 | 输入数组时用;函数指令输出宗量列表时用 |
| { } 花括号 | 胞元数组记述符;图形中被控特殊字符括号 |
| _ 下连符 | (为使人易读)用作一个变量、函数或文件名中的连字符;图形中被控下脚标前导符 |
| 名称 | 作用 |
|---|---|
| ... 续行号 | 由三个以上连续黑点构成,把其下的物理行看作该行的「逻辑」继续,以构成一个「较长」的完整指令 |
| @「At」号 | 放在函数名前形成函数句柄;匿名函数前导符;放在目录名前形成「用户对象」类目录 |
在MATLAB中操作符「:」具有步进长的意义。
例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中「%」为注释标示符。
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),已按标准写法列出。
下表续列常用的基本函数。
| 功能 | 函数 |
|---|---|
| 反双曲函数 | 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) |
| 自然对数 lnx | log(x) |
| 以10为底的对数 | log10(x) |
| 无论正负,舍去小数至最近整数 | fix(x) |
| 以2为底的对数 | log2(x) |
| 实数化为多项分数表示 | rats(x) |
例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.68142.1.5 数据的输入输出
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例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,则暂停程序直到用户按任一键后继续执行。disp(输出项);输出项为字符串或矩阵。例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列出了常用的输出格式。
表2-4 常用的输出格式:下表列出格式化输出常用的格式符及其含义。
| 输出格式 | 代表含义 |
|---|---|
| %d | 十进制有符号整数 |
| %u | 十进制无符号整数 |
| %f | 浮点数 |
| %s | 字符串 |
| %c | 单个字符 |
| %e | 指数形式的浮点数 |
| %g | 自动选择合适的表示法 |
| %o | 无符号以八进制表示的整数 |
| %x, %X | 无符号以十六进制表示的整数 |
| %p | 指针的值 |
| \n | 换行 |
| \f | 清屏并换页 |
| \r | 回车 |
| \t | Tab符 |
| \xhh | 表示一个ASCII码用16进表示 |
说明:源文件中八进制格式符写作「%0」(数字零),C语言与MATLAB格式化输出的标准写法为「%o」(字母o),此处按标准写法列出。
2.2 字符串
2.2.1 字符串创建:字符变量的创建方法是在指令窗口中先把待建的字符放在「单引号对」中,再按回车键。
例2-11:字符串的创建。
>> a='Hello!This is an example.' a = Hello!This is an example. >> b = '中国''你好!' % 带单引号的字符串 b = 中国'你好!字符串变量的每个字符(英文字母、空格和标点都是平等的)占据一个元素位,在数组中元素所处的位置用自然数标识。
例2-12:字符串标示实例。
>> c=a(1:4) % 提取子字符串 c = Hell>> d=a(end:-1:1) % 字符串的倒排显示 d = .elpmaxe na si sihT!olleH >> e=size(b) % 符号数组b的「大小」 e = 1 6例2-13:字符串与ASCII码转变函数实例演示。
>> f=double(c) f = 72 101 108 108 >> g=char(f)例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.2.3 字符串操作:通常以串的整体作为操作对象,如在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
例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.>> strvcat('This',' is',' an',' example. ') ans = This is an example.例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.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 = youk2 = are welcomefindstr返回一个字符串在另一个字符串内的起始下标值。
例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>> find(b=='p') % 找出单字符p的位置 ans = 10 14 23 31 39 41 42 >> findstr(b,'hello') % 查找不存在的字符串 ans = [ ] >> findstr(b,'pick') % 查找子串pick的位置 ans = 14 312.3.3 常用字符串操作函数:表2-5列出常用的字符串操作基本函数。
| 功能 | 函数名称 |
|---|---|
| 十六进制字符串转换成十进制数 | hex2dec |
| 创建有n个空格组成的字符串 | blanks(n) |
| 十六进制字符串转换成IEEE浮点数 | hex2num |
| 裁切字符串的尾部空格 | deblank(str) |
| 整数转换成字符串 | int2str |
| 裁切字符串的开头和尾部的空格、制表、回车符 | strtrim(str) |
| ASCII转换成字符串 | setstr |
| 将字符串中的字母转换成小写 | lower(str) |
| 用格式控制,数字转换成字符串 | sprintf |
| 将字符串中的字母转换成大写 | upper(str) |
下表续列常用的字符串操作函数。
| 功能 | 函数名称 |
|---|---|
| 用格式控制,字符串转换成数字 | sscanf |
| 按照字符的ASCII值对字符串排序 | sort(str) |
| 字符串转换成一个文本矩阵 | str2mat |
| 将数字转换为数字字符串 | num2str |
| 字符串转换成大写 | upper |
| 将数字字符串转换为数字 | str2num |
| 求由字符串给定的函数值 | feval |
| 将数组转换成字符串 | mat2str |
| 作为一个MATLAB命令求字符串的值 | eval(string) |
| 把数值数组转换为整数数字组成的字符数组 | int2str |
| 十进制数到十六进制字符串转换 | dec2hex |
下面对上表常用的字符串部分命令操作进行演示。
例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提供宏的能力,提供了将用户创建的函数名传给其它函数以便求值的能力。
例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。
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) 值。
例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 02.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数位科学记述串,每写一个元素就换行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本章小结
谢谢!——第2章 数值计算与字符串操作 内容到此结束。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}