660 likes | 932 Views
一维数组及其应用. 一、一维数组简介 二、创建一维数组 三、一维数组的访问和赋值 四、数组运算 五、与一维数组相关的一些常用函数 六、一维数组在二维绘图中的应用 七、一维数组在向量运算中的应用 八、一维数组在一元多项式运算中的应用. n 个元素排成一行,又称为 行向量 ( row vector ) 常被 看作为 1 X n 矩阵(二维数组). 一、一维数组简介. 1 、行数组. n 个元素排成一列,又称为 列向量 (column vector ) ,常看作为 n X1 矩阵(二维数组) 在 Matlab 中提到 向量 ,一般都是指的列向量.
E N D
一维数组及其应用 一、一维数组简介 二、创建一维数组 三、一维数组的访问和赋值 四、数组运算 五、与一维数组相关的一些常用函数 六、一维数组在二维绘图中的应用 七、一维数组在向量运算中的应用 八、一维数组在一元多项式运算中的应用
n个元素排成一行,又称为行向量(row vector) 常被 看作为 1 X n 矩阵(二维数组) 一、一维数组简介 1、行数组
n个元素排成一列,又称为列向量(column vector),常看作为 n X1 矩阵(二维数组) 在Matlab中提到向量,一般都是指的列向量 2、列数组
3、标量(scalar) 一个数,称为标量,在Matlab中看作为 1 X 1 矩阵(二维数组) a = 在matlab中,使用a(1)和a(1,1)都可以访问变量a Matlab中,标量和向量一般用小写字母表示
二、创建一维数值数组 1、用方括号[ ]创建一维数组 • 整个数组放在方括号里 • 行数组元素用空格或逗号分隔 x = [ 2, pi/2, sqrt(3), 3+5i ] • 列数组元素用分号分隔,分号起换行 y = [ 2; pi; 3/4; j ] • 标点符号一定要在英文状态下输入
2、用[ ]由小数组生成大数组 (1)执行如下赋值语句: (3)再执行如下赋值语句: a = [ 1, 3 ] b = [ 2, 4 ] c = [ 3; 5 ] g = [ c; c ] h = [ g; g ] (2)然后执行如下赋值语句: 此时: g = ? h = ? d = [ a, a ] f = [ d,b ] 此时:d = ? f = ?
3、用[ ]生成空数组 x = [ ] 方括号内无字符,或只包含空格,则生成空数组。此时在matlab内部生成一个double类型的变量x,其内容为空,占用0字节。空数组在进行数组并置操作(二个小数组合并为一个大数组)时,经常用到。 (1)执行如下赋值语句: (2)然后执行如下赋值语句: x = [ ] a = [ 2, 4 ] b = [ 3,5 ] x = [ x, a ] x = [ x, b ] 此时:x = ?
4、用冒号:创建一维数组 x = a:b x = a:inc:b a,b必须为实数,若未提供inc的数值,则inc = 1 a是数组x中的第一个元素,b不一定是数组x的最后一个元素。 若inc取的不合适,可能会生成空数组。 生成如下数组 x = [a, a+inc, a+2*inc, … ] x = 1:10 y = 10:-2:-10 z = [ 1:2:99, 2:2:100 ] w = 2:3:-10 x = ? y = ? z = ? w = ?
5、用linspace()函数创建一维数组 x = linspace(a,b) a,b可以为复数 x = linspace(a,b,n) 在a和b之间,均匀生成 n (未提供n时,n=100)个数据,包括a和b在内。 若a,b为实数,等效于: 执行如下赋值语句后,x = ? y = ? x = linspace(0, 8, 17) y = linspace(1+i, 4+4*i, 7)
6、用logspace()函数创建一维数组 x = logspace(a,b) x = logspace(a,b,n) 先在a和b之间均匀生成n个数据,包括a和b,然后以这n个数据为指数,生成一维数组x。 例:x = logspace(1,2,6)生成的数组为: x=[101, 101.2, 101.4, 101.6, 101.8, 102 ] =[10.0000, 15.8489, 25.1189, 39.8107, 63.0957, 100.0000] x = logspace(a,pi,n)
三、一维数组的访问和赋值 b = x(end) end是数组x的最后一个元素的下标 引用数组 x 中的最后一个元素,将其赋值给变量 b 1、引用一维数组中的单个元素 x = 1:5 k = 2 a = x(k) 引用数组 x 中的第 k 个元素,将其赋值给变量 a Matlab中数组元素的下标从 1 开始 c = x(8)会出现什么结果?
2、一维数组中单个元素的赋值 x = 1:5 a = 1.5 k = 3 x(k) = 0 将 0 赋值给数组 x 中的第 k 个元素 x(end) = a 将 a 赋值给数组 x 中的最后一个元素 x(8) = 6.5 会出现什么结果?
3、引用一维数组中的子数组 引用一维数组x中的第2、5、9个元素,将其赋值给变量 a x = linspace(1,5) s = [2,5,9] a = x(s) x = linspace(1,5) a = x([2,5,9]) b = x(end:-1:1) c = x(1:2:end) d = x(2:2:end) b = ? c = ? d = ?
4、一维数组中子数组的赋值 x = linspace(1,5) s = [1,4] a = [2,7] x(s) = a x = linspace(1,5) x([1,4]) = [2,7] 将2、7分别赋值给x的第1、4个元素
5、利用空数组进行赋值可以修改数组的大小 (1)执行如下赋值语句: x = 10:10:70 x(2) = [ ] 此时:x = ? (2)再执行如下赋值语句: x([2,4]) = [ ] 此时:x = ?
四、数组运算 数组运算是Matlab软件定义的运算规则,其目的是为了数据管理方便、操作简单、指令形式自然和执行计算的有效。 无论在数组上施加什么运算(加减乘除或函数),总认定那种运算对被运算数组中的每个元素(Element)进行运算。
1、一维数组的转置运算 x.’ x’ 对x做转置(行→列,列→行) 对x做共轭转置 若x的元素均为实数,则x.’与x’的结果相同 y = x.’ 对数组x做转置运算,将运算结果赋值给变量y,内存中数组x的内容并没有任何变化。 x1 = (1:10).’ y1 = (1:10)’ x2 = linspace(i,10*i).’ y2 = linspace(i,10*i)’
2、一维数组的数学运算 (1) 两个一维数组之间的数学运算 • x + y:加,对应位置的数组元素相加 • x - y:减,对应位置的数组元素相减 • x.*y:点乘,对应位置的数组元素相乘 • x./y:右点除,对应位置的数组元素相除 • x.\y:左点除 • x.^y:点幂,对应位置的数组元素做幂运算 一维数组x、y 维数相同 时,可以进行如下如下的数组运算: 运算结果为与x、y同维的数组
(2)一维数组与标量 之间的数学运算 x+c :x的每个元素加c x-c: x的每个元素减c x.*c 或 x*c:x的每个元素乘c, x./c 或 x/c: x的每个元素除以c x.\c 或 x\c:c除以x的每个元素 x.^c:点幂, x的每个元素做幂运算 c.^x:点幂,c做幂运算 x为一维数组,c为一个数(标量),x和c之间可以进行: 运算结果为与x同维的数组
练习:试写出下列matlab语句的输出结果,并在matlab中进行验证。练习:试写出下列matlab语句的输出结果,并在matlab中进行验证。 a = [1,1, 1] b = [1, 0, 0] c = [ 0, 0, 0] d = (a+b).*(a-b) e = (d + 1) + (d - 1)*i f = e.’./e’ + e.’.\e’ g = b.^d + d.^b
3、一维数组的关系运算 (1)两个一维数组之间的关系运算 进行比较的两个数组必须维数相同,比较在两数组相同位置上的元素间进行,返回一个由0和1组成的“逻辑数组” 。
(2)一维数组和标量之间的关系运算 标量可以与任何维数组进行比较。比较在此标量与数组每个元素之间进行,因此比较结果与被比数组同维,返回一个由0和1组成的“逻辑数组” 。
(3)关系运算中的注意事项 比较两个数是否相等的关系运算符是“ == ”,单个的等号“ = ” 是变量赋值符号。 不等于的关系运算符是“ ~= ”,不要与 C 语言的不等于符号“ != ” 混淆。 比较两个浮点数是否相等时需要注意,由于浮点数的存储时的误差的存在,在程序设计中要避免直接比较两个浮点数是否相等,而是采用大于、小于的比较运算将待确定值限制在一个满足需要的区间之内。 3<x<7这样的数学表达式必须用逻辑“与”运算才能正确表示。
4、一维数组的逻辑运算 逻辑运算可以在标量与标量,数组与数组,标量与数组间进行 a = [0, 1, 2, 0, 3], b = [4, 5, 0, 0, 6], c = 7 在逻辑表达式中,作为输入的任何非 0 实数都被看作是“逻辑真”,只有 0 才被认为是“逻辑假”。 标量(一个数)可以与任何维数组进行逻辑运算。运算在标量与数组每个元素间进行。 当两个数组进行逻辑运算时,参与运算的数组必须维数相同,运算在两数组相同位置上的元素间进行。
5、逻辑数组用作 “逻辑索引” A = 1:10 L = logical([0 1 0 1]) A(L) 逻辑索引:通过逻辑数组 L 中“逻辑1”所在的位置,指出数组 A 中元素的的位置,从而可以对A 数组中的元素(子数组)进行访问或赋值。 L 的元素个数应等于或小于 A 的元素个数,一般情况下,L 应是与 A 同维的逻辑数组
6、函数作用在数组上的运算规则 Matlab中的很多函数都可以直接以数组作为输入参数,函数会作用在数组的每个元素上。 输入为行数组,则输出也为行数组 输入为列数组,则输出也为列数组
关系、逻辑运算举例 在100, 103, 106, 109, ... , 148, 151这些整数中,能被 7 整除的数有哪些? A = 100:3:151 B = rem(A,7) L = B==0 r = A(L) 100以内的哪些正整数满足:0.7 < sin(n) < 0.75 ? n = 1:100 L1 = sin(n)>0.7 L2 = sin(n)<0.75 L = L1&L2 r = n(L)
五、与一维数组相关的一些常用函数 当函数的输入参数为一维数组x时(x为行或列):
六、一维数组在二维绘图中的应用 x,y为同维的一维数组,二维绘图函数plot(x,y)的绘图原理:分别以x,y对应位置的元素为横坐标和纵坐标,得到n个数据点,描点,然后依次将第1,2,…,n点连线,绘制出二维图形。
x = 0:0.1:10*pi y = sin(2*x).*cos(x/2) plot(x,y) 数组乘法
1、向量的模(长度) a = [4,3,1] d = sqrt(sum(a.*a)) 或: d = sqrt(sum(a.^2))
2、两点之间的距离 a = [4,3,1] b = [5,2,3] AB = sqrt(sum((a - b).^2))
3、向量的方向角与方向余弦,单位向量 a = [4,3,1] d = sqrt(sum(a.^2)) e0 = a./d
4、向量的线性运算 直接利用matlab的数组运算规则即可进行运算 a = [4,3,1] b = [5,2,3] c = 1.6 p = a + b s = a – b d = c*a
5、两向量的数量积(内积/点积/点乘) Matlab中提供了 dot()函数实现两向量的数量积 = dot(a,b) = sqrt(dot(a,a))
6、两个向量之间的夹角 tmp = dot(a,b)/sqrt(dot(a,a))/sqrt(dot(b,b)) theta = acos(tmp)
7、两向量的向量积(叉乘) Matlab中提供了 cross()函数实现两向量的向量积 = cross(a,b)
8、向量的混合积: = dot(cross(a,b),c)
3.以A(1,2,3),B(2,0,5),C(4,2,-1)为顶点的三角形的面积。3.以A(1,2,3),B(2,0,5),C(4,2,-1)为顶点的三角形的面积。 4.求以A(0,0,2),B(3,0,5),C(1,1,0),D(4,1,2)为顶点的四面体的体积。
八、一维数组在一元多项式运算中的应用 借助matlab提供的函数,处理多项式是一件非常简单的事情,很容易对多项式进行积分、微分以及求根的操作。 一元多项式在代数中占有非常重要的地位。在实际应用中如对实验数据的插值、微商和曲线拟合等,都要大量用到多项式;在矩阵分析时,也要用到一元多项式的概念。多项式函数是形式最简单的函数,也是最容易计算的函数,从理论上讲,它可以表示绝大多数复杂函数。在许多计算机的计算和编程中,很多函数值如sin(x),cos(x)等的计算都是先将函数进行Tailor展开为多项式进行逼近计算的,并且都能达到很高的精度。
在matlab中,一个一元多项式用一个行向量来表示的,向量元素为多项式系数的降幂排列,其中最后一个元素代表多项式中的0幂项。 在matlab中,一个一元多项式用一个行向量来表示的,向量元素为多项式系数的降幂排列,其中最后一个元素代表多项式中的0幂项。 1、多项式的表示和创建 p = [1,-12,0,25,116]
2、多项式的符号表示 poly2sym() 把系数向量表示的多项式转为符号表示 poly2sym(p) 用默认字符’x’来表示多项式的变量 poly2sym(p,’v’) 用字符‘v’来表示多项式的便量 p = [1,-12,0,25,116] px = poly2sym(p) pt = poly2sym(p,’t’)
3、计算多项式的值 p = [1,-12,0,25,116]; x1 = 2.3; x2 = [-1,3,7]; 计算多项式p在x处的值,x可以是标量,或数值数组 y = polyval(p,x) p1 = polyval(p,x1); p2 = polyval(p,x2);
4、求多项式的根 r = roots(p) 此函数返回多项式p的根组成的向量 p = [1,-12,0,25,116] r = roots(p) 多项式和多项式的根都是用向量表示的,为加以区别,多项式的根表示成列向量。 对于系数为实数的多项式,如果其根出现复数,则复数必是成对出现的。