已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,三 字符串元胞构架数组,字符串数组 字符串数组的属性和标识 复杂串数组的创建 串转换函数和串操作函数 元胞数组 构架数组 数据类型归纳,2,3.1 字符串数组 (Character String Array),例3-1 字符串入门 String1=b; String2=This is an example!; % 英文字母、空格、数字、标点、中文字符 String3=例子char array; % 都是占一个元素位,两个字节 s1=class(String1) s1 = char s2=size(String2) s2 = 1 19 whos Name Size Bytes Class String1 1x1 2 char array String2 1x19 38 char array String3 1x14 28 char array s1 1x4 8 char array s2 1x2 16 double array Grand total is 26 elements using 64 bytes,3,3.1.1 字符串数组的属性和标识,1) 创建串数组:必须将待建字符放在“单引号对”中,“单引号对”必须在英文状态下输入。 2) 串数组的大小:size指令获得串数组的大小。串中的每一个字符,包括中英文字符、空格、标点都算一个元素。 3) 串数组的标识:自左向右用数字1、2、3、4标识。 4) ASCII码显示:abs和double指令可以显示串数组对应的ASCII码数值数组。char指令则可以把ASCII码数值数组转换成串数组。 5) ASCII码数组的操作:可以对ASCII码数组进行数值数组的各种运算。 注意: 必须在英文状态下输入“单引号对”。 当字符串中包含单引号时,用连续两个单引号表示。,4,例3-2 串数组基本操作, string = this is an example! %输入字符串string string = this is an example! s_1 = string( end : -1 : 1 ) %倒序排列string得到s_1 s_1 = !elpmaxe na si siht w = string =a & string STRING = string; %将小写字符转换成大写字符 STRING( w ) = char( string(w)-32 ) % ASCII 码相差 32 STRING = THIS IS AN EXAMPLE! Str= Exm03_2.m, string(5:end) %构造新的字符串 Str = Exm03_1.m is an example!,5,3.1.2 复杂字符串数组的创建,1) 直接输入多行串数组 必须保证各行等长,可以利用增减“空格”实现。 s=Hello, % 6个元素,需要补充11个空格 Nice to meet you!; % 17个元素 2) 利用串操作函数创建 常用的有:char , str2mat , strvcat。 不需要考虑各行长度,自动按最长行设置。 s = char(Hello,Nice to meet you!); s = str2mat(Hello,Nice to meet you!); s = strvcat(Hello,Nice to meet you!); size(s) = 2*17 区别:str2mat认为空串 代表空行;strvcat省略空串 s1 = str2mat(Hello,Nice to meet you); size(s1) = 3*17 s2 = strvcat(Hello, , Nice to meet you!); size(s2) = 2*17, *ones(1,11),6,3) 利用串转换函数创建 常用的有:int2str , num2str , mat2str int2str : 整数数组转换成字符串,非整数四舍五入。 num2str : 非整数数组转换成字符串。 mat2str : 数值数组转换成字符串。 区别: a=0.9576 0.8 2.151; 4.0 5 7.8 a1=int2str( a ) %取整数 a2=num2str( a,2 )%2位有效数字 a3=mat2str( a,2 ) %一行字符,a = 0.9576 0.8000 2.1510 4.0000 5.0000 7.8000 a1 = 1 1 2 4 5 8 a2 = 0.96 0.8 2.2 4 5 7.8 a3 = 0.96 0.8 2.2;4 5 7.8,7,例3-3 作出函数图形,并标注最大值点。,clear t = 0 : 0.01 : 10; y = exp( -2*t ) .* sin( 3*t ); y_max, i_max = max( y ); t_text = t = , num2str( t(i_max) ) ; y_text = y = , num2str( y_max ) ; max_text = char( Maxium, t_text, y_text ); Title = y = exp( -2*t ) .* sin( 3*t ) ; figure plot( t,zeros( size(t) ), k ) hold on plot( t, y, b ) plot( t(i_max), y_max, r., MarkerSize, 20 ) text( t(i_max)+0.3, y_max+0.05, max_text ) title( Title ); xlabel( t ) ylabel( y ) hold off,%清除内存变量 %时间 t 从 0 到 10 每隔 0.01 均匀采样 %对应每一个 t 求 y 值 %求最大值 y_max 及其下标 i_max %横坐标字符串 %纵坐标字符串 %三行字符来标识最大值点 %图名称字符串 %新建一个图形窗 %画一条黑色的水平线 %保持图形不被清除 %蓝色实线画曲线 y(t) %大小为 20 的红圆点标记最大值点 %在最大值点附近显示注释字符 %显示图名、横坐标名、纵坐标名 %取消图形保持,8,9,作业一,作出函数图形,并标注最大值点、最小值点 发Email: 截止日期:2003年11月22日,10,3.1.3 串转换函数和串操作函数,字符串转换函数详见 P82 表 3.1.1,11,字符串操作函数详见 P83 表 3.1.2,12,3.2 元胞数组,特点: 1) 元胞数组的每一个基本组成部分成为一个元胞(cell),元胞在数组中以下标来进行区分。 2) 元胞可以是任何类型、任意大小的数组(例如:数值数组、字符串数组、符号对象等等)。 3) 一个元胞数组中各个元胞可以是不同类型的内容。 4) 元胞数组的维数不受限制,可以采用单下标或全下标寻址。 注意: 圆括号对“( )”和花括号对“ ”的不同作用。 A( 2,3 ):表示元胞数组A第 2 行第 3 列的元胞。 A 2,3 :表示元胞数组A第 2 行第 3 列的元胞中的内容。,13,例3-4元胞数组的基本应用,C = char( 这是, 元胞数组 ); %两行的字符串数组 R = reshape( 1:9,3,3 ); % 3*3 的数值数组 S = sym( sin(-3*t)*exp(-t) ); %符号表达式 A( 1,1 ) = C ; %对元胞数组 A 进行赋值 A 2,1 = S; %注意 和 () 的区别 A 2,2 = R; A %显示元胞数组 A 的元胞 A = 2x4 char 1x1 sym 3x3 double celldisp( A ) %显示元胞数组 A 的元胞中的内容 A1,1 = 这是 元胞数组 A2,1 = sin(-3*t)*exp(-t) A1,2 = ,当用圆括号来寻址时,所表示的是元胞,相应的等号右边也应该是一个元胞; 当用花括号寻址时,表示的是元胞中的内容,相应的等号右边是元胞中的内容,可以是任意类型、大小的数组。,A = 2x4 char 1x1 sym 1x1 cell A( 2,2 ) = 1x1 cell A 2,2 = 3x3 double A 2,2 1 = 1 4 7 2 5 8 3 6 9 A 2,2 1 ( 1,3 ) = 7,14,A2,2 = 1 4 7 2 5 8 3 6 9 class( A(2,1) ) %元胞的类型 ans = cell class( A2,1 ) %元胞的内容的类型 ans = sym A( 2,1 ) % A 的第2行第1列的元胞 ans = 1x1 sym A 2,1 % A 的第2行第1列的元胞中的内容 ans = sin(-3*t)*exp(-t) save exm03_4.mat %保存内存变量 显示元胞数组内容的指令是 celldisp。如果直接在指令窗口输入元胞数组名,则只能看到元胞内容的属性,不显示元胞的内容。单元素的元胞除外,可以显示元胞的内容。,15,例3-5 元胞数组的扩充、收缩和重组,clear, load exm03_4 %载入数据文件,得到元胞数组 A B = cell( 2 ); %创建空的 2*2 元胞数组 B B 1,1 = Another cell array; %对元胞数组进行赋值 B( :,2 ) = num2str(R) ; 1+2i %注意前后大小都是 2*1 B = Another cell array 3x7 char 1.0000+ 2.0000i %元胞数组的重组 AB = A B %将 A, B 作为两列排列得到 2*4 的元胞数组 AB = 2x4 char Another cell array 3x7 char 1x1 sym 3x3 double 1.0000+ 2.0000i A_B = A ; B %将 A, B 作为两行排列得到 4*2 的元胞数组 A_B = 2x4 char 1x1 sym 3x3 double Another cell array 3x7 char 1.0000+ 2.0000i,16,cellplot( A_B , legend ) %元胞数组的形象结构图,带图例 %元胞数组的收缩 A_B( 3,: ) = %删除元胞数组的第 3 行,得到 3*2 的元胞数组 A_B = 2x4 char 1x1 sym 3x3 double 1.0000+ 2.0000i RA_B = reshape( A_B, 2,3 ) %重新排列元胞数组的内容,得到 2*3 的元胞数组 RA_B = 2x4 char 3x3 double 1x1 sym 1.0000+ 2.0000i,17,%元胞数组内容的调取 A_B( 2,2 ) %取出 A_B 中的一个元胞 ans = 3x3 double A_B 2,2 %取出该元胞的所有内容 ans = 1 4 7 2 5 8 3 6 9 A_B 2,2 ( 2,: ) %取出该元胞中第 2 行的所有元素 ans = 2 5 8 a1,a2 = deal( A_B 1,2 ) %一次取出多个元胞,并逐个分配 a1 = 这是 元胞数组 a2 = sin(-3*t)*exp(-t),18,3.3 构架数组,特点: 1) 基本组成部分是构架(Structure),以下标区分各个构架。 2) 构架必须划分成“域”后才能使用。 3) 构架不能直接存放数据,数据必须存放在构架下面的“域”中。 4) 构架的域可以存放任意类型、任意大小的数组(数值数组、字符串数组、符号对象、元胞等)。 5) 不同构架的同名域中可以存放不同类型的内容。 6) 构架数组可以是任意维的,可以利用单下标或全下标寻址。,19,例3-6 构架数组的基本操作,已知:2输入2输出的LTI线性时不变系统的系统传递函数,利用表示该传递函数的构架数组来练习构架数组的基本操作。,%1. 创建代表 2 输入 2 输出系统的传递函数的构架数组 clear num = 3,2 ; 4 1,1 ; %分子系数构成的元胞数组 den = 1,3,2,1,1,1 ; 1 2 2 1,1 0 ; %分母系数构成的元胞数组 ss = tf( num , den ); %利用控制工具箱函数产生传递函数矩阵 SST = struct( ss ) %将传递函数矩阵转换成构架数组,20,SST = num: 2x2 cell %元胞数组 den: 2x2 cell %元胞数组 Variable: s %字符串 lti: 1x1 lti % lti系统 %2. 获取构架数组的域名 FN = fieldnames( SST ) %获取域名,以元胞数组的形式保存 FN = num den Variable lti class( FN ) ans = cell,21,%3. 获取构架数组域中的内容 ff = SST.den %获取 SST 的 den 域中的所有内容,为 2*2 的元胞数组 ff = 1x3 double 1x3 double 1x4 double 1x2 double ff 2,1 %获取 ff 中第 2 行第1列中内容,相当于 SST.den2,1 ans = 1 2 2 1 poly2str( ff2,1,s ) %以易读形式显示多项式 ans = s3 + 2 s2 + 2 s + 1 %4. 赋值操作 SST.num 2,1 ans = 0 0 4 1 SST.num 2,1 = 1 3 1 ; %对 SST 的 num 域中 (2,1) 的元胞内容进行修改 SST.num 2,1 ans = 1 3 1,22,%5. 构架数组的扩充 size( SST ) ans = 1 1 SST( 2,2 ) = struct( tf(1,1 1) ) %将 SST 扩充为 2*2 的构架数组 SST = 2x2 struct array with fields: num den Variable lti size(SST) ans = 2 2,构架数组扩充、收缩示意图,23,%7. 构架数组内容的调取 Snum = SST( 1,2 ).num %取出 SST 构架数组第1行第2列的构架的 num 域 Snum = %Snum 为元胞数组 1x2 double Sden = SST( 1,2 ).den %取出 SST 构架数组第1行第2列的构架的 den 域 Sden = %Sden 为元胞数组 1x2 double printsys( Snum1, Sden1, s ) %利用系统函数打印函数显示 SST % 的第1行第2列的构架所代表的系统函数 num/den = 1 - s + 1,Snum = SST( 1,2 ).num 1 %取出 SST构架数组 (1,2) 的构架的 num 域的内容 Sden = SST( 1,2 ).den 1 %取出 SST构架数组 (1,2) 的构架的 den 域的内容 printsys( Snum, Sden, s ),24,例3-6 其他命令,clear dept(5).No = 5; % 生成 1*5 的构架数组,只有No域 dept(2).teacher=5 % 任一个构架增加 teacher 域, % 整个构架数组都增加 teacher 域 dept = 1x5 struct array with fields: No teacher dept(2).teacher.male=2; % 增加一个构架的 teacher 域的子域, dept(2).teacher.female=3; % 对其他构架没有影响 dept(2).teacher ans = male: 2 female: 3 dept(2).teacher=rmfield(dept(2).teacher.male);% 删除子域对其他架构没有影响 dept=rmfield(dept,teacher); % 删除域对所有架构都有影响 dept = 1x5 struct array with fields: No,对构架数组增加或减少一个域会影响构架数组内所有的构架。 对某一个构架的域增加或减少一个子域不会影响构架数组内的其它构架。,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡村振兴就业协议书
- 木房装修协议书范本
- 主体信用评级协议书
- 木方木夹板合同范本
- 2026-2031年中国商业银行行业深度调研与投资战略研究报告
- 2026-2031年中国三甲苯行业市场调查及投资战略预测报告
- 秩序门岗试题带答案
- 托福口语试题及答案
- 教师请假安全协议书
- 景区管理员招聘考试景区管理知识考试题及答案
- 2025年前三季度中国股权投资市场研究报告
- 2026南方传媒校园招聘笔试考试参考试题及答案解析
- 中国人保招聘面试题及答案
- 2022年申报第二类医疗器械产品注册完整资料参考
- 乙肝梅毒艾滋知识培训
- 科技创新归纳
- 柳公权书法介绍
- 2025年郑州铁路职业技术学院单招职业技能考试题库及答案
- 海南医院面试题目及答案
- 血液内科缺铁性贫血教案
- GB/T 5760-2025塑料离子交换树脂氢氧型阴离子交换树脂交换容量的测定
评论
0/150
提交评论