matlab2011教程之二数值数组及向量化运算
第三章 数值数组及向量运算
matlab 具有出色的数值计算 能力,占据世界上数值计算软件的 主导地位。 数值数组和数组运算是 MATLAB的核心内容。
3.1 数值计算的特点和地位
数值计算适合现代计算机的运行特点, 与符号计算相比,它计算速度快、容量 大,能够处理各种复杂的函数关系。
3.1 数值计算的特点和地位
例
用间距为0.1的水平线和垂直线均匀 分割 x [5,5], y [2.5,2.5] 的矩形域,在所有 水平线和垂直线交点上计算函数的值。
例(非向量化编程)
clear x=-5:0.1:5; y=(-2.5:0.1:2.5)'; N=length(x); M=length(y); for ii=1:M for jj=1:N X0(ii,jj)=x(jj); Y0(ii,jj)=y(ii); Z0(ii,jj)=sin(abs(x(jj)*y(ii))); end end
n
其中 1 , n 为矩阵a的特征值 V为对应的特征向量阵 [V,D]=eig(a) 可计算V和D (5)当p为矩阵时,只有a为标量时才能 计算 a^p,a为矩阵则不能 a^p=V*a.^D*V-1 [V,D]=eig(p)
例
>>A=[1 2 3 ;2 3 1 ;3 2 1]; >>B=A^2 >>C=A^0 >>D=2^A
2、线性(或对数)定点法 var=linspace(a,b,n) 线性 var=logspace(a,b,n) 对数 说明: a: 起始点 n: 总采样点数
b:终点
B、其它输入方法
(1) 直接输入: a=[1 2 3, 4]
各元素之间用“空格”或“,” (英文状态下) 分开;
Matlab数组及其运算
计算机仿真
20
2.5 数组的关系运算和逻辑运算
关系运算
例题2-12
<、<=、>、>=、==、~ = 标量可以与数组比较,比较在此标量和数组 的每个元素之间进行,比较结果与被比较数 组同维 数组与数组比较必须维数相同,对相同位置 数进行对比
30
2.7 元胞数组
2.元胞数组的创建和显示
【例2-18】演示: (2 × 2) 元胞数组的创建。 C_str=char('这是','元胞数组创建算例 1'); R=reshape(1:9,3,3);Cn=[1+2i]; S_sym=sym('sin(-3*t)*exp(-t)'); (1)直接创建法之一 A=cell(2,2); A(1,1)={C_str};A(1,2)={R};A(2,1)={Cn};A(2,2)={S_sy m}; A 例2-18 A = [2x10 char] [3x3 double] [1.0000+ 2.0000i] [1x1 sym ]
计算机仿真 第二章
MatLab 数组及其运算 李益兵 ahlyb@
计算机仿真
1
数值数组(Numeral Array)和数组运算(Array Operations)是MatLab的核心内容。 MatLab是以复数矩阵作为基本的运算单元,向量和 标量都作为特殊的矩阵来处理:向量当作只有一行或一列 矩阵,标量则为只有一个元素的矩阵。
计算机仿真
10
2.2.1 常用数组生成
diag([3,3,3]) diag 产生对角线数组(二维以下) eye(3);eye(3,4);eye(4,3);eye(3,3) eye 产生单位数组(二维以下)
matlab入门经典教程--第二章 数值数组及其运算(2021年整理精品文档)
(完整word版)matlab入门经典教程--第二章数值数组及其运算编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整word版)matlab入门经典教程--第二章数值数组及其运算)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整word版)matlab入门经典教程--第二章数值数组及其运算的全部内容。
第二章数值数组及其运算数值数组(Numeric Array)和数组运算(Array Operations)始终是MATLAB的核心内容。
自MATLAB5。
x版起,由于其“面向对象”的特征,这种数值数组(以下简称为数组)成为了MATALB 最重要的一种内建数据类型(Built—in Data Type),而数组运算就是定义在这种数据结构上的方法(Method)。
本章系统阐述:一、二维数值数组的创建、寻访;数组运算和矩阵运算的区别;实现数组运算的基本函数;多项式的表达、创建和操作;常用标准数组生成函数和数组构作技法;高维数组的创建、寻访和操作;非数NaN、“空”数组概念和应用;关系和逻辑操作.顺便指出:(1)本章所涉内容和方法,不仅使用于数值数组,而且也将部分地延伸使用于在其他数据结构中。
(2)MATLAB5。
x和6。
x 版在本章内容上的差异极微。
(3)MATLAB6.5版新增的两种逻辑操作,在第2。
13。
2节给予介绍。
2.1引导【例2。
1—1】绘制函数x=在1y-xe≤x时的曲线。
0≤x=0:0。
1:1y=x.*exp(-x)plot(x,y),xlabel(’x’),ylabel('y'),title(’y=x*exp(-x)’)x =Columns 1 through 70 0.1000 0。
MATLAB数组运算及向量化运算
例:>> A=[1 2 3;4 5 6]
>> B=fliplr(A) 6 5 4 >> C=flipud(A) >> D=rot90(A), E=rot90(A,-1)
A=1 2 3 4 5 6 B=3 2 1 C=4 5 6 1 2 3 D=3 6 E=4 1 2 5 5 2 1 4 6 3
8
矩阵操作
参与运算的对象必须具有相同的形状! 参与运算的对象必须具有相同的形状!
14
关系运算
MATLAB提供了6种关系运算符: MATLAB提供了6种关系运算符: 提供了 小于) < (小于)、 小于或等于) <= (小于或等于)、 大于) > (大于)、 大于或等于) >= (大于或等于)、 == (等于)、 等于) 不等于) ~= (不等于)。 不难理解, 它们的 含义 不难理解,但要注意其 书写方法 与 不尽相同。 数学中的 不等式符号 不尽相同。
要求参与加减运算的矩阵具有 相同的维数
例:>> A=[1 2 3; 4 5 6]; B=[3 2 1; 6 5 4]
>> C=A+B; D=A-B;
矩阵的普通乘法
要求参与运算的矩阵满足线性代数中矩阵相乘的原则 要求参与运算的矩阵满足线性代数中矩阵相乘的
例:>> A=[1 2 3; 4 5 6]; B=[2 1; 3 4];
17
建立5阶方阵 阶方阵A,判断A的元素是否能被 整除. 的元素是否能被3整除 例 建立 阶方阵 ,判断 的元素是否能被 整除 A =[24,35,13,22,63;23,39,47,80,80; ... 90,41,80,29,10;45,57,85,62,21;37,19,31,88,76] P = rem(A,3)==0 其中,rem(A,3)是矩阵 的每个元素除以3 是矩阵A 其中,rem(A,3)是矩阵A的每个元素除以3的余 数矩阵。此时, 被扩展为与A同维数的零矩阵, 数矩阵。此时,0被扩展为与A同维数的零矩阵,P 是进行等于(==)比较的结果矩阵。 (==)比较的结果矩阵 是进行等于(==)比较的结果矩阵。
Matlab中的向量化编程方法介绍
Matlab中的向量化编程方法介绍引言Matlab是一种流行的高级编程语言和数值计算环境,广泛应用于科学、工程、数据分析等领域。
在Matlab中,向量化编程是一种重要的技术,可以大大提高程序的执行效率和代码的可读性。
本文将介绍Matlab中的向量化编程方法,探讨其原理和优势。
1.什么是向量化编程在传统的程序设计中,往往需要通过循环来处理数组中的每个元素,这样的做法可能会导致代码冗长复杂,执行效率低下。
而向量化编程则是一种通过直接对整个数组进行操作,而不需要使用显式循环的方法。
通过向量化编程,可以使程序更加简洁高效。
2.向量化编程的原理Matlab的向量化编程原理基于矢量运算和广播机制。
在Matlab中,矢量运算指的是对整个数组进行操作,而不是逐个处理每个元素。
广播机制则是指在进行矢量运算时,Matlab会自动扩展数组的维度,使得两个不同大小的数组可以进行运算。
借助这些机制,可以实现向量化编程。
3.向量化编程的优势3.1 简洁高效通过向量化编程,可以用更少的代码来实现同样的功能。
相比于使用循环的方法,向量化编程可以减少程序的复杂性,提高代码的可读性。
同时,由于避免了循环的开销,向量化编程还可以提高程序的执行效率。
3.2 并行计算在现代计算机中,多核处理器已经成为主流。
而向量化编程可以充分利用多核处理器的并行计算能力,提高程序的执行速度。
通过Matlab中的并行计算工具箱,可以更加方便地实现向量化编程的并行化。
4.向量化编程的应用向量化编程在Matlab中的应用非常广泛。
例如,在科学计算中,可以利用向量化编程进行矩阵运算、信号处理、数值积分等。
在数据分析中,向量化编程可以用于处理大规模数据集、进行统计分析等。
在图像处理中,向量化编程可以用于图像变换、图像增强等。
5.向量化编程的实践技巧5.1 避免循环在使用Matlab进行编程时,应尽量避免使用循环结构。
尽可能地使用矢量运算和广播机制来处理数组,以提高程序的效率和可读性。
MATLAB数值计算功能(向量、矩阵、数组、稀疏矩阵)
数值计算功能向量及其运算1、向量生成(1)、直接输入向量元素用“ [ ]”括起来,用空格或逗号生成行向量,用分号生成列向量a1=[11 14 17 18]a2=[11,14,17,18]a2=[11;14;17;18]%列向量用“ ’”能够进行向量转置a1=[11 14 17 18]a4=a1'%a1 行向量,a4 列向量也能够用组合方法:A=[1 2 3];B=[7 8 9];C=[A 4 ones(1,2) B](2)、等差元素向量生成冒号生成法:Vec=Vec0:n:Vecn,此中Vec表示生成地向量,Vec0表示第一个元素,n表示步长,Vecn 表示最后一个元素使用 linespace 函数: Vec=linespace(Vec0,n,Vecn),此中 Vec 表示生成地向量 ,Vec0 表示第一个元素 ,n 表示生成向量元素个数(默认 n=100) ,Vecn 表示最后一个元素vec1=10:5:50vec2=50:-5:10vec3=linspace(10,50,6)2、向量地基本运算(1)、向量与数地四则运算向量中每个元素与数地加减乘除运算(除法运算时,向量只好作为被除数,数只好作为除数)vec1=linspace(10,50,6)vec1+100vec2=logspace(0,10,6) %对数平分向量vec2/100(2)、向量与向量之间地加减运算向量中地每个元素与另一个向量中相对应地元素地加减运算vec1=linspace(10,50,6)vec2=logspace(0,2,6)vec3=vec1+vec2(3)、点积、叉积和混淆机点积: dot 函数 ,注意愿量维数地一致性x1=[11 22 33 44]x2=[1 2 3 4]sum(x1.*x2) %还能够采纳sum 函数计算向量地址积叉积: cross 函数 ,注意愿量维数地一致性(由几何意义可知,向量维数只好为3)x1=[11 22 33 44]x2=[1 2 3 4]x3=cross(x1,x2)%报错 ,维数只好为3x1=[11 22 33]x2=[1 2 3]x3=cross(x1,x2)混淆积:结果为一个数,先求 cross,再求 dota=[1 2 3]b=[2 4 3]c=[5 2 1]v=dot(a,cross(b,c))v=cross(a,dot(b,c)) %报错矩阵及其运算MATLAB地基本单位是矩阵,逗号或空格划分同一行不一样元,分号划分不一样行素1、矩阵地生成4 种方法:在command window直接输入;经过语句和函数产生;M 文件中成立;外面数据文件中导入(1)、直接输入:把矩阵元素直接摆列到方括号中 ,每行元素用逗号或空格相隔 ,行与行之间用分号相隔martix=[1 1 1 1;2,2,2,2;3,3,3,3;4 4 4 4]冒号用法:A=[1 1 1;1 2 3;1 3 6]B=A(1:2,:)(2)文件导入:*.mat*.txt*.datload 文件名参数直接导入: File—Import Data2、矩阵地基本数值运算(1)、矩阵与是常数地四则运算(除法时,常数只好作为除数)matrix=[1 1 1 1;2,2,2,2;3,3,3,3;4 4 4 4]m1=100+matrixm2=100-matrixm3=100*matrixm4=matrix/2(2)、矩阵之间地四则运算加减法:矩阵各个元素之间地加减法,一定是同型矩阵matrix=[1 1 1 1;2,2,2,2;3,3,3,3;4 4 4 4]m2=m1+matrixm3=[11 22 33;1 2 3;4 5 6]m4=matrix-m1m5=m3+m1 %报错 ,非同型矩阵乘法:用 *, 左矩阵地列数需等于右矩阵地行数A=[1111;2222;3333;4444]B=[1592;6357;2589;4563]C=A*BD=[1 5 9;6 3 5;2 5 8]3*3矩阵相乘E=A*D% 报错 ,4*4 矩阵不可以与除法:左除( AX=B 则 X=A\B,相当于 X=inv(A)*B, 可是左除稳固性好)右除 / ( XA=B 则 X=B/A,相当于 X=B*inv(A))个人认为:左除相当于逆矩阵左乘,右除相当于逆矩阵右乘%解方程组XA=B地解 ,本列中 A=[2 1 -1; 2 1 0;1 -1 1] ;B=[1 -1 3;4 3 2] A=[2 1 -1; 2 1 0;1 -1 1]B=[1 -1 3;4 3 2]X=B/A矩阵能够使用比较运算符:结果矩阵地对应地点为0 或1数据变换:floorceilroundfixrem[n,d]=rat(A): A 表示为两个整数阵对应元素相除地形式A=n./d 3、矩阵地特点参数运算(1)、乘方与开方乘方: A^p 计算 A 地 p 次方p>0: A 地 p 次方p<0: A 逆矩阵地abs(p)次方A=[1234;4567;4567;891011]B=A^10开方:如有X*X=A,则有sqrtm(A)=XA=magic(5)B=sqrtm(A)B^2 %考证正确性(2)、指数与对数指数: expm(X)=V*diag(exp(diag(D)))/V ( [V,D]=eig(X))对数: L=logm(A),与指数运算互逆X=rand(4)Y=expm(X)A=randn(4)(3)、逆运算inv函数 ,充要条件:矩阵地队列式不为0A=[1000;1200;2130;1214]B=inv(A)广义逆矩阵(伪逆):pinv(A)非奇怪矩阵地pinv 与inv 相同(4)、队列式det函数A=[1000;1200;2130;1214]B=inv(A)x=det(A)y=det(B)i=x*y(5)、特点值E=eig(X):生成由X 地特点值构成地列向量[V,D]=eig(X): V 是以 X 地特点向量为列向量地矩阵,D 是由矩阵X 地特点值构成地对角阵D=eigs(X):生成由X 地特点值构成地列向量(eigs 函数使用迭代法求解矩阵地特点值和特点向量 ,X 一定是方阵,最好是大型稀少矩阵)[V,D]=eig(X): V 是以X 地特点向量为列向量地矩阵,D 是由矩阵X 地特点值构成地对角阵X=magic(3)A=[1 0 0;0 0 3;0 9 0]E=eig(X)[V D]=eig(X)D=eigs(A)[V D]=eigs(A)(6)、矩阵(向量)地范数norm(X) : 2-范数norm(X,2) : 2-范数norm(X,1) : 1-范数norm(X,inf) :无量范数norm(X,’fro ’): Frobenius 范数normest(X) :只好计算2-范数 ,而且是 2-范数地预计值,用于计算norm(X) 比较费时地状况X=hilb(4)norm(4)norm(X)norm(X,2)norm(X,1)norm(X,inf)norm(X,'fro')normest(X)(7)、矩阵地条件数运算矩阵地条件数是判断矩阵“病态”成都地一个胸怀,矩阵 A 地条件数越大,表示 A 越病态 ,反之 ,表示 A 越良态 ,Hilbert矩阵就是闻名地病态矩阵cond(X):返回对于矩阵X 地 2-范数地条件数cond(X,P):对于矩阵X 地 P-范数地条件数(P 为 1、 2、 inf rcond(X):计算矩阵条件数地倒数值,该值越靠近0 就越病态condest(X):计算对于矩阵X 地 1-范数地条件数地预计值M=magic(3);H=hilb(4);c1=cond(M)c2=cond(M,1)c3=rcond(M)c4=condest(M)h1=cond(H)h2=cond(H,inf)h3=rcond(H)h4=condest(H)或’fro’),越靠近 1 就越良态由以上结果能够看出,魔术矩阵比较良态,Hilbert矩阵是病态地(8)、秩rank 函数T=rand(6)rank(T) %6,满秩矩阵T1=[1 1 1;2 2 3]r=rank(T1)%r=2,行满秩矩阵(9)、迹trace 函数 ,主对角线上全部元素地和,也是特点值之和M=magic(5)T=trace(M)T1=eig(M)T2=sum(T1)4、矩阵地分解运算(1)、三角分解(lu)非奇怪矩阵 A( n*n ),假如其次序主子式均不为 0,则存在独一地单位下三角 L 和上三角阵 U, 进而使得 A=LU[L,U]=lu(X):产生一个上三角矩阵U 和一个下三角矩阵L,使得 X=LU,X能够不为方阵[L,U,P]=lu(X):产生一个单位下三角矩阵L、一个上三角矩阵U 和互换矩阵P,PX=LUY=lu(X):假如 X 是满矩阵 ,将产生一个lapack’s地 dgetrf 和 zgetrf 地输出常式矩阵Y;假如 X 是稀少矩阵 ,产生地矩阵Y 将包含严格地下三角矩阵L 和上三角矩阵U,这两种状况下,都不会有互换矩阵PX=[6 2 1 -1;2 4 1 0;1 1 4 -1;-1 0 -1 3][L U]=lu(X)[L U P]=lu(X)Y=lu(X)(2)、正交分解(qr )对于矩阵 A( n*n ),假如 A 非奇怪 ,则存在正交矩阵 Q 和上三角矩阵 R,使得 A 知足关系式 A=QR, 而且当 R 地对角元都为正时 ,QR 分解是独一地[Q,R]=qr(A) :产生一个与 A 维数相同地上三角矩阵R 和一个正交矩阵Q,使得知足A=QR[Q,R,E]=qr(A):产生一个互换矩阵E、一个上三角矩阵R 和正交阵[Q,R]=qr(A,0) :对矩阵 A 进行有选择地QR分解 ,当矩阵 A 为 m*n 前 n 列地正交矩阵QR=qr(A):只产生矩阵R,而且知足R=chol(A’*A)Q,这三者知足 AE=QR 且m>n, 那么只会产生拥有A=[17 3 4;3 1 12;4 12 8] [Q R]=qr(A)[Q R E]=qr(A)[Q R]=qr(A,0)R=qr(A)[Q,R]=qrdelete(A,j):去除第[Q,R]=qrdelete(A,j,x):在第j 列求 QR分解j 列插入 x 后求QR分解(3)、特点值分解(eig)[V,D]=eig(X):V 是以矩阵X 地特点向量作为列向量构成地矩阵,D 是矩阵X 地特点值构成地对角阵 ,知足XV=VD[V,D]=eig(A,B):对矩阵 A、B 做广义特点值分解 ,使得 AV=BVDA=magic(4)[V D]=eig(A)Z=A*V-V*DB=[17 3 4 2;3 1 12 6;4 12 8 7;1 2 3 4][V D]=eig(A,B)Z=A*V-B*V*D(4)、 Chollesky 分解( chol)当矩阵A( n*n )对称正准时,则存在独一地对角元素为正地上三角矩阵R,使得 A=R’*R,当限定 R 地对角元素为正地时候 ,该分解是独一地当矩阵 A 为非正定阵时 ,会提示犯错A=[4 -1 1;-1 4.25 2.75;1 2.75 3.5]R=chol(A)R'*R %=AA=[0 4 0;3 0 1;0 1 3]R=chol(A) %报错 ,A 为非正定阵(5)奇怪值分解(svd)[U,S,V]=svd(X):与矩阵 X 维数相同地对角阵 S、正交矩阵 U 和正交矩阵 V,使得知足 X=USV’[U,S,V]=svd(X,0):X 为 M*N 矩阵 ,当 M>N 时 ,生成地矩阵 U 只有前 N 列元素被计算出来 ,而且 S为 N*N 矩阵X=[1 2 3;4 5 6;7 8 9][U S V]=svd(X)X=[1 2 3;4 5 6;7 8 9;10 11 12][U S V]=svd(X)X=[1 2 3;4 5 6;7 8 9;10 11 12ckl[U S V]=svd(X,0)Schur分解(正交阵和schur阵)[U,T]=schur(A): A=UTU’schur阵是主对角线元素为特点值地三角阵5、矩地一些特别理size(A):求矩 A 地行数、列数diag(A):求出矩 A 地角元素repmat(A):将矩 A 作位 ,成 m*n 矩 ,此中每个元素都是cat(k,A,B): k=1 归并后形如 [A;B]( A,B 列数相等); k=1 归并后形如(1)、矩地A 矩[A,B]( A,B 行数相等)reshape(X,M,N) :将矩X 地全部元素分派到一个M*N地新矩,当矩X 地元素不是M*N ,返回reshape(X,M,N,P,⋯):返回由矩X 地元素成地M*N*P*⋯多矩,若果M*N*P*⋯与X 地元素数不一样 ,将返回reshape(X,[M,N,P,⋯]) :与上一条相同A=rand(4,2)reshape(A,2,4)reshape(A,[2,2,2])用冒号:A=[1 2 3 4;5 6 7 8;9 10 11 12];B=ones(2,6);B(:)=A(:)(2)、矩地向rot90(A) : A 按逆旋rot90(A,K) : A 按逆旋filpud(X) :将 X 上下翻90 度90*K度fliplr(X) :将X 左右翻flipdim(X,DIM) :将 X 地第 DIM 翻X=[1 4;2 5;3 6]rot90(X)rot90(X,-1)flipud(X)fliplr(X)flipdim(X,2)%左右翻6、特别矩地生成(1)、零矩和全 1 矩地生成A=zeros(M,N):生成 M*N 地零矩A=zeros(size(B)):生成与 B 同型地零矩A=zeros(N):生成 N 零矩仿真全 1 矩地生成与零矩地生成似,使用ones 函数A=zeros(4,5)B=[12345;23456;98765;87654]A=zeros(size(B))A=zeros(5)C=ones(5,6)C=ones(3)(2)、角矩地生成A=diag(V,K): V 某个向量 ,K 向量 V 偏离主角地列数,K=0 表示 V 主角 ,K>00 表示 V 在主对角线以上,K<0 表示 V 在主对角线以下A=diag(V):相当于K=0v=[1 9 8 1 6]diag(v,1)diag(v)(3)、随机矩阵地生成rand(N) :生成 N*N 地随机矩阵 ,元素值在 (0.0,1.0) 之间rand(M,N)randn(N) :生成 N*N 地随机矩阵 ,元素之听从正态散布N(0,1)randn(M,N)rand(5)randn(5)(4)、范德蒙德矩阵地生成A=vander(V):有 A(I,j)=v(i)n-jv=[1 3 5 7 9]A=vander(v)(5)、魔术矩阵地生成它是一个方阵 ,方阵地每一行,每一列以及每条主对角线地元素之和都相同( 2 阶方阵除外)magic(N):生成N 阶魔术矩阵 ,使得矩阵地每一行,每一列以及每条主对角线元素和相等,N>0(N=2 除外)magic(2)magic(3)magic(4)(6)、 Hilbert 矩阵和反Hilbert 矩阵地生成Hilbert 矩阵地第i 行、第 j 列地元素值为1/(i+j-1), 反 Hilbert 矩阵是 Hilbert 矩阵地逆矩阵hilb(N) :生成 N 阶地 Hilbert 矩阵invhilb(N) :生成 N 阶地反 Hilbert 矩阵A=hilb(5)B=invhilb(5)C=A*Brandpem(n):随机摆列hess(A): hess矩阵pascal(n): Pascal矩阵hankel(c): Hankel 矩阵wilkinson(n): wilkinson 特点值测试矩阵blkdiag(a,b,c,d):产生以输入元素为对角线元素地矩阵注: diag 函数地输入参数只好有一个(能够为向量)compan(u):友矩阵hadamard(n): hadamard 矩阵toeplitz(c,r):托布列兹阵数组及其运算1、数组寻址和排序(1)、数组地寻址A=randn(1,10)A(4) %接见 A 地第 4 个元素A(2:6)%接见 A 地第 2 到 6 个元素A(6:-2:1)A([1 3 7 4])%接见 A 中 1、3、 7 和 4 号元素A(4:end) %end 参数表示数组地结尾(2)、数组地排序sort(X):将数组X 中地元素按升序排序X 是多维数组时 ,sort(X)命令将 X 中地各列元素按升序排序X 是复数时 ,sort(X)命令将 X 中地各个元素地模abs(X)按升序排序X 是一个字符型单元数组,sort(X)命令将 X 中地各列元素按ASCII码升序排序Y=sort(X,DIM,MODE):DIM 选择用于摆列地维,MODE 决定了排序地方式(’ascend’升序 ,’descend’降序) ,该命令生成地数组Y与 X 是同型地X=[3 7 5;0 4 2]sort(X,1) %纵向升序排序sort(X,2) %横向升序排序sort(2)2、数组地基本数值运算(1)、加减法(与矩阵加减法相同)X=[1 4 7]Y=[2 5 8]Z=X-YV=X+Y(2)、数组地乘除法乘法用“ .* ”: X、 Y 有相同维数 ,X.*Y 表示 X 和 Y 中单个元素之间地对应乘积除法用“ ./ ”:注意“ ./ ”和“ ”完整不一样X=[10 52 96 12 56]Y=[2 26 3 4 8]Z=[10 52 96 12 56 42]Z1=X.*YZ2=X.*Z%报错 ,维数问题Z3=X./Y%Z3=5,2,32,3,7Z4=X.\Y %Z4=0.2,0.5,0.0313,0.3333,0.1429Z5=X.\Z%报错 ,维数问题(3)、数组地乘方两个数组之间地乘方X=[1 4 7]Y=[2 5 8]Z=X.^Y乘方运算时指数为标量X=[3 6 9]Z=X.^3乘方运算时底数为标量X=[456789]Z=3.^X数组和矩阵也能够进行exp、 log、 sqrt 等运算 ,是对每个对应元素进行运算3、数组地关系运算小于( <),小于等于( <=) ,大于( >),大于等于( >=) ,等于( ==) ,不等于( ~=) ,结果为 1, 则关系式为真 ,结果为 0,则关系式为假%rem(X,n),求余函数 ,X 为被除数 ,n 为除数M=magic(7)N=(rem(M,3))N=(rem(M,3)<=1)N=(rem(M,3)==1)N=(rem(M,3)>=1)4、数组地逻辑运算,非运与( &),或( | ),非( ~),此中与、或能够比较两个标量或许两个同阶数组(或矩阵)算时针对数组(或矩阵中地每一个元素),当逻辑为真则返回1,当逻辑为假则返回0M=[1 1 0;0 1 0;1 0 0]N=[1 0 1;1 1 1;0 0 0]M|NM&N~Ncat:串接flipdimfliplrflipudkron:积数组permute:重组repmatreshaperot90稀少型矩阵1、稀少矩阵地生成(1)、 speye 函数:生成单位稀少矩阵speye(size(A))speye(M,N) :维数为M 和N 中较小地一个speye(N)A=eye(10)speye(size(A))speye(7,6)speye(5)(2)、 sprand 函数:生成随机稀少矩阵(元素听从0-1 之间地随机散布)R=sprand(S):产生与稀少矩阵S 构造相同地稀少矩阵,但它地元素都是0-1 上地随机数Rsprand(M,N,D) :产生一个M*N 地随机稀少矩阵R,它地非您元素地个数近似为M*N*D, 注意D 地值在 0-1 之间且不要过大v=[3 5 6 2 1 9 6 5 5 6]S=diag(v)R=sprand(S)R=sprand(10,10,0.08)(3)、 sparse 函数S=sparse(X):将矩阵 X 转变为稀少矩阵SS=sparse(I,j,s,m,n,nzm):生成 m*n 地稀少矩阵 S,向量 s 地元素散布在以向量i 地对应值和向量 j 地对应值为坐标地地点上 ,此中 nzm=length(s)S=sparse(I,j,s):生成 m*n 地稀少矩阵S,向量 s 地元素散布在以向量i 地对应值和向量 j 地对应值为坐标地地点上,此中 m=max(i),n=max(j)S=sparse(m,n):是 sparse([],[],[],m,n,0)地简化形式i=[6 2 7 7 4 1 2 5]j=[1 3 2 7 2 8 3 2]s=[8 3 7 7 1 7 0 2]X=diag(s,-2)S=sparse(X)S1=sparse(i,j,s,10,10,7)%报错 ,nzmax=length(s)S1=sparse(i,j,s,10,10,8)S2=sparse(i,j,s,10,9)%默认 nzmax=length(s)S2=sparse(i,j,s)%m=max(i),n=max(j)2、稀少矩阵地操作(1)、 nnz 函数:用于求非零元素地个数nz=nnz(S):返回 S总非零元素个数D=nnz(S)/prod(size(S)):表示稀少矩阵S 中非零元素地密度v=[6 2 7 7 4 1 3 5]S=diag(v,-1)nz=nnz(S)D=nnz(S)/prod(size(S))(2)、 sponse 函数R=sponse(S):生成一个与稀少矩阵 S 构造相同地稀少矩阵 R,可是在矩阵 S 中地非零元素地地点上用元素 1 替代S=sprandsym(10,0.05)R=spones(S)(3)、 spalloc 函数S=spalloc(m,n,nzm):生成一个全部元素都为0 地m*n阶稀少矩阵,计算机利用这些空间来存储 nzm 个非零元素n=3;v=sprand(n,1,0.33) s=spalloc(n,n,1*n)%生成%分派3*13*3地稀少列向量地空间 ,最后能够储存 3 个非零元素for j=1:ns(:,j)=(v)%v 为含有一个非零元素地稀少列向量end(4)、 full 函数S=full(X):将稀少矩阵(三元组表示)变换为满矩阵(矩阵表示)s(6,1)=8;s(4,2)=1;s(5,3)=60;s(6,2)=57;s(1,7)=25;s(3,8)=37;full(s)(5)、 find函数I=find(X):返回矩阵X 地非零元素地地点,如 I=find(X>100) 返回X 中大于100 地元素地地点[I,J]=find(X) :返回 X 中非零元素所在地行I 和列 J 地详细数据[I,J,V]=find(X):除了返回I 和 J,还返回矩阵中非零元素地值V注:find(X) 和 find(X~=0)会产生相同地I 和 J,可是后者会生成一个包含全部非零元素地点地向量S(10,50)=82;S(32,14)=82;S(251,396)=25;I=find(S)[I J]=find(S)[I J V]=find(S)(6)、 issparse 函数issparse(S):返回值为 1 说明矩阵S 是一个稀少矩阵,返回值为0 时说明矩阵S 不为稀少矩阵v=[6 2 7 7 4 1 3 5]S=diag(v,2)R=sparse(S)N=issparse(S) %返回 0,不为稀少矩阵Y=issparse(R) %返回 1,为稀少矩阵。
MATLAB第二讲数值数组及向量化运算(2
姓名:马凯邮箱:matlab2011@ QQ : 9068005数组是MTALAB进行计算和处理的核心内容之一,出于快速运算的需要,MATLAB 总把数组看作存储和运算的基本单元,标量数据也被看作是1×1的数组。
因此,数组的创建、寻址和操作就显得非常重要。
MATLAB 提供了各种数组创建的方法和操作方法,使得MATLAB的数值计算和操作更加灵活和方便。
数组的创建和操作是MATLAB运算和操作的基础.数组的创建一、一维数组的创建直接输入法步长生成法: x=a:inc:b等间距线形成生法:x=linspace(a,b,n)注意x=linspace(a,b,n) 等价于)(:-=-/(nb x:)1aba对数等间距生成法x=logspace(a,b,n)LOGSPACE(X1,X2)generates a row vector of50logarithmically equally spaced points between decades10^X1and10^X2.If X2is pi,then the points are between 10^X1and pi.LOGSPACE(X1,X2,N)generates N points.For N<2,LOGSPACE returns10^X2.例1 一维数组的创建举例A1=[0.2,pi/2,‐4,7,sin(5)]A2=0:0.5:3A3=linspace(1,6,7)A4=logspace(1,6,7)A5=logspace(0,3,4)rand('twister',0)% rng default 效果一样c2=rand(1,5)c2 =0.5488 0.7152 0.6028 0.5449 0.4237例2 一维列数组的创建举例x1=(1:6)‘X2=linspace(0,pi,4)‘y1=rand(5,1)z1 =[0.2;pi/2;‐4;7;sin(5)]二、二维数组(即矩阵)的创建直接输入二维数组的元素来创建中规模数组的数组编辑器创建法当数组规模较大,元素数据比较冗长时,借助数组编辑器比较方便。
数值数组及向量化运算
第 3 章 数值数组及向量化运算MATLAB 的核心内容:数值数组和数组运算 ● 二维数值数组的创建和寻访 ● 数组运算和向量化编程 ● 实现数组运算的基本函数● 常用标准数组生成函数和数组构作技法 ● 非数NaN 、“空”数组概念和应用 ● 关系和逻辑操作3.1 数值计算的特点和地位符号计算的局限性:有很多问题1)无法解,2)求解时间过长数值计算:适用范围广,能处理各种复杂的函数关系,计算速度快,容量大。
【例3.1-1】已知t t t f cos )(2=,求dt t f x s x⎰= 0)()(。
(1)符号计算解法syms t x ft=t^2*cos(t) sx=int(ft,t,0,x) ezplot(sx,0,5) hold ondt=0.05; t=0:dt:5; Ft=t.^2.*cos(t); Sx=dt*cumtrapz (Ft); % 小梯形面积的累加求Ft 曲线下的面积,由一个个宽度为dt 的小梯形面积累加得到的t(end-4:end) % end 指示最后一个元素的位置 %Sx(end-4:end)%plot(t,Sx,'.k','MarkerSize',12)(2)数值计算解法dt=0.05; t=0:dt:5; Ft=t.^2.*cos(t); Sx=dt*cumtrapz (Ft); % 小梯形面积的累加求Ft 曲线下的面积,由一个个宽度为dt 的小梯形面积累加得到的t(end-4:end) % end 指示最后一个元素的位置 Sx(end-4:end)plot(t,Sx,'.k','MarkerSize',12) xlabel('x'),ylabel('Sx'),grid onans =4.8000 4.8500 4.9000 4.95005.0000ans =-20.1144 -19.9833 -19.7907 -19.5345 -19.2131图 3.1-1 在区间[0, 5]采样点上算得的定积分值【例3.1-2】已知)sin()(t et f -=,求⎰=4 0)()(dt t f x s 。
Matlab第2章 数值数组及向量化运算
21 22 23 24
六. A ( 3 , 1:3 ) = 9 10 11
1.3:二维数组元素的标识和寻访 ——数值数组的创建和寻访
二维数组 A
1 2 3 4 5 6 7 8 9 10 11 12
单下标法 一、 A(:)=1:12 A= 1 2
二、A(8)
3 4
5 6
7 8
9 11 10 12
ans = 8
标, A=rand(3,3),然后根据A写出两个矩阵:一个对角阵 B,其相应元素由A的对角元素构成;另一个矩阵C,其对角元素全 为0,而其余元素与对应的A阵元素相同。(提示: diag diag)
作业提交电子版的word文档,由学习委员统一收齐,发到 smnsss@邮箱,文件命名为“学号+姓名+第几次作业”,比如 你叫魏川东,学号是1207200181,第1次作业,那文件名就应该是: “1207200181魏川东1”。本周六晚上12:00之前发到我的邮箱。
1.4:数组操作技法综合 ——数值数组的创建和寻访
b=diag(A) B=diag(b) b= 1 4 B= 1 0 0 4 D1=repmat(B,2,4) D1 = 1 0 1 0 0 4 0 4 1 0 1 0 0 4 0 4
%即ReplicateMatrix,复制和平铺矩阵 % 1 0 1 0 0 4 0 4 1 0 1 0 0 4 0 4
randn(2,3)
0
0
1
函数生成法
1.2:二维数组的创建 ——数值数组的创建和寻访
D= 1 0 0 0 1 0 0 0 1 diag(D) ans = 1 1 1 diag(diag(D)) ans = 1 0 0 0 1 0 0 0 1
MATLA数值数组及向量化运算
2.其他类型一维数组的创建:
(2) 运用MATLAB函数生成法: MATLAB特殊形式数组生成函数见表3.2-1: 均匀分布随机数组rand(1,n), 全1数组ones(1,n)
指令
diag
含 义
产生对角形数组(二维以 下)
指令
rand
含 义
产生均匀分布随机数 组
eye
产生单位数组(二维以下)
randn 产生正态分布随机数 组
函数 f (.) 的数组运算规则
函数数组运算规则的定义 x11 x12 … x1n
x21 x22 … x2n
对于(m*n)数组X= … … … … =[xij] m x 的数组运算规则是指:
f (X) = [ f (xij) ]m x n
也就是对数组中每个元素都实施同样的操作.
b b’ Inc<0
a
特点: 等差数列
1. 递增/递减一维数组的创建:
(2) 线性(或对数)定点采样法
在设定的总点数下, 均匀采样生成一维行数组.格式为:
x=linspace (a, b, n)
a---数组初始值 b---数组最后值 n---数组总个数 增量的计算---inc=(b-a)/(n-1) 特点:方便对数组的元素的总个数进行控制,最后一个元素肯 定是设定之值.
ezplot(sx,[0,15])
例 3.1-2 已知
f (t ) e
sin(t )
求
s( x) f (t )dt
0
4
(1) 符号计算解法 syms t; ft=exp(-sin(t)); sx=int(ft, t, 0, 4)
(2) 数值计算解法
Warning: Explicit integral could not be found. sx = int(1/exp(sin(t)), t = 0..4)
数值数组及向量化运算
1 2 2 1 2 2 a. * b .* 0 2 0 1 0 2
4
第2章 数值阵列及向量化运算
(2)矩阵和数组运算规则对比
1 3 1 2 1 a b 0 2 1 0 1
2 1 3 7 1 3 1 0 1 ab 1 5 0 2 1 1 3
素
fliplr rot90:以数组“垂直中线”为对称轴,交换左右对称位置上的元素 :把数组逆时针旋转90o 操作例3.3-7,例3.3-8;注意空阵的用法、rot90(a,b)中b的用法P140
14
第2章 数值阵列及向量化运算
六、关系操作和逻辑操作P145
掌握关系操作符 (表3.5-1 P146) 操作例3.5-1 考察r0=A(A<4)与 r0=(A<4)的区别? A==B,两等号之间不得有空格
车辆仿真技术—基于MATLAB
——第二章
1
第2章 数值阵列及向量化运算
阵列被区分为“数组”和“矩阵”
MATLAB为了提高程序运行效率,为实现向量化编程,特意为 “数组”和“矩阵”设计了两套运算规则。
正确理解矩阵和数组运算规则是有效运用MATLAB的关键所在。 (1)矩阵的概念和运算规则
2 a 3 5
ab
a b
幂
ab
( )
圆括号
( )
( )
3
第2章 数值阵列及向量化运算
对于加减运算,矩阵和数组运算规则相同,都是对应元素相加减
对于乘法、除法、求幂等运算,两者有区别(除法和求幂运算同学 自行实验)
1 2 a 0 2
探究Matlab中的向量化计算技巧
探究Matlab中的向量化计算技巧引言在数据科学领域,Matlab是一种广泛使用的编程语言和计算工具。
在处理大规模数据集时,向量化计算技巧可以大大提高代码的运行效率。
本文将探究在Matlab中实现向量化计算的方法和技巧。
一、向量化计算的概念在Matlab中,向量化计算是一种使用向量和矩阵运算来代替循环操作的技术。
它可以在一行代码中同时对整个向量或矩阵进行操作,从而提高计算速度。
向量化计算利用内建的矩阵运算函数,如加法、减法、乘法、除法等,实现了对大规模数据集的高效处理。
二、使用点运算符在Matlab中,点运算符是进行向量化计算的关键。
通过使用点运算符,可以直接对两个向量(或数组)逐元素进行运算,而无需使用循环来处理每个元素。
例如,假设我们有两个向量A和B,我们想要计算它们的点积。
通过使用点运算符,可以直接使用A .* B来完成计算,而不必使用循环逐个元素相乘,并将结果保存在一个新的向量中。
三、使用矩阵代替循环除了使用点运算符,还可以使用矩阵来代替循环操作。
在Matlab中,矩阵运算函数通常比循环更高效。
例如,假设我们有一个矩阵X,我们想要计算每行的和。
通过使用矩阵运算函数sum,我们可以直接计算每行的和,并将结果保存在一个新的向量中,而无需使用循环逐个元素相加。
四、逐步构建向量化计算代码当我们处理较复杂的问题时,很难一开始就完全实现向量化计算。
在这种情况下,我们可以逐步构建向量化计算代码。
首先,我们可以使用循环来实现初始版本的代码,以确保算法的正确性。
然后,我们可以逐步将循环转换为矩阵运算函数,从而实现向量化计算。
五、注意向量化计算的边界条件在进行向量化计算时,我们需要注意处理边界条件。
有时,边界条件可能无法同时满足矩阵运算函数的要求。
这时,我们需要特别处理这些边界条件,并使用适当的方法来处理它们。
六、衡量向量化计算效果的指标在衡量向量化计算效果时,我们可以使用不同的指标。
常见的指标包括运行时间、内存使用和代码长度。
第二章 MATLAB的数值运算
第二章MATLAB的数值运算本章教学目标了解MATLAB语言的内存管理掌握MATLAB变量的命名规则理解MATLAB数组运算和矩阵运算的区别掌握MATLAB矩阵的建立及基本操作掌握MATLAB矩阵的基本运算掌握MATLAB数组的基本运算掌握字符串的基本操作2.1 变量与数据操作在MATLAB的运算中,经常要使用标量、向量、矩阵和数组,这几个名称的定义如下:标量:是指1×1的矩阵,即为只含一个数的矩阵。
向量:是指1×n或n×1的矩阵,即只有一行或者一列的矩阵。
矩阵:是一个矩形的数组,即二维数组,其中向量和标量都是矩阵的特例,0×0矩阵为空矩阵([ ])。
数组:是指n维的数组,为矩阵的延伸,其中矩阵和向量都是数组的特例。
2.1.1变量与赋值1.变量命名和其他计算机语言一样,MATLAB也有自己的变量命名规则。
MATLAB中变量的命名规则如下:A.变量名必须是不含空格的单个单词;B.变量名区分大小写;C. 变量名最多不超过63个字符;D.变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号。
注意:只要是赋过值的变量,不管是否在屏幕上显示过,都存储在工作空间中,以后可随时显示或调用。
变量名尽可能不要重复,否则会覆盖。
2.特殊变量除了上面的命名规则外,MATLAB中还包括一些特殊的变量。
在使用时,应尽量避免对这些变量重新赋值。
i=j=3.赋值语句(1) 变量=表达式(2) 表达式其中表达式是用运算符将有关运算量连接起来的式子,其结果是一个矩阵。
例2-1 计算表达式的值,并显示计算结果。
在MATLAB命令窗口输入命令:x=1+2i;y=3-sqrt(17);z=(cos(abs(x+y))-sin(78*pi/180))/(x+abs(y))其中pi和i都是MATLAB预先定义的变量,分别代表代表圆周率π和虚数单位。
输出结果是:z =-0.3488 + 0.3286i2.1.2 内存变量的管理MATLAB工作空间窗口专门用于内存变量的管理。
Matlab中的向量化编程技巧分享
Matlab中的向量化编程技巧分享概述Matlab作为一种常用的科学计算和工程仿真软件,其功能强大并且易于上手。
在日常的编程过程中,合理的编程技巧能够有效提高代码的执行效率和可读性。
本文将分享一些在Matlab中实现向量化编程的技巧,希望能够对读者有所启发。
向量化编程的优势Matlab中的向量化编程,即使用矩阵和向量操作来替代循环和逐元素操作。
相比于传统的循环操作,向量化代码通常更加简洁、高效,并且能够同时处理多个数据,从而提高程序的效率。
同时,向量化编程也增加了代码的可读性和可维护性,使得代码更加易于理解和修改。
1. 利用矩阵操作代替循环在Matlab中,可以使用矩阵操作来代替循环。
例如,对于一个元素为n的向量,如果要对其中的每个元素进行平方操作,可以使用矩阵乘法进行替代。
```matlabx = 1:n;x_square = x.^2;```上述代码中,x是一个元素为1到n的向量,通过使用矩阵乘法进行平方操作,避免了使用for循环对每个元素进行逐一操作的过程。
2. 利用矩阵操作进行逐元素操作除了以上的示例中的平方操作,Matlab中还提供了很多其他的逐元素操作函数,例如求和、求平均等。
通过使用这些函数,可以将复杂的循环操作简化为一行代码。
```matlabx = 1:n;x_sum = sum(x); % 对x进行求和操作x_avg = mean(x); % 对x进行求平均操作```3. 利用逻辑操作进行条件判断在Matlab中,可以使用逻辑操作来进行复杂的条件判断,而不需要使用if-else语句进行判断。
通过利用逻辑操作的短路特性,可以简化代码并提高效率。
```matlabx = 1:n;x_even = (mod(x, 2) == 0); % 判断x中的元素是否为偶数```上述代码中,通过使用mod函数和逻辑操作,判断了向量x中的每个元素是否为偶数,并将结果存储在新的向量x_even中。
Matlab学习心得系列——002. Matlab编程思想——向量化编程
002. Matlab编程思想——向量化编程C语言的基本元素是单数值(比如单变量或数组里的元素),再加上其结构化的特点,决定了通常C语言程序大都充斥着大量罗嗦的单变量循环和判断语句(注1)。
而Matlab是以向量、矩阵为基本元素的,所以要编写真正的Matlab 程序必须抛弃【C语言那种“单数值、元素化”考虑问题】的思路,转以向量、矩阵为最小单位来考虑问题。
也就是说,Matlab的编程思想是——向量化编程,即面向向量或矩阵。
这样做的好处,至少有两个:(1)代码大大简化,易编程、清晰可读性强;这样的代码才叫Matlab代码,否则只能是不伦不类的代码:C不C,Matlab不Matlab.(2)执行效率也更高;这是次要的,随着Matlab对循环机制的优化,速度差异已不再那么明显,关键是(1)下面针对Matlab中常见的向量化处理问题方法,举例加以说明:(一)整体操作“大块数据”Matlab为同型的数据块(向量或矩阵)的整体做运算提供了【点运算】,这里我借用《线性代数》里的说法,矩阵行数、列数相同称为同型矩阵,Matlab里矩阵可能不止2维。
比如,A.*C 和A./C 表示A与C的对应位置的各元素做* 和/运算得到与它们同型的一个新矩阵。
例1.物理实验利用测得的电压电流具体数据,验证欧姆定律R=U/I.代码1(C语言风格)U=[0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41];I=[0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345];L=length(U);S=0;for k=1:LR(k)=U(k)/I(k);S=S+R(k);endR=S/L运行结果:R = 30.5247代码1’(Matlab风格)U=[0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41];I=[0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345];R=U./I;R=mean(R)运行结果:R = 30.5247(二)尽量把【C语言风格的循环】向量化实现见上例,再比如,例2.计算1+1/3+…+1/99代码2(C语言风格)s = 0;fork=1:2:99s = s + 1/k;ends运行结果:s = 2.9378代码2’(Matlab风格)k=1:2:99;s = sum(1./k)运行结果:s = 2.9378注意:代码2’中,不要写成“for k=1:2:99”, 否则k就是变化的一个数值而不是数组了。
Matlab_2数值2011
1. roots ——由多项式 求它的根
p(x) = x4-5x3-17x2 +129 x-180
% ------- lxmtbp37.m -------
>> lxmtbp37
p = [ 1 -5 -17 129 -180 ];
n = 21;
x = zeros(1, n) ; y = zeros(1, n) ;
%-------- ssfile4.m ------clear
for i = 1: n x(i) = (i-1)*pi/10;
load data x y plot(x, y);
y(i) = sin(x(i));
end save data x y
<=>
步长 1
b = 6:-2:2 <=>
步长 -2
a= 1, 2, 3, 4, 5
b= 64 2
N = [ 1,2,3 ]
矩
<=> N =
阵
12 3
行向量 ( 1 x 3 阶阵)
M = [ 1;2;3 ] <=> M =
1
列向量 ( 3 x 1 阶阵)
2
3
又例:
A = [1 2 3 4;5 6 7 8;9 10 11 12]
符号的作用
逗号和分号的作用 逗号和分号可作为指令间的分隔符,
MatLab允许多条语句在同一行出现。 分号如果出现在指令后,屏幕上将不
显示结果。
冒号的作用
用于生成等间隔的向量,默认间隔为1。
用于选出矩阵指定行、列及元素。
循环语句
例:
向 量
x = 10, y = 20, z = 30;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 2 章 数值数组及向量化运算本章集中讲述两个数据类型(数值数组和逻辑数组)、两个特有概念变量(非数和空)、以及MATLAB的数组运算和向量化编程。
值得指出:本章内容是读者今后编写各种科学计算M码的基本构件。
数值数组(Numeric Array)是MATLAB最重要的数据类型数组。
在各种维度的数值数组中,二维数组为最基本、最常用。
本章对二维数组创建、标识、寻访、扩充、收缩等方法进行了详尽细腻的描述,并进而将这些方法推广到高维数组。
本章讲述的逻辑数组主要产生于逻辑运算和关系运算。
它是MATLAB 援引寻访数据、构成数据流控制条件、、编写复杂程序所不可或缺的重要构件。
数组运算是MATLAB区别于其它程序语言的重要特征,是MATLAB绝大多数函数指令、Simulink许多库模块的本性,是向量化编程的基础。
为此,本章专辟第2.2节用于阐述MATLAB的这一重要特征。
在此提醒读者注意:随书光盘mbook目录上保存着本章相应的电子文档“ch02_数值数组及向量化运算.doc”。
该文档中有本章全部算例的可执行指令,以及相应的运算结果。
2.1数值数组的创建和寻访2.1.1一维数组的创建1递增/减型一维数组的创建(1)“冒号”生成法(2)线性(或对数)定点法2其他类型一维数组的创建(1)逐个元素输入法(2)运用MATLAB函数生成法【例2.1-1】一维数组的常用创建方法举例。
a1=1:6a2=0:pi/4:pia3=1:-0.1:0a1 =1 2 3 4 5 6a2 =0 0.7854 1.5708 2.3562 3.1416a3 =Columns 1 through 81.0000 0.9000 0.8000 0.7000 0.6000 0.5000 0.4000 0.3000Columns 9 through 110.2000 0.1000 0b1=linspace(0,pi,4)b2=logspace(0,3,4)b1 =0 1.0472 2.0944 3.1416b2 =1 10 100 1000c1=[2 pi/2 sqrt(3) 3+5i]c1 =2.0000 1.5708 1.73213.0000 + 5.0000i rng defaultc2=rand(1,5)c2 =0.8147 0.9058 0.1270 0.9134 0.6324〖说明〗x1=(1:6)' , x2=linspace(0,pi,4)'y1=rand(5,1)z1=[2; pi/2; sqrt(3); 3+5i]2.1.2二维数组的创建1小规模数组的直接输入法【例2.1-2】在MATLAB环境下,用下面三条指令创建二维数组C。
a=2.7358; b=33/79;C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]C =1.0000 5.4716 + 0.4177i 0.69090.7071 4.8244 3.5000 + 1.0000i2中规模数组的数组编辑器创建法3(×的数组输入MATLAB内存,并命名为A18。
【例2.1-3】试用变量编辑器,把如下)60.8147 0.9134 0.2785 0.9649 0.9572 0.14190.9058 0.6324 0.5469 0.1576 0.4854 0.42180.1270 0.0975 0.9575 0.9706 0.8003 0.9157图2.1-1 利用数组编辑器创建中规模数组3中规模数组的M文件创建法【例2.1-4】为数组AM,创建一个 exm020104_Matrix.m 文件。
以后每当需要AM数组时,只要运行exm020104_Matrix文件,就可在内存生成AM。
图2.1-2 利用M文件创建数组4利用MATLAB函数创建数组【例2.1-5】利用MATLAB指令产生数组。
(1)ao=ones(2,4)az=zeros(2,5)ae=eye(3)am=magic(4)ad=diag(am)add=diag(diag(am))ao =1 1 1 11 1 1 1az =0 0 0 0 00 0 0 0 0ae =1 0 00 1 00 0 1am =16 2 3 135 11 10 89 7 6 124 14 15 1ad =161161add =16 0 0 00 11 0 00 0 6 00 0 0 1(2)%rng defaultAu=rand(1,5)Ai=randi([-3,4],2,8)As=randsrc(3,12,[-3,-1,1,3],1)Ap=randperm(8)Au =0.8147 0.9058 0.1270 0.9134 0.6324Ai =-3 1 4 4 0 -2 4 4-1 4 -2 4 3 0 3 2As =-1 -1 -3 1 -3 1 -3 3 3 -3 -3 1 1 -3 -1 -1 3 -1 -3 -1 3 -3 -1 1 -3 -3 -1 1 -3 1 3 1 -3 3 3 -1 Ap =1 7 8 4 6 52 3%rng(0,'v5normal')randn(2,6)ans =-0.4326 0.1253 -1.1465 1.1892 0.3273 -0.1867-1.6656 0.2877 1.1909 -0.0376 0.1746 0.7258(3)n=5;lambda=2;A = gallery('jordbloc',n,lambda)A =2 1 0 0 00 2 1 0 00 0 2 1 00 0 0 2 10 0 0 0 2rng(11,'v5normal')n=6;kappa=1e8;mode=2;B= gallery('randsvd',n,kappa,mode)Bsv=svd(B)'Bc=cond(B)B =-0.2402 -0.6286 -0.6241 -0.1413 0.2258 -0.2410-0.5761 0.2703 0.2092 -0.1420 -0.2454 -0.46570.5168 -0.1311 0.0244 -0.6882 -0.4403 -0.21380.5613 0.2022 -0.1260 0.2781 0.3097 -0.1772-0.0744 0.0489 0.3518 -0.5518 0.7473 0.0709-0.1044 -0.2899 0.1391 -0.0840 -0.2010 0.7394Bsv =1.0000 1.0000 1.0000 1.0000 1.0000 0.0000Bc =1.0000e+0082.1.3二维数组元素的标识和寻访1数组的维数和大小(1)数组的维数(Dimension)(2)数组的大小(Size)【例2.1-6】数组的维数、大小和长度clearA=reshape(1:24,2,3,4);dim_A=ndims(A)size_A=size(A)L_A=length(A)dim_A =3size_A =2 3 4L_A =42数组的标识和寻访【例2.1-7】本例演示:数组元素及子数组的各种标识和寻访格式;冒号的使用;end的作用。
(1)A=zeros(2,6)A(:)=1:12a8=A(8)a311=A([3,11])A =0 0 0 0 0 00 0 0 0 0 0A =1 3 5 7 9 112 4 6 8 10 12a8 =8a311 =3 11(2)A(3,7)=37a13=A(:,[1,3])aend=A([2,3],4:end)A =1 3 5 7 9 11 02 4 6 8 10 12 00 0 0 0 0 0 37a13 =1 52 60 0aend =8 10 12 00 0 0 37(3)L=A<3A(L)=NaNL =1 0 0 0 0 0 11 0 0 0 0 0 11 1 1 1 1 1 0A =NaN 3 5 7 9 11 NaNNaN 4 6 8 10 12 NaNNaN NaN NaN NaN NaN NaN 372.1.4数组的扩缩和特殊操作1数组的扩充和收缩【例 2.1-8】二维数组的扩充和收缩。
(1)a=1:5;b=6:10;c=11:15;a_b=[a,b]ab=[a;b;c]a_b =1 2 3 4 5 6 7 8 9 10ab =1 2 3 4 56 7 8 9 1011 12 13 14 15(2)AB1=repmat(ab,[1,2])AB2=repmat(ab,[2,1])AB1 =1 2 3 4 5 1 2 3 4 56 7 8 9 10 6 7 8 9 1011 12 13 14 15 11 12 13 14 15AB2 =1 2 3 4 56 7 8 9 1011 12 13 14 151 2 3 4 56 7 8 9 1011 12 13 14 15(3)AB2([2,3,5,6],:)=[]AB2(:,1:3)=[]AB2 =1 2 3 4 51 2 3 4 5AB2 =4 54 52数组的特殊操作【例 2.1-9】本例演示:reshape的数组变形功能;数组的翻转指令flipud, fliplr, flipdim,以及它们体现的矩阵变换;数组绕“左上元素”反时针旋转指令rot90;数组上下左右平移回绕指令circshift。
(1)cleara=1:24;A=reshape(a,3,8)B=reshape(A,2,4,3)A =1 4 7 10 13 16 19 222 5 8 11 14 17 20 233 6 9 12 15 18 21 24B(:,:,1) =1 3 5 72 4 6 8B(:,:,2) =9 11 13 1510 12 14 16B(:,:,3) =17 19 21 2318 20 22 24(2)Aud=flipud(A)Alr=fliplr(A)B1=flipdim(A,1)B2=flipdim(A,2)At=A'Aud =3 6 9 12 15 18 21 24 25 8 11 14 17 20 23 1 4 7 10 13 16 19 22 Alr =22 19 16 13 10 7 4 123 20 17 14 11 8 5 224 21 18 15 12 9 6 3 B1 =3 6 9 12 15 18 21 24 25 8 11 14 17 20 23 1 4 7 10 13 16 19 22 B2 =22 19 16 13 10 7 4 123 20 17 14 11 8 5 224 21 18 15 12 9 6 3 At =1 2 34 5 67 8 910 11 1213 14 1516 17 1819 20 2122 23 24(3)A90=rot90(A)A180=rot90(A,2)A90 =22 23 2419 20 2116 17 1813 14 1510 11 127 8 94 5 61 2 3A180 =24 21 18 15 12 9 6 3 23 20 17 14 11 8 5 2 22 19 16 13 10 7 4 1 (4)ACR=circshift(A,1)CL=circshift(A,[0,-1])A =1 4 7 10 13 16 19 222 5 8 11 14 17 20 233 6 9 12 15 18 21 24CR =3 6 9 12 15 18 21 241 4 7 10 13 16 19 222 5 8 11 14 17 20 23CL =4 7 10 13 16 19 22 15 8 11 14 17 20 23 26 9 12 15 18 21 24 33数组操作函数汇总 2.2数组运算 2.2.1 数组运算的由来和规则1 函数关系数值计算模型的分类2 提高程序执行性能的三大措施3 数组运算规则4 数组运算符及数组运算函数2.2.2 数组运算和向量化编程【例 2.2-1】欧姆定律:i u r =,其中i u r , ,分别是电阻(欧姆)、电压(伏特)、电流(安培)。