第2章 数值数组
- 格式:ppt
- 大小:633.00 KB
- 文档页数:26


MATLAB2009从入门到精通2013-7-222课程主要内容•第1章MATLAB简介•第2章数值运算•第3章单元数组和结构•第4章字符串•第5章符号运算•第6章MATLAB绘图基础•第7章程序设计•第8章计算方法的MATLAB实现•第9章优化设计•第10章SIMULINK仿真初探2013-7-223第2章数值运算•本章将介绍MATLAB2009的数值计算功能,首先讲述MATLAB中的运算符,然后讲述包括MATLAB的向量、矩阵和数组,并介绍他们之间的运算。此外,还介绍了一些特殊的矩阵数据结构。另外,还对MATLAB中的多项式的运算以及多项式拟合作了详细介绍。2013-7-2242.1 MATLAB中的变量•MATLAB中的变量必须以字母打头,之后可以是任意字母、数字或下划线,变量名区分字母大小写,变量名不超过19个字符,默认变量名为ans。除此之外还包含一些特殊的变量。•who命令能够显示变量的信息;•whos命令能够显示变量的详细信息。2013-7-2252013-7-226•matlab中同样支持复数变量,表示方法为a=m+ni(j)。当n是表达式时,n与i(j)之间必须要加乘号。另外也可以用complex(x,y)来产生复数。•在循环程序段中一般不把i和j作为变量名称,以免生成数据时发生误解。2013-7-227程序实例•>> a=1+2i•a =•1.0000 + 2.0000i•>> b=1+3*i•b =•1.0000 + 3.0000i2013-7-228程序实例•>> a=sin(2)+cos(2)*i•a =•0.9093 -0.4161i•>> b=sin(2)+cos(3)i•??? b=sin(2)+cos(3)i•|•Error: Unexpected MATLAB expression.2013-7-229程序实例•>> x=sin(2);•>> y=cos(3);•>> a=complex(x,y)•a =•0.9093 -0.9900i•>> b=complex(x)•b =•0.90932013-7-2210程序实例•>> a=i+2i•a =•0 + 3.0000i•>> b=i+2*i•b =•0 + 3.0000i2013-7-2211程序实例•>> i=5;•>> a=i+2i•a =•5.0000 + 2.0000i•>> b=i+2*i•b =•152013-7-2212程序实例•>> i=5;•>> a=5+i•a =•10•>> b=5+1*i•b =•102013-7-2213程序实例•>> i=5;•>> a=5+2i•a =•5.0000 + 2.0000i•>> a=5+2*i•a =•152013-7-22142.2 MATLAB的数值运算基础2013-7-22152013-7-22162013-7-22172013-7-22182.3 数组及向量运算•由数学知识可知,数组和矩阵有着不同的概念。在MATLAB2009中,数组和矩阵在形式上有很多一致性,但是实际上它们遵循不同的运算规则。•数组运算主要是针对多个数执行同样的计算而运用的。在MATLAB中,以一种非常直观的方式来处理数组。2013-7-22192.3.1 数组构造•在MATLAB中数组表示,用户只需以左方括号开始,以空格或逗号为间隔输入元素值,最后以右方括号结束。以分号分隔不同行的元素。•>> a=[1 2 3;2 3 4]•a =•1 2 3•2 3 42013-7-22201、利用first:increment:last来创建数组•first:increment:last表示创建一个从first开始,到last结束,数据元素的增量为increment的等差数组。•冒号表示直接定义数据元素之间的增量,而不是数据元素个数。若增量为1,上面创建数组的方式可简写为:first:last。2013-7-2221程序实例•>> a=(1:2:9)•a =•1 3 5 7 9•>> b=1:2:9•b =•1 3 5 7 92013-7-22222、利用MATLAB函数linspace来创建数组•linspace通过直接定义数据元素个数,而不是数据元素之间的增量来创建数组。此函数的调用格式如下:•linspace(firstvalue,lastvalue,number)•该调用格式表示创建一个从firstvalue开始,到lastvalue结束,包含number个数据元素的等差数组。2013-7-2223程序实例•>> a=linspace(0,2,4)•a =•0 0.6667 1.3333 2.0000•>> b=linspace(0,2,5)•b =•0 0.5000 1.0000 1.5000 2.00002013-7-22243、利用logspace函数来创建对数分隔的数组•与linspace一样,logspace函数也通过直接定义数据元素个数,而不是数据元素之间的增量来创建数组。•logspace函数的调用格式为:•logspace(firstvalue,lastvalue,number)•此函数表示创建一个从10的firstvalue次幂开始,到10的lastvalue次幂结束,包含有number个数据元素的等比数组。2013-7-2225程序实例•>> a=logspace(0,2,2)•a =•1 100•>> b=logspace(0,2,3)•b =•1 10 1002013-7-22262.3.2 数组运算•数组与标量的四则运算是指数组中的每个元素与标量进行加、减、乘、除运算。•数组的指数运算为exp,以2为底的指数运算为pow2;•数组自然对数运算为log,常用对数运算为log10,以2为底的对数运算为log2,开方运算sqrt。•数组与数组之间进行运算时,每个数组必须具有相同的维数,且必须用点乘或点除。•这些运算都是数组中每个元素进行相对应的运算。2013-7-2227程序实例•>> a=[1 2]+1•a =•2 3•>> b=[1 2]-2•b =•-1 02013-7-2228程序实例•>> c=[1 2]*2•c =•2 4•>> d=[1 2].*2•d =•2 42013-7-2229程序实例•>> e=[1 2]/2•e =•0.5000 1.0000•>> f=[1 2]./2•f =•0.5000 1.00002013-7-2230程序实例•>> a=exp([1 2])•a =•2.7183 7.3891•>> b=pow2([1 2])•b =•2 42013-7-2231程序实例•>> c=log([1 10])•c =•0 2.3026•>> d=log10([1 10])•d =•0 12013-7-2232程序实例•>> e=log2([1 8])•e =•0 3•>> f=sqrt([1 9])•f =•1 32013-7-2233程序实例•>> a=[1 2]+[3 4]•a =•4 6•>> b=[1 2]-[3 4]•b =•-2 -22013-7-2234程序实例•>> c=[1 2].*[3 4]•c =•3 8•>> d=[1 2]*[3 4]•??? Error using ==> mtimes•Inner matrix dimensions must agree.2013-7-2235程序实例•>> e=[3 4]./[1 2]•e =•3 22013-7-22362.3.3 数组查询•查询x数组的第n个元素,x(n);•查询x数组的第2到4个元素,x(2:4);•查询x数组的第4到最后1个元素,x(4:end);•查询x数组的第3、2、1个元素,x(3:-1:1);•查询x数组的小于n元素,x(find(x> x=[1 2 3 4 5 6 7 8 9];•>> x(4)•ans =•4•>> x(3:5)•ans =•3 4 5•>> x(6:end)•ans =•6 7 8 92013-7-2238程序实例•>> x(5:-1:2)•ans =•5 4 3 2•>> x(find(x<4))•ans =•1 2 3•>> x([4 2 7])•ans =•4 2 72013-7-22392.3.4 数组排序•sort(x)命令将数组x中的元素按升序排列。•当x是多维数组时,命令是将x中各列元素按升序排列;•当x是一个字符型单元数组,命令是将x中的元素按ASCп码升序排列;•当x数据类型是复数,命令将按各元素的模升序排列;•y=sort(x,mode)中,mode决定排序方式,选择ascend将按升序排列,选择descend将按降序排列,y与x保持相同大小。2013-7-2240程序实例•>> x=[4 1 2;2 3 1;5 2 1];•>> a=sort(x)•a =•2 1 1•4 2 1•5 3 2•>> b=sort(x,'descend')•b =•5 3 2•4 2 1•2 1 12013-7-2241程序实例•>> x={'c','t','g','h'};•>> a=sort(x)•a = •'c' 'g' 'h' 't'•>> b=sort(x,'descend')•??? Error using ==> cell.sort at 52•DIM argument not supported for cell arrays.2013-7-2242程序实例•>> x=[3+i,2+i,4+2i,2-i];•>> a=sort(x)•a =•2.0000 -1.0000i 2.0000 + 1.0000i 3.0000 + 1.0000i 4.0000 + 2.0000i•>> b=sort(x,'descend')•b =•4.0000 + 2.0000i 3.0000 + 1.0000i 2.0000 + 1.0000i 2.0000 -1.0000i2013-7-22432.4 向量运算•向量点积运算:在高等数学中,向量的点积是指两个向量在其中某一向量方向上的投影的乘积,它通常来定义向量的长度,是个数值。c=dot(a,b)表示向量a与b的点积放在c中,a与b长度必须相同。•向量叉积运算:在高等数学中,向量的叉积是过两个向量的交点并且与这两个向量所在平面相垂直的向量,是个向量。c=cross(a,b)表示向量a与b的叉积放在c中,a与b必须是三个元素的向量,生成的仍然是一个三维的向量。2013-7-2244程序实例•>> a=[1 2 3 4];•>> b=[2 3 4 5];•>> c=dot(a,b)•c =•40•>> d=cross(a,b)•??? Error using ==> cross at 37•A and B must have at least one dimension of length 3. •>> d=cross([1 2 3],[2 1 3])•d =•3 3 -32013-7-22452.5 矩阵及其运算•MATLAB语言是由早期专门用于矩阵运算的计算机语言发展而来的,其名称就是“矩阵实验室”(Matrix Laboratory)的缩写。MATLAB语言组基本、最重要的功能就是进行实数矩阵或是复数矩阵的运算,其所有的数值功能都以矩阵为基本单元来实现。
第1页 第2章 基本数据类型、常量和变量
2.1 C数据类型简介
一个程序应该包括对数据的描述和对数据的处理。但是程序要面临处理的数据有各种各样的类型,例如有一个用来处理学生基本信息的程序,所要处理的数据包括:学生的学号和姓名都是字符串,学生的年龄是整数,学生的成绩用浮点数表示等等。而不同类型的数据不仅在机内的存储格式不同(例如整数用补码存放,而字符串是按串中每个字符的ASCII码存放的),而且可以实现的运算也不同。
为了更好地对数据进行描述和处理,C语言被设计成强类型语言(strongly typed
language),即C语言程序中的每个数据必须具有明确的类型。C语言的数据类型可分为基本数据类型(整型、字符型和浮点型)、基于基本数据类型的构造数据类型(数组、struct、union、enum)、指针类型、空类型(void),见图2-1。
C语言中数据分为常量和变量。简单理解,在程序运行过程中其值不能改变的数据就是常量,而其值可以改变的数据称为变量。下面分别介绍各种基本数据类型的常量和变量。
图2-1 C语言中的数据类型 数据类型 基本类型
字符类型 浮点类型 整型
指针类型 构造类型
枚举(enum) 数组
结构体(struct)
联合体(union)
空类型(void) 第2页 2.2 基本数据类型——整数类型
一、整型常量
整数类型常量用于表示没有小数部分的数值,在C程序中整型常量可以表示成十进制、
八进制或者十六进制形式,用不同的前缀来区分:
(1) 十进制整型常量以非0(零)数字开头,例如237、-2009;
(2) 八进制整型常量带有前缀0(零),例如027(等价的十进制数为23),-012(等价的十进制数为-10);
(3) 十六进制整型常量带有前缀0x(X),例如0x2A(等价的十进制数为42),-0XA5b(等价的十进制数为-2651)。
【例2.1】 下列哪些整型常量是合法的?
第 二 章 习 题 答 案
1. 给出以下概念的解释说明。
真值 机器数 数值数据 非数值数据 无符号整数 带符号整数
定点数 原码 补码 变形补码 溢出 浮点数
尾数 阶 阶码 移码 阶码下溢 阶码上溢
规格化数 左规 右规 非规格化数 机器零 非数(NaN)
BCD码 逻辑数 ASCII码 汉字输入码 汉字内码 机器字长
大端方式 小端方式 最高有效位 最高有效字节(MSB) 最低有效位
最低有效字节(LSB) 掩码 算术移位 逻辑移位 0扩展
符号扩展 零标志ZF 溢出标志OF 符号标志SF 进位/借位标志CF
2. 简单回答下列问题。
(1)为什么计算机内部采用二进制表示信息既然计算机内部所有信息都用二进制表示,为什么还要用到十六进制或八进制数
(2)常用的定点数编码方式有哪几种 通常它们各自用来表示什么
(3)为什么现代计算机中大多用补码表示带符号整数
(4)在浮点数的基数和总位数一定的情况下,浮点数的表示范围和精度分别由什么决定两者如何相互制约
(5)为什么要对浮点数进行规格化有哪两种规格化操作
(6)为什么有些计算机中除了用二进制外还用BCD码来表示数值数据
(7)为什么计算机处理汉字时会涉及到不同的编码(如,输入码、内码、字模码)说明这些编码中哪些用二进制编码,哪些不用二进制编码,为什么
3.实现下列各数的转换。
(1) 10= ()2= () 8= () 16
(2) 2 = ()10= () 8= () 16= () 8421
(3) (0101 1001 8421 = ()10= () 2= () 16
(4) 16 = ()10= () 2
4. 假定机器数为8位(1位符号,7位数值),写出下列各二进制数的原码表示。
+,–,+,–,+,–,+0,–0
5. 假定机器数为8位(1位符号,7位数值),写出下列各二进制数的补码和移码表示。
第二章 VFP的数据表达式
一、数据类型
1.字符型
字符型(Character,C型)通常用于储存文本信息,由字母、汉字、空格、数字、符号和标点等字符组成,宽度不能超过254字节。若超过254字节,则请改用备注型。例如:“abc”,“计算机”,“123”,“ID18”等。
2.货币型
货币型(Currency,Y型)这种类型是专为货币数据设计的数据类型,表示方法是在数字前加一个$符号。最多只能保留到小数点后4位,超过四位则会自动四舍五入:少于四位则会自动补零。占8个字节的空间。
例如:money=$980.45678。
3.数值型
数值型(Numeric,N型)用于表示数量,由数字0~9、+或-,以及小数点组成。数值型数据占8个字节,长度为1~20个字节。
VFP中文版采用十进制和十六进制两种格式。例如:98.66,0xff(前面加0x表示十六进制)。数值型数据可采用科学计数法,如“3E2”代表“3×102”,“10e-2”代表“10×10-2”。
4.整型
整型(Integer,I型)用于存储不含小数部分的数值。是一种较小的数据类型,整数型占有内存空间4个字节。
5.浮点型
浮点型(Float,F型)等价于数值型类型。VFP出于兼容性的考虑设置了这个数据类型。
6.日期型日期型(Date,D型)用于存储日期数据。由年、月、日三部分组成,存储格式为“YYYYMMDD”。表示范围为{^0001/01/01}到{^9999/12/31},即公元0001年1月1日到公元9999年12月31日。其中“^”符号表示此日期格式严格遵循YMD(year,month,day)的格式,使用日期型数据时应用大括号{}括起来。日期型数据存储长度为8个字节。例如:mydate={^2006/10/12}表示日期是2006年10月12日,而不是2006年12月10日。
7.时间日期型
时间日期型(Date Time,T型)用于记录日期时间的数据。由日期数据加具体时间构成,存储格式为“YYYYMMDDHHMMSS”。其中时间部分的取值为:00:00:00a到11:59:59p之间。例如:mydatetime={^2006/12/14 10:30:05p} 。