2.2 数据定义
在MATLAB中,系统识别数字及一些特殊常量,这些数据可以在程序运行中直接使用,但大多数情况下,使用的数据需要进行定义后才能使用。否则不能数据被识别,系统会显示警告信息,同时程序不能被运行。下面根据不同的类别分别对不同数据进行定义。
2.2.1 字符串定义
字符和字符串运算是各种高级语言必不可少的部分。MATLAB作为一种高级的数学计算语言,字符串运算功能同样很丰富,特别是增加了自己的符号运算工具箱之后,字符串函数的功能得到进一步增强。这里的字符串不仅仅是简单的字符串运算,而是MATLAB符号运算表达式的基本构成单元。
1. 直接赋值定义
在MATLAB中,所有的字符串都应用单引号设定后输入或赋值(yesinput命令除外)。
>> a='this is a book' a = this is a book
2. 由函数char来生成字符数组
>> a=char('b','o','o','k'); >> a' ans = book
对字符串进行定义后,可对该字符串进行简单地操作。
(1)计算字符大小
在MATLAB中,字符串与字符数组基本上是等价的。用户可以用函数size来查看数组的维数。
>> size(a) ans= 4 1
(2)显示字符元素
字符串的每个字符(包括空格)都是字符数组的一个元素。
>> a(2) ans = o
(3)链接串
使用该函数将几个字符串连接成一个字符串。
>> x='this'; >> y=' is'; >> z=strcat(x,y) z = this is
(4)替代串
使用一个字符串替换另一个字符串。
>> x='who are you'; >> y='how'; >> z=strrep(x,'who',y) z = how are you
MATLAB的其他字符串操作函数见表2-1。
表2-1 字符串操作函数表
2.2.2 操作实例
例1:修改字符大小写。
例1
>> x='MATLAB 2016A' x = MATLAB 2016A >> Y=lower(x) Y = matlab 2016a
注意:Lower函数的功能是转换串为小写,该函数有两种用法。
(1)将选中的字符转换为小写。
>> t = lower('str')
(2)将整个被复制的变量中的字符串转换为小写。
B = lower(A)
例2:编辑字符位置。
例2
>> A=' happybirthday ' A = happybirthday >> B= strjust(A,'RIGHT') B = happybirthday >> B=strjust(A,'left') B = happybirthday >> B= strjust(A,'center') B = happybirthday
注意:strjust函数的功能是整理字符数组,该函数包括四种方式。
(1)自动整理字符位置。
>> T = strjust(S)
(2)将字符位置调整在右侧。
>> T = strjust(S, 'right')
(3)将字符位置调整在左侧。
>> T = strjust(S, 'left')
(4)将字符位置调整在中间位置。
>> T = strjust(S, 'center')
例3:为字符串添加空格。
例3
>> A=sprintf('happy\tbirthday') A = Happy birthday >> A=sprintf('happy\tbirthday\tto\tyou') A = happy birthday to you
2.2.3 向量定义
向量是由n个数a1, a2, …, an组成的有序数组,记成
叫作n维向量,向量a的第i个分量记为ai。
向量的生成有直接输入法、冒号法和利用MATLAB函数创建三种方法。
1. 直接输入法
生成向量最直接的方法就是在命令窗口中直接输入。格式上的要求如下:
•向量元素需要用“[ ]”括起来;
•元素之间用空格、逗号或分号分隔。
(1)行向量
用空格和逗号分隔生成行向量。
① 使用空格间隔。
>> x=[1 2 3 4] x = 1 2 3 4
② 使用逗号间隔。
>> x=[1,2,3,4] x = 1 2 3 4
(2)列向量
用分号分隔形成列向量。
>> x=[1;2;3;4] x = 1 2 3 4
2. 冒号法
冒号表达式的基本形式为x=x0:step:xn,其中x0、step、xn分别为给定数值,x0表示向量的首元素数值,xn表示向量尾元素数值限,step表示从第二个元素开始,元素数值大小是与前一个元素数值大小的差值。
xn为尾元素数值限,而非尾元素值,当xn-x0恰为step值的整数倍时,xn才能成为尾元素值。若x0<xn,则需step>0;若x0>xn则需step<0;若x0=xn,则向量只有一个元素。若step=1,则可省略此项的输入,直接写成x=x0:xn。此时可以不用“[ ]”。
>> x=0:4:16 x = 0 4 8 12 16
创建一个从0开始,增量为4,到16结束的向量x。
(1)创建无间隔行向量
表达式:
a:b
表示一行从1到5的整数。
>> 1:5 ans = 1 2 3 4 5
(2)创建带间隔行向量
为了改变递变的间隔,可以指定一个间隔长度,表达式为:
a:b:c
a表示初始值,b表示间隔值,c表示终止值。
>> 1:2:16 ans = 1 3 5 7 9 11 13 15
3. 函数法
(1)线性等分向量
linspace通过直接定义数据元素个数,而不是数据元素直接的增量来创建向量。此函数的调用格式如下。
linspace(first_value, last_value,number)
该调用格式表示创建一个从first_value开始至last_value结束,包含number个元素的向量。
创建一个从0开始,到10结束,包含6个数据元素的向量x。
>> x=linspace(0,10,6) x = 0 2 4 6 8 10
(2)对数等分的向量
与linspace一样,logspace也通过直接定义向量元素个数,而不是数据元素之间的增量来创建数组。logspace的调用格式如下。
logspace(first_value, last_value,number)
表示创建一个从10first_value开始,到10last_value结束,包含number个数据元素的向量。
>> x=logspace(1,5,3) x = 10 1000 100000
2.2.4 课堂练习——求解区间数值
求解区间数值
创建一个从10开始,到211结束,包含4个数据元素的向量x。
操作提示。
使用线性等分向量linspace直接得到结果。
2.2.5 矩阵定义
MATLAB以矩阵作为数据操作的基本单位,这使得矩阵运算变得非常简捷、方便、高效。
矩阵是由m×n个数aij(i = 1,2,…,m; j = 1,2,…,n)排成的m行n列数表,记成
也可以记成aij或Am×n。其中,i表示行数,j表示列数。若m=n,则该矩阵为n阶矩阵(n阶方阵)。
注意:由有限个向量所组成的向量组可以构成矩阵,如果A=(aij)是m×n矩阵,那么A有m个n维行向量;有n个m维列向量。
矩阵的生成方法主要有直接输入法、M文件生成法和文本文件生成法等。
1. 直输入法
在键盘上直接按行方式输入矩阵是最方便、最常用的创建数值矩阵的方法,尤其适合较小的简单矩阵。在用此方法创建矩阵时,应当注意以下几点。
•输入矩阵时要以“[ ]”为其标识符号,矩阵的所有元素必须都在括号内。
•矩阵同行元素之间由空格(个数不限)或逗号分隔,行与行之间用分号或Enter键分隔。
•矩阵大小不需要预先定义。
•矩阵元素可以是运算表达式。
•若“[ ]”中无元素,表示空矩阵。
•如果不想显示中间结果,可以用“;”结束。
(1)创建简单数值矩阵,对比与向量的创建方法有何不同。
>> a=[1 2 3;1 1 1;4 5 6] a= 1 2 3 1 1 1 4 5 6
(2)创建一个带有运算表达式的矩阵。
>> B=[sin(pi/3),cos(pi/4);log(3),tanh(6)] B = 0.8660 0.7071 1.0986 1.0000
在输入矩阵时,MATLAB允许方括号里还有方括号,下面创建一个3维方阵。
>> [[1 2 3];[2 4 6];7 8 9] ans = 1 2 3 2 4 6 7 8 9
2. 利用文本创建
MATLAB中的矩阵还可以由文本文件创建,即在文件夹中建立txt文件,在命令窗口中直接调用此文件名即可。
(1)事先在记事本中建立文件。
1 2 1 1 2 4 1 3 8
(2)以data.txt保存,在MATLAB命令窗口中输入。
>> load data.txt >> data data = 1 2 1 1 2 4 1 3 8
由此创建矩阵。
x= 1 2 1 1 2 4 1 3 8
2.2.6 操作实例
例1:创建元素均是5的5×5矩阵。
例1
>> a=[5 5 5 5 5;5 5 5 5 5;5 5 5 5 5;5 5 5 5 5;5 5 5 5 5] a = 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
例2:创建字符矩阵A。
其中,
例2
>> A=[['a','a','a'];[' ',' ','a'];['a','a',' ']] A = aaa a aa
例3:创建包含复数的矩阵A。
例3
其中,。
>> A=[[1,1+i,2];[2,3+2i,1]] A = 1.0000 + 0.0000i 1.0000 + 1.0000i 2.0000 + 0.0000i 2.0000 + 0.0000i 3.0000 + 2.0000i 1.0000 + 0.0000i
2.2.7 课堂练习——创建成绩单
创建成绩单
将某班期末成绩单保存成文件演示。
操作提示。
(1)创建文本文件“qimo.txt”,如图2-1所示,分别输入数学、语文、英语的成绩,并将该文件保存在系统默认目录下。
图2-1 记事本文件
(2)使用函数qimo导入到命令窗口中。
2.2.8 符号变量定义
在MATLAB符号数学工具箱中,符号表达式是代表数字、函数和变量的MATLAB字符串或字符串数组,它不要求变量有预先确定的值。符号表达式包括符号函数和符号方程,其中符号函数没有等号,而符号方程必须带有等号,但是两者的创建方式是相同的,都是用单引号括起来。MATLAB在内部把符号表达式表示成字符串,以与数字相区别。符号变量定义方法有两种:sym x或者syms x,两者有区别也有共同点。
(1)定义对象不同
syms是定义符号变量,sym是将字符或者数字转换为字符。
>> sym x ans = x
在工作区显示将该变量定义给存储变量。
>> syms y
在工作区显示直接定义该变量。
(2)定义对象个数不同
syms可以看做sym的复数形式,前者可定义多个变量,后者只能对一个变量进行赋值。
>> sym x1 x2 %定义两个变量 错误使用 sym/assume (line 514) 输入 应与以下字符串之一相匹配: 'integer', 'rational', 'real', 'positive', 'clear' 'x2' 输入与任何有效字符串均不匹配。 出错 sym (line 190) assume(S, n); >> syms x1 x2 %定义两个变量
(3)定义对象格式不同
syms可以直接定义符号函数d(r),并且可以对函数的形式进行赋值,但是sym却不可以写为sym d(t),只是将d(t)生成了一个整体的符号。
>> sym y(x) %定义变量 警告: Support of strings that are not valid variable names or define a number will be removed in a future release. To create symbolic expressions, first create symbolic variables and then use operations on them. > In sym>convertExpression (line 1536) In sym>convertChar (line 1441) In sym>tomupad (line 1198) In sym (line 177) ans = y(x) >> syms y(x) %定义变量
2.2.9 课堂练习——定义变量x
定义变量x
确定变量x的值。
操作提示。
(1)对变量x赋值。
(2)清除变量的值。
(3)重新对变量进行赋值。