百年孤独 发表于 2016-3-31 16:31

数学建模十类经典算法(12)

26、判断函数:
Iscell、ischar、isequal(判断两个数组或结构体是否相同)

27、结构体:
who、whos能够查看变量和变量的相关信息;

27.<1>

对结构体的每一个字段逐一赋值:
circle.radius=2.5其中circle代表变量名,radius代表字段名,变量名和字段名都区分大小写,开头必须为字母
结构体中字段命名须注意:
1、 在为结构体中的各个字段赋值时,顺序可以不同,也就是说,先为哪个字段赋值没有顺序要求;
2、 即使对同一个字段,每次赋值时可以采用不同的数据类型,例如,我们先将一个数值赋值给一个字段,circle.radius=2.5;我们将一个字符串赋值给另一个字段,circle(2).radius=’a’

27.<2>
先对每个单元数组进行赋值,然后在使用struct函数将其组装成结构体:
例:values1={2.5 ‘sqrt(2)’ 25.4};
Values2={ [-1 0]};
Values3={‘--’ ‘:’ ‘-.’};
Values4={‘red’ ‘green’ ‘blue’};
Values5={‘yes’ ‘no’ ‘yes’};
Circle=struct{‘radius’,values1,’center’,values2,```’linestyle’,values3,’color’,values4,’filled’,values5}
结构体名称=struct{‘变量1名称’,数组名称1,’变量2名称’,数组名称2,。。。。。。}
其他:

动态寻址:由于结构体的字段名是用与变量类似的命名规则命名的,因此,我们可以先将字段名存储为一个字符串变量,然后通过引用该变量获得字段中的内容,在matlab中,这种方法叫做动态寻址。
circle.color相当于:fldr=’color’;circle.(fldr)

输出特定结构体中某个单元数组中的特定元素时,类似数据数组的操作。
例:
>> A.b
ans =
2 3 4
ans =
3 4 5
ans =
7 8 9

>> A(2).b(2:end)
ans =
4 5

要注意区分单元数组和结构体之间的区别
A{X,Y}单元数组,单元数组中只有A作为数组名;例:A{X,Y}(a,b)
B.example结构体,结构体中除了有B作为结构体名称之外,还有“.字段名”;例:B(a).example(b)

t代表一个字符串,double(t)和abs(t)可以将字符串转化为ASCII值;
char可以将一个数组(范围在0-255之间)转化为一个字符串,当数值为负值时,将转换为一个空字符,当数值超出255时,将输出ASCII码大于255的字符
字符串从其本质讲是用ASCII值表示的数组,因此它们可以用Matlab提供的所有数组处理工具进行处理。
char和strvcat功能基本相同,唯一的区别在于strvcat函数忽略空字符串输入,而char函数遇到空字符串就插入一个空行(注意:‘空格’只有空格的字符串不是空字符串,空格的字符串转化为ASCII值为32,所以它肯定是非空字符串):
>> size(char('a','b',''))

ans =

3 1

>> size(strvcat('a','b',''))

ans =

2 1
strcat(a,b)代表将a和b两个字符串水平连接起来,对应行与对应行相连接;
>> a=char('abc','def')

a =

abc
def

>> b=char('ghi','jkl')

b =

ghi
jkl

>> strcat(a,b)

ans =

abcghi
defjkl
deblank函数用于删除字符串中的空格,联想记忆:delete+blank
double和abs是为了将一个字符串转化为ASCII值;
char是为了将一个ASCII值转化为一个字符;
int2str、num2str、mat2str是用于将数组中的数字和空格变成文本格式进行存储;
sprintf函数:将数组或数据按照指定形式的字符串输出;
sprintf(‘%0.5e’,a)表示将数组a中存储的数据保留5位小数并按照科学计数法的格式输出;
格式指示符e表示转换成指数形式,f表示带有多少个小数位,g表示使用e或者f中较短的表达式。对于e和f,小数点右边的数字表示在小数点后要显示多少位,而对于g,小数点右边的数字表示总共显示多少位,小数点左边的数字指定了字符的宽度;
sscanf函数寻找一个字符串中的数值,并按照指定形式输出;
例:
>> S = '2.7183 3.1416';
A = sscanf(S,'%f')

A =

2.7183
3.1416

字符串函数汇总:
char(s1,s2,…)利用给定的字符串或单元数组创建字符数组(形成一列字符串);
double(S)将字符串转换成ASCII形式;
cellstr(S)利用给定的字符数组创建字符串单元数组(将数组变为单元数组):
blanks(n)生成由n个空格组成的字符串;
deblanks(S)删除尾部的空格;
ischar(S)判断S是否为字符串数组;
iscellstr(S)判断C是否是字符串单元数组;
isletter(S)判断S是否是字母;
isspace(S)判断S是否是空格字符;
strcat(s1,s2,…)将多个字符串进行水平相连;
strvcat(s1,s2,…)将多个字符串进行垂直相连,忽略空格;
strcmp(s1,s2)判断两个字符串是否相同;
strncmp(s1,s2,n)判断两个字符串的前n个字符是否相同;
strcmpi(s1,s2)判断两个字符串是否相同(忽略大小写);
strncmpi(s1,s2,n)判断两个字符串的前n个字符是否相同(忽略大小写);
strtrim(s1)删除字符串前后的空格;
findstr(s1,s2)在一个较长的字符串中查找另一个较短的字符串;
strfind(s1,s2)在字符串s1中查找字符串s2;
strrep(s1,s2,s3)将字符串s1中出现的s2用s3代替;
strtok(s1,D)查找s1中第一个给定的分隔符之前和之后的字符串;
upper(S)将一个字符串转化为大写;
lower(S)将一个字符串转化为小写;
sprint(S)创建含有格式控制的字符串;
sscanf(S)按照指定的控制格式读取字符串;

若C是一个单元数组,则C{}输出的是C中的内容,相当于一个普通数组;C()输出的是C的格式;
C{4}相当于C{4}(1:end);
regexp在字符串中搜索某字符并返回该字符;
regexpi在字符串中搜索某字符并返回该字符的地址;
字符串表达式:
. 用于代表任意单个字符(包括空格);
用于查找中括号中的任意一个字符;
[^asdf134]表示取反,用于查找字符串中任意一个不是中括号中的字符;


>> find(a==0)
??? Index exceeds matrix dimensions.
当使用matlab某函数报错时,不妨直接在命令框里打出该函数find,看看该函数是否因为被赋值而成为一个常量,或者观察workspace中是否有find,运行clear find之后再试

以上就是我以前学习matlab的一些笔记了,都是很基础的东东,拿出来给大家分享一下,让高手见笑了http://static.tieba.baidu.com/tb/editor/images/bobo/B_0025.gif



页: [1]
查看完整版本: 数学建模十类经典算法(12)