1、1,MATLAB编程基础,之 MATLAB数值数组、字符、元胞与结构数组,第二讲,2,数组的构造,1. 按元素直接排列输入X=1 pi/2 2+i 10X=1; pi/2; 2+i ;10x=a:inc:b 2.由内部函数或语句产生y=linspace(x1,x2) 生成100维行向量y=linspace(x1,x2,n) 生成n维行向量y=ones(m,n) 产生一个元素值为1的m*n大小的数组 3.M文件创建制作M文件后,使用该文件名,则代表该数组 4. 从外部数据文件导入可使用load等命令,3,向量向量元素用“”括起来,元素间用空格、逗号或分号分隔;注意:空格和逗号分隔成行向量,分号分
2、割成列向量。 冒号表达式生成向量基本格式:xx1:step:x2xx1:x2,?a=1:2:12a =1 3 5 7 9 11?a=12:-2:1a =12 10 8 6 4 2?a=1:6a =1 2 3 4 5 6,4,变量及数组输入,5.矩阵方式输入a=1,2,3;4,5,6;7,8,0 %矩阵输入 (a为3阶方阵) b=366;804;351 %列矩阵输入 det(a) %方阵行列式 inv(a) %方阵的逆 x=ab %ax=b方程组的解 y=inv(a)*b %与x相同 disp(a,b,x) %显示矩阵,5,线性等分向量生成y=linspace(x1,x2) 生成100维行向量y
3、=linspace(x1,x2,n) 生成n维行向量,?a=linspace(1,100,6)a =1.0000 20.8000 40.6000 60.4000 80.2000 100.0000,6,对数等分向量生成y=logspace(x1,x2) 生成50维对数等分向量,y(1)=10x1 y(50)=10x2y=logspace(x1,x2,n) 生成n维对数等分向量y(1)=10x1 y(n)=10x2,?a=logspace(0,5,6)a =1 10 100 1000 10000 100000,7,标准数组生成函数ones 产生全1数组zeros 产生全0数组diag 产生对角形数
4、组eye 产生单位数组rand 产生均匀分布随机数组randn 产生正态分布随机数组,8,向量的基本运算 与数运算,a = 1.0000 20.8000 40.6000 60.4000 80.2000 100.0000?a-1ans =0 19.8000 39.6000 59.4000 79.2000 99.0000?a*2ans =2.0000 41.6000 81.2000 120.8000 160.4000 200.0000,9,函数运算,三角函数与双曲函数x=0:pi/4:piy1=sin(x)y2=sinh(x)plot(x,y1,r-d,x,y2,b-.) 指数函数exp log1
5、0 pow2 log log2 sqrt 复数函数abs conj real angle imag 圆整函数和求余函数ceil向正无穷圆整 floor向负无穷圆整 rem求余数 mod模除求余数 矩阵变换函数x=1 2 3;4 5 6;7 8 9y1=rot90(x) %矩阵逆时针90度翻转y2=diag(x) %产生或提取对角阵y3=fiplr(x) %矩阵左右翻转y4=fipud(x) %矩阵上下翻转 其他函数y5=mean(x)y6=sum(x)y7=max(x)y8=max(max(x),10,关系运算和逻辑运算,关系运算= = =x=1:2:9y=3:7xyx=yx=y 逻辑运算&
6、| (x4)&(y4)(y6),11,数组的扩展,C=A,B垂直串联A=1 2;3 4;5 6B=7 8C=A,B C=A;B水平串联A1=1 2;3 4;5 6B1=7 8C1=A1;B1,12,扩展函数,变维 reshape(X,M,N) X变为MN维 reshape(X,M,N,P,) X变为MNP或reshape(X,M N P ) “:” 操作符,?a=1:12; ?b=reshape(a,2,6)b =1 3 5 7 9 112 4 6 8 10 12,?c=zeros(4,3); ?c(:)=a(:)c =1 5 92 6 103 7 114 8 12,13,x=reshape(
7、1:9,3,3)x(4,4)=100x(:,5)=50x(5,:)=55,14,字符数组,创建字符数组 1、字符串的约定 字符串用单引号输入赋值; 字符串的每个字符都是都是字符数组的一个元素; 字符串和字符数组基本上等价。 class和ischar来查看变量是否为字符数组,?s=symbolics =symbolic,?size(s)ans =1 8,?s(3)ans =m,?class(s)ans = char ? ischar(s) ans=1,15,字符串操作strcat strcmp strvcat strncmpfindstr upper lower blanksdeblank ,1
8、6,2.多行字符串应保证每行字符串的长度相同,否则补足空格 B=This is a;This is a dog Any problem? Not same size,在第一行加入四个空格 B=This is a ;This is a dog ok!,17,3.利用串操作函数创建多行字符串专门函数char、str2mat、strvcat创建多行字符串总是按照最长行设置其他行字符串长度,用空格找齐B=char(This is a,This is a pig)B=str2mat(您好,这是个示例,由3行组成。),18,4.空串专门函数blanks创建空串、deblank删除尾部的空格符blanks(
9、2)str=hello ;size(str)str=deblank(str);size(str),19,5.利用元胞数组创建复杂字符串c=matlab7.0,http:/;文宇工作室,matlab7.0编程基础; disp(c1,1),disp(),20,字符串的操作,字符串的转换num2str 数字转换为字符串int2str 整数转换为字符串mat2str 矩阵转换为字符串str2num 转换字符串为数字fprintf 格式化数据输出到文件中或者屏幕上,21,1.串与数值的转换 (1)int2strA=eye(3,4)A_str=int2str(A)ischar(A_str)(2)num2s
10、tr和str2num数值与字符串互换函数B=rand(2,3) B_str=num2str(B,3)str2num(1 2;3 4) (3)mat2str函数B_str=mat2str(B,4) Excute_str=10*,B_str;,?t=1/(a*b-1);a=2;b=3;c=eval(t)c =0.2000,22,执行字符串 x=(0:100)/100*pi; Y=sin(x).*sin(9*x); plot(x,y) axis(0,pi,-1,1.5) y_max,i_max=max(y); x_text=x=,num2str(x(i_max); y_text=y=,num2str
11、(y_max); max_text=char(maxinum,x_text,y_text) hold on plot(x(i_max),y_max,b., Markersize,20); text(t(i_max)+0.03,y_max+0.2,max_text); hold off,23,2.串与ASCII码的转换 m_str=Hello; n_num=abs(m_str) char(n_num) %转换成字符串 setstr(n_num) %把ASCII转换成字符串,24,3.字符串英文大小写转换 m_str=Hello; upper_str=upper(m_str) lower_str=
12、lower(m_str),25,4.字符串的比较 strcmp()和strncmp() 5.字符串的查询与置换 findstr strfind,26,元胞数组元胞为任意类型、任何大小的多维数组,其定义需用大括号,元素间用逗号隔开。,?a=1,2;3,4a =1 23 4?b=1:4,a,abcdb = 1x4 double 2x2 double abcd?cellplot(b),27,元胞数组的创建与显示1)直接赋值a(1,1)=It is a setup example;a(1,2)=1 2 3;4 5 6;a(2,1)=;a(2,2)=sym(sin(t);2)先用cell函数进行预分配,
13、在给元素赋值只是创建一个指定大小的元胞数组,并且默认给元胞数组赋值为空数组 Nest_cell(1,1)=magic(5); Nest_cell(1,2)=5 2 8;7 3 0;6 7 3 Test 1;2-4i 5+7i 17 ,28,元胞数组元素的引用采用大括号为下标标识,用小括号只显示该元素的压缩形式。,?b2ans =1 23 4?b(2)ans = 2x2 double,29,元胞数组与数值数组间的转换 F1,1=1 2;3 4; F1,2=-1 0;0 1; F2,1=7 8;4 1; F2,2=4i3+2i; 1-8i 5; for k=1:4for m=1:2for n=1:2NUM(m,n,k)=Fk(m,n)endend end G=cell(1,16); for m=1:16Gm=NUM(m) end,30,结构数组,与元胞数组相似,结构数组也能在一个数组中存放各类数据 结构数组的基本元素叫结构 结构的基本存储结构叫域 域与元素差别:元素是组成数组的基本单元,而域是组成结构(结构数组元素)的基本单元,元素域,