MATLAB其他数据类型.ppt_第1页
MATLAB其他数据类型.ppt_第2页
MATLAB其他数据类型.ppt_第3页
MATLAB其他数据类型.ppt_第4页
MATLAB其他数据类型.ppt_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章MATLAB其他数据类型 4 1字符与字符串4 2单元数组4 3结构型变量4 4符号型变量 MATLAB支持的数据类型见下图 4 1字符与字符串 4 1 1生成字符串4 1 2字符串元素的读取与显示4 1 3字符串的ASCII操作4 1 4字符串的运算4 1 5字符串的执行 4 1 1生成字符串字符与字符串运算是各种高级语言不可缺少的部分 Matlab具有强大的字符处理能力 在MATLAB7 0中的字符串一般是ASCII值的数值数组 它作为字符串表达式进行显示 字符串一般以行向量的形式存在 并且每一个字符占用两个字节的内存 字符串是一个ASCII码的字符数组 与普通数组一样 字符串也可以形成矩阵 表现为一个字符串有多行 但是 这些行必须有相同数目的列数 因此 要用空格以使所有行有相同长度 字符串和字符数组 字符串必须用单引号括起来 字符串是由多个字符组成的字符行向量 str1 MatrixLaboratory str2 M a t r i x 字符数组必须是方的 即每行的字符个数必须相等 str3 M a t r i x 若需要在字符串内容中包含单引号 则需要在键入字符串内容时 连续键入两个单引号即可 使用char函数 ASCII码 字符串 直接赋值只需用单引号 将需设定的字符串引注即可 stringname thecontentofthestring str1 Matrix str2 Laboratory str str1 str2 str char 77 97 116 108 97 98 str char str1 str2 生成一个字符数组 第一行为str1 第二行为str2 例4 8 字符数组存储方式 a house china tiger a housechinatigera数组保存字符的顺序为 hctohiuigsneear 4 1 2字符串元素的读取与显示由于字符串是数值数组 可按数组操作进行读取 用户可以根据需要读取已经设定的字符串中的某一个元素或是多个元素 字符串的显示有两种方式 直接显示和利用disp函数进行显示 例4 10 读取例4 8中字符数组a的第6个元素 a的第1个到6个元素 并使用disp函数显示a的第1个到6个元素 a house china tiger a 6 ans i a 1 6 ans hctohi disp a 1 6 hctohi str Matrix double str 3 double str Matlab中字符是以ASCII码存储的 因而区分大小写 可用double函数查看一个字符的ASCII码 4 1 3字符串的ASCII操作例4 11 求取字符串s AaBbCc123 的ASCII码 并将其反变换字符串 存储在变量S中 s AaBbCc123 double s ans 659766986799495051 S char ans ascii char reshape 32 127 32 3 由于MATLAB7 0语言是用C语言开发的 因此它的字符串操作与C语言的操作基本相同 常用的字符串操作函数如表所示 4 1 4字符串的运算 1 判断字符串是否相同 2 字符串中字符的分类 3 查找与替换 4 字符串的合并 5 字符串与数值的转换 1 判断字符串是否相同 1 2 字符串的比较主要为比较两个字符串是否相同 字符串中的子串是否相同和字符串中的个别字符是否相同 用于比较字符串的函数主要是strcmp和strncmp strcmp 用于比较两个字符串是否相同 用法为strcmp str1 str2 当两个字符串相同时返回1 否则返回0 当所比较的两个字符串是单元字符数组时 返回值为一个列向量 元素为相应行比较的结果 strncmp 用于比较两个字符串的前面几个字符是否相同 用法为strncmp str1 str2 n 当字符串的前n个字符相同时返回1 否则返回0 当所比较的两个字符串时单元数组时 返回值为列向量 元素为相应行比较的结果 还可以通过简单运算比较两个字符串 当两个字符串拥有相同的维数时 可以利用MATLAB运算法则 对字符数组进行比较 字符数组的比较与数值数组的比较基本相同 不同之处在于字符数组比较时进行比较的是字符的ASCII码值 进行比较返回的结果为一个数值向量 元素为对应字符比较的结果 需要注意的是在利用这些运算比较字符串时 相互比较的两个字符串必须有相同数目的元素 1 判断字符串是否相同 2 2 例4 13 调用函数strcmp和strncmp判断字符串word1 word2是否相等 word1 what word2 whatever N strcmp word1 word2 N 0 M strncmp word1 word2 4 M 1 例4 14 使用运算比较符来比较字符串word1 word2 注 此时必须满足word1 word2是相同维数的 word1 what word1后面加了四个空格 word2 whatever N word1 word2 N 11110000 M word1 word2 M 11111111 进行比较返回的结果为一个数值向量 元素为对应字符比较的结果 2 字符串中字符的分类在MATLAB7 0语言中 字符串中的字符通常可以分为空白字符 字母字符和其他类型的字符 用户可以用以下两个函数对字符串中的字符进行分类 isspace 用法为isspace str 判断字符串str中的字符是否为空格 是空格字符则返回1 否则返回0 isletter 用法为isletter str 判断字符串str中的字符是否为字母 是字母则返回1 否则返回0 例4 15 演示字符分类 word1 what word2 whatever isspace word1 ans 00001111 word2 e 可以统计word2中含有字符e的个数ans 00001010 3 查找与替换 查找与替换是字符串操作中的一项重要内容 用于查找的函数主要有findstr strmatch strrep strtok等 findstr 用于在一个字符串中查找子字符串 返回子字符串出现的起始位置 用法为findstr str1 str2 执行时系统首先判断两个字符串的长短 然后在长的字符串中检索短的子字符串 strrep 查找字符串中的子字符串并将其替换为另一个子字符串 用法为str strrep str1 str2 str3 将str1中的所有子字符串str2替换为str3 strmatch 在字符数组的每一行中查找是否存在待查找的字符串 存在则返回1 否则返回0 用法为strmatch str STRS 查找str中以STRS开头的字符串 另外可以用strmatch str STRS exact 查找精确包含STRS的字符串 strtok 该函数用于选取字符串中的第一个部分 一个单词 该函数的简单用法为strtok str 例4 16 演示字符串的查找与替换 s1 Thisisagoodexample a1 findstr s1 a a1 918 a1 findstr s1 good a1 11 str strrep s1 good great str Thisisagreatexample 字符串利用 运算符进行合并 不过合并字符串时需要注意以下两点 若使用 作为不同字符串之间的间隔 则相当于扩展字符串成为更长的字符串向量 若使用 作为不同字符串之间的间隔 则相当于扩展字符串成为二维或者多维的数组 这时 不同行上的字符串必须具有同样的长度 4 字符串的合并 水平合并 直接使用中括号 使用strcat函数 str1 hello world str2 strcat hello world 使用strcat时 自动去除原字符串结尾处的空格 水平合并得到的是一个更长的字符串 垂直合并 直接使用中括号 使用strvcat函数 str3 Matrix Laboratory str4 strvcat Matrix Laboratory 在中括号中用分号实现垂直合并 必须保证每个字符串的长度相等 否则需用空格补齐 用strvcat合并 自动为较短的字符串补充空格 垂直合并得到的是一个字符数组 数值矩阵到字符数组 num2str int2str mat2str字符数组到数值数组 str2num 字符串 字符数组与数值数组之间的转换 按ASCII码转换 字符数组到数值数组 double 数值数组到字符串 char 直接将数值数组转换成字符数组 4 字符串与数值的转换 在MATLAB7 0语言中 还可以使用hex2num和hex2dec等函数实现十进制 十六进制和二进制数字之间的转换 如表所示 例4 17 a 97 97 3 97 8 98 str1 char a str2 num2str a str3 int2str a str4 mat2str a char的输入参数范围为 0 65535 当输入参数中有小数时 直接将小数部分舍去 num2str直接将每个数字转换成字符 mat2str把整个矩阵转换成字符行向量 包括矩阵中的方括号 空格和分号 逗号自动去除 例4 18 str5 mat2str 97 97 3 97 8 98 数值数组转换为字符数组后 表面上看象一个数值数组 但此时的元素是字符而不是数字 a 1 2 3 b num2str a c 2 ad 2 b e 2 str2num b 4 1 5字符串的执行 执行字符串所表示的表达式或命令 eval str 1 2 a eval str eval string 的作用就是相当于在命令窗里输入string这个命令并执行 比如eval a rand 2 3 就相当于在命令窗输入a rand 2 3 后回车 str A magic 3 eval str 例4 19 用eval执行路径改变命令 cdc pathname D MATLAB701 eval cd pathname 执行的功能同cdD MATLAB701 str1 figure 1 mesh peaks 60 str2 figure 2 waterfall peaks 60 eval str1 eval str2 4 2单元数组 元胞数组 4 2 1单元数组的生成4 2 2元胞数组的基本操作4 2 3单元数组的显示与获取4 2 4单元数组的变维处理 元胞数组是MATLAB的一种特殊数据类型 可以将元胞数组看作无所不包的通用矩阵 或者叫做广义矩阵 组成元胞数组的元素可以是任何一种数据类型的常数或者变量 每一个元素也可以具有不同的尺寸和内存占用空间 每一个元素的内容也可以完全不同 所以元胞数组的元素叫作元胞 cell 和一般的数值矩阵一样 元胞数组的内存空间也是动态分配的 与数值数组相同 元组数组的维数不受限制 元胞数组可以是一维的 二维的 甚至也可以是多维的 访问元胞数组的元素可以使用单下标方式或者全下标方式 4 2 1元胞数组的创建组成元胞数组的内容可以是任意类型的数据 所以创建元胞数组之前需要创建相应的数据 1 用赋值语句直接定义 A 12 34 str Matlab M 1 4 A str celldisp M 可以通过以下两种方式定义一个元胞变量 创建元胞数组需要使用运算符花括号 例如在创建数组A时 使用花括号将不同类型和尺寸的数据组合在一起构成了元胞数组 在这个数组中有标量 多维数组 向量和字符串 注意创建B时使用了不同的方法 该方法是将数组的每一个元素都使用花括号括起来 然后再用数组创建的符号方括号 将数组的元素括起来 还有一种创建元胞数组的方法 如创建数组C时所用的方法 MATLAB自动扩展数组的尺寸 没有被明确赋值的元素作为空元胞数组存在 一般说来 构成元胞数组的数据类型可以是字符串 双精度数 元胞数组 结构或其他MATLAB数据类型 每一个元胞数据也可以为标量 向量 矩阵 N维数组 2 用cell函数预先分配存储空间 然后对元胞的每个元素逐个赋值 cell m n 生成一个m行n列的元胞数组 cell函数的作用是用来创建空元胞数组 可以创建一维 二维或多维数组 但是创建的数组都为空元胞 注意区别空数组 0个字节 和空元胞之间 4个字节 占用内存的区别 4 2 2元胞数组的基本操作主要包括对元胞数组元胞和元胞数据的访问 修改 元胞数组的扩展 收缩或者重组 与操作一般的数值数组相类似 操作数值数组的函数也可以应用在元胞数组上 例如 这里使用圆括号直接访问元胞数组的元胞 获取的数据也是一个元胞数组 例 元胞元素的访问 使用花括号可以直接获取元胞数组的元胞内容 例4 20 使用cell函数生成元胞数组 A cell 2 2 A A 1 1 1A 1 A 1 2 wang A 1 wang 4 2 3元胞数组的显示与获取 A 12 34 str Matlab M 1 4 A str N hello M eye 2 magic 3 N 1 1 N 1 2 N 1 2 1 2 N 1 2 1 2 2 1 元胞变量的引用必须使用大括号 相关函数 celldisp 输出元胞变量的内容 cellplot 用图形方式显示元胞变量的内容 iscell 判别一个变量是否为元胞变量 例 A 12 34 str Matlab M 1 4 A str celldisp M cellplot M iscell A iscell M celldisp函数用于显示单元数组的全部内容 有时候只需要显示单元数组的一个单元 可以用花括号对单元进行索引 例4 21 使用celldisp函数显示元胞数组内容 A 1 wang 1 3i 12 34 celldisp A A 1 1A 2 wangA 3 1 0000 3 0000iA 4 1234 例4 22 使用花括号获取元胞数组的内容 A 1 wang 1 3i 12 34 A 1 ans 1 A 4 A 4 其类型为cell型 而A 4 类型为其应属的类型ans 1234 4 2 4元胞数组的变维处理 改变数组的维数可以通过添加或删除数组元素完成 删除数组元素时 采用的索引方式为一维下标 格式为 A cell subscripts 得到的元胞数组为原数组中剩下元素排列而成 为一维数组 添加数组元素时 自动添加该数组所对应的行和列 其他元素为空 另外可以通过函数reshape改变数组的形状 reshape函数按照顺序将原元胞数组的元素进行重新放置 得到新的元胞数组元素个数与原数组相同 例4 23 添加或删除单元数组的单元 A 1 wang 1 3i 12 34 B 56 78 li zhang 123 456 C A B D A B F D whosCD E D 1 D 2 D 4 F 2 F 2 5 energy 例4 24 使用reshape函数改变单元数组的结构 A 1 wang 1 3i 12 34 B reshape A 2 2 B 1 1 0000 3 0000i wang 2x2double whosAB在MATLAB7 0语言中 与单元数组相关的操作还有iscell cellfun和num2cell等函数 大家可以参考MATLAB7 0的Help做进一步了解 4 3结构型变量 4 3 1结构型变量的生成4 3 2结构型变量的操作 和C语言类似 MATLAB也具有结构类型的数据 结构 struct 是包含一组记录的数据类型 而记录 则存储在相应的字段中 结构的字段可以是任意一种MATLAB数据类型的变量或者对象 4 3 1结构型变量的生成可以使用两种方法生成结构型变量 一种是在命令窗口中直接输入 还有一种是使用struct函数 通过直接输入结构体各元素值的方法可以创建一个结构体 输入的同时定义该元素的名称 并使用 将变量名与元素名连接 struct函数的最基本的使用方式是struct name struct field1 V1 field2 V2 其中fieldn是各成员变量名 Vn为对应的各成员变量的内容 例4 25 用直接输入法生成结构型变量 student score 90958910099 student name LiNing student weight 69 student height 178 student number 200708008 student whosstudent 例4 26 使用struct函数生成结构型变量s struct field1 field2 createsanemptystructurewithfieldsfield1 field2 student struct number 200708008 200709009 name LiNing MaLin student 2 name 4 3 2结构型变量的操作对于结构的基本操作其实就是对结构型变量元素包含的记录的操作 主要有结构记录数据的访问 字段的增加和删除等 访问结构数组元素包含的记录的方法很简单 直接使用结构数组的名称和字段的名称以及操作符 完成相应的操作 添加成员变量 如果需要向结构体中添加新的成员 可以直接输入该变量的名称并赋值 例4 27 在结构型变量中添加成员变量 student struct number 200708008 200709009 name LiNing MaLin student 1 gender Male student 1 age 21 student 2 gender Male student 2 age 22 student 删除成员变量 在MATLAB中可以使用函数rmfield从结构体中删除成员变量 命令S rmfield S field 将删除结构体S中的成员field 同时保留S原有的结构 可以使用命令S rmfield S fields 一次删除多个成员 其中fields为字符行变量或者元胞型变量 该命令删除fields中指定的成员 例4 28 在结构型变量中删除成员变量s rmfield s field removesthespecifiedfieldfromthestructurearrays student struct number 200708008 200709009 name LiNing MaLin student rmfield student name student 1x2structarraywithfields number 在MATLAB7 0中 getfield和setfield函数也是有关结构型变量的函数 getfield函数获取当前存储在某个成员变量中的值 setfield函数给某个成员的变量插入新的值 其作用与 结构型变量名 filed 新值 等价 例4 29 getfield和setfield函数的使用 student struct number 200708008 200709009 name LiNing MaLin GETF getfield student 2 number SETF setfield student 2 number 20120752 例4 29 getfield和setfield函数的使用 4 4符号型变量 4 4 1符号变量 符号表达式和符号方程的生成 独立变量 4 4 2符号表达式的操作4 4 3符号函数画图 4 4 1符号变量 符号表达式和符号方程的生成符号变量要先定义 后引用 可以用sym函数 syms函数将运算量定义为符号型数据 例4 32 使用sym函数定义符号表达式ax2 bx cx sym x createsthesymbolicvariablewithname x andstorestheresultinx a sym a b sym b c sym c x sym x f a x 2 b x cf a x 2 b x c 例4 32 使用sym函数定义符号表达式ax2 bx c syms函数的功能比sym函数要更为强大 它一次可以创建任意多个符号变量 而且 syms函数的使用格式也很简单 格式为 symsarg1arg2 例4 33 使用syms函数定义符号表达式ax2 bx c symsabcx f a x 2 b x cf a x 2 b x c 例4 34 使用syms函数生成符号方程式ax2 bx c 2 symsabcx f sym a x 2 b x c 2 f a x 2 b x c 2 补充 当字符表达式有一个变量是独立变量 其余的文字符号作为常量处理 前面所指的独立变量也称为缺省变量 是在求函数的极限 导数和积分时 如果用户没有明确指定自变量 MATLAB将按缺省原则确定主变量并对其进行相应微积分运算 可用findsym S 1 查找系统的缺省变量 symsabcx f sym a x 2 b x c 2 findsym S 1 findsym S 4 如果用户不指定哪一个变量是独立变量 MATLAB将用以下规则选择一个独立变量 除去i和j的小写字母 表达式中如果没有其他字母 选择x的字符变量 如果有多个字符变量 选择在字母顺序中最接近x的字符变量 如果有相连的字母 选择在字母表中较后那个 例如 symsxyz diff sin x cos y tan z ans cos x findsym sin x cos y tan z 1 ans x diff sin x cos y tan z y ans sin y 符号常量 不含变量的符号表达式叫做符号常量 例如 f sym 2 4 6 f 2 4 6如果要求f的数值运算 利用subs指令可以完成 subs f ans 2 4 4 2符号表达式的操作 1 提取分子和分母 2 符号表达式的四则运算 3 合并符号表达式的同类项 4 符号多项式的因式分解 5 符号多项式的化简 6 符号表达式的替换求值 7 符号微积分 1 提取分子和分母如果一个表达式是一个有理分式 或是可以展开为有理分式 可以利用numden命令来提取分子或分母 例如 f sym s 1 s 2 5 s 6 f s 1 s 2 5 s 6 nm dm numden f nm s 1dm s 2 5 s 6 2 符号表达式的四则运算符号表达式的四则运算与通常的算术式一样 可以进行四则运算 例4 36 符号表达式的四则运算 symsxyab f1 sin x cos y f1 sin x cos y f2 a bf2 a b f1 f2ans sin x cos y a b 3 合并符号表达式的同类项R collect S v 将符号矩阵S所有同类项合并 并以v为变量输出 例4 37 使用collect函数合并符号表达式的同类项 symsxy d 5 x 2 x 3 y x 2 y 1 5 x y xd 5 x 2 x 3 x 2 y y 1 5 x y x collect d x ans x 3 5 y x 2 5 y x y 1 4 符号多项式的因式分解格式为R horner P 将符号表达式P进行因式分解 例4 38 使用horner对符号多项式进行因式分解 symsx f1 2 x 3 4 x 2 5 x 10f1 2 x 3 4 x 2 5 x 10 horner f1 ans 10 5 4 2 x x x 5 符号多项式的化简simplify S 命令将符号表达式S中的每个元素都进行简化 而simple S 函数要比simplify S 函数简单 所得的结果也比较合理 symsx f1 2 x 3 4 x 2 5 x 10f1 2 x 3 4 x 2 5 x 10 t horner f1 t 10 5 4 2 x x x simple t 2 x 2 x 2 5 例4 39 使用simplify和simple函数对符号函数进行化简 symsx f cos x 2 sin x 2f cos x 2 sin x 2 simplify f ans 2 cos x 2 1 simple f ans cos 2 x 6 符号表达式的替换求值使用subs函数可以将符号表达式中的字符型变量用数值型变量替换 subs S old new 例4 40 使用subs函数进行替换求值操作 symsxy f x 2 x subs f x 2 ans 2 subs f x y ans y 2 y 例4 41 求解下列方程组 并算出a 2 b 5时 x y的值 symsabxy x y solve a x b y 1 0 a x b y 5 0 x y x 3 ay 2 b subs x 2 a ans 1 5000 subs y 5 b 7 符号微积分例4 42 求下列函数的极限limit F x a takesthelimitofthesymbolicexpressionFasx a limit F a usesfindsym F astheindependentvariable limit F usesa 0asthelimitpoint limit F x a right orlimit F x a left specifythedirectionofaone sidedlimit symsax f sin x x limit f x a ans sin a a limit f x 0 ans 1 limit f x inf ans 0 例4 43 求下列函数的微分diff s v n 以v为自变量 对符号表达式s求n阶导数 symsxy f y 2 x 5 f1 diff f x 2 f1 20 y 2 x 3 f2 diff f1 y 1 f3 sin x f4 diff f3 x 1 f5 diff f3 x 2 例4 44 求下列函数的积分int s v a b 求定积分运算 以v为自变量 a与b分别表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论