字符和字符串
MATLAB中一个字符串是存储在一个行向量中的文本,这个行向量中的每一个元素代表一个字符。实际上,元素中存放的是字符的内部代码,即ASCII码。由于字符串是以向量的形式来存储的,因此可以通过它的下标对字符中的任何一个元素进行访问。字符矩阵也可以通过下标索引进行访问,但是矩阵的每行字符数必须相同。
String = 'Every good boy dose fun.';
size(String);
ans =
1 24
ans表示String为1x24的矩阵,空格和句号亦为元素,字符+空格+句号=24个元素。
获取String字符串的第7~10个元素
u=String(7:10)
u=
good
获取第10~7个元素u=String(10:7)
<span style="color:#CC0000;">Empty matrix: 1-by-0</span>
如果要取反向元素,这样是错的,应该这样写:
u=String(10:-1:7)
u=
doog
字符串内的单引号是右两个连续的单引号来表示的
string='It''s not the manual!'
string=
It's not the manual!
字符串的链接
u='Hello,'
v='world!'
w=[u v]
w=
Hello,world!
函数句柄
我对函数句柄的理解是:函数句柄就是一个包含了函数名的变量,使用函数句柄即为调用句柄表示的函数。
注意:创建函数句柄需要用到操作符@
f=@cos
f=
@cos
cos(0)
ans=
1.0000
f(0)
ans=
1.0000
在上面的例子里,f等同于cos函数,调用f即为调用cos
>>x = 0 : 0.25*pi : 2*pi
x=
0 0.7854 1.5708 2.3562 3.1416 3.9270 4.7124 5.4978 6.2832
>>f(x)
ans=
1.0000 0.7071 0.0000 -0.7071 -1.0000 -0.7071 -0.0000 0.7071 1.0000
函数句柄的操作函数
1.functions(f)
返回一个结构体,存储了函数的名称、函数类型(simple或overloaded),以及函数M文件的位置
>>f=@exp;
>>functions(f)
ans=
funciton: 'exp'
type: 'simple'
file: ''
2.func2str(f)
将函数句柄转换为函数名称字符串
3.str2func(str)
将字符串代表的函数转换为函数句柄
4.save filename.mat funhandle
将函数句柄保存在*.mat文件中
5.load filename.mat funhandle
把*.mat文件中存储的函数句柄加载到工作区
6.isa(var,'function_handle')
检测变量var是否是函数句柄,真返回1,假返回0
>>isa(f,'function_handle')
ans=
1
7.isequal(funhandlea,funhandleb)
检测两个函数句柄是否对应于同一个函数
结构体
创建结构体的两种方法:
(1)通过字段复制创建结构体。格式为:结构体名称.字段名称
>> student.name='sam';
>>student.grade=6;
>>student.subject={'chinese','math','english'};
student =
name: 'sam'
grade: 6
subject: {'chinese' 'math' 'english'}
(2)利用struct函数创建结构体。
struct函数的句法形式为:StrArray = struct('field1', var1, 'field3', var2,...,'fieldn', varn)
>> scedule(2)=struct('Day','Thursday','Time','15:00','Number','18')
scedule =
1x2 struct array with fields:
Day
Time
Number
>> scedule(1)
ans =
Day: []
Time: []
Number: []
>> scedule(2)
ans =
Day: 'Thursday'
Time: '15:00'
Number: '18'
结构体第一个元素scedule(1)没有赋值,因此scedule(1)所有字段均为空数组。
函数repmat(A,M,N)表示,创建每个元素均为A的MXN矩阵
>> scheduleArray=repmat(struct('Day','Thursday','Time','15:00','Number','18'),2,2)
scheduleArray =
2x2 struct array with fields:
Day
Time
Number
>> scheduleArray(1,2)
ans =
Day: 'Thursday'
Time: '15:00'
Number: '18'
结构体数组
>> newArray=struct('Day',{'Thursday','Firday'},'Time',{'15:00','9:00'},'Number',{18,6})
newArray =
1x2 struct array with fields:
Day
Time
Number
>> newArray(1)
ans =
Day: 'Thursday'
Time: '15:00'
Number: 18
>> newArray(2)
ans =
Day: 'Firday'
Time: '9:00'
Number: 6
数组类型
在MATLAB中,数组的定义是广义的,数组的元素可以是任意的数据类型,例如可以是数组、字符串、指针等。
对变量赋值创建数组
>> array=[1 2 3 4 5 6 ]
array =
1 2 3 4 5 6
使用冒号":"来代表一系列数值
(1)array=i:k
创建从i开始,步长为1,到k结束的数字序列
>> array=1:6
array =
1 2 3 4 5 6
(2)array=i:j:k
创建从i开始,步长为j,到k结束的数字序列
>> array=1:2:7
array =
1 3 5 7