《ch3数值数组及向量化运算》由会员分享,可在线阅读,更多相关《ch3数值数组及向量化运算(14页珍藏版)》请在金锄头文库上搜索。
1、1第 3 章 数值数组及向量化运算MATLAB 的核心内容:数值数组和数组运算3.1 数值计算的特点和地位符号计算的局限性:有很多问题 1)无法解,2)求解时间过长数值计算:适用范围广,能处理各种复杂的函数关系,计算速度快,容量大。【例 3.1-1】已知 ,求 。ttfcos)(2dtfx 0)()((1 )符号计算解法syms t xft=t2*cos(t)sx=int(ft,t,0,x)ezplot(sx,0,5)hold on (2 )数值计算解法dt=0.05;t=0:dt:5;Ft=t.2.*cos(t);Sx=dt*cumtrapz(Ft); % 小梯形面积的累加求 Ft曲线下的面
2、积,由一个个宽度为 dt的小梯形面积累加得到的t(end-4:end) % end指示最后一个元素的位置Sx(end-4:end)plot(t,Sx,.k,MarkerSize,12)xlabel(x),ylabel(Sx),grid on 图 3.1-1 在区间0, 5采样点上算得的定积分值【例 3.1-2】已知 ,求 。)sin()(tetf4 0)()dtfx(1 )符号计算解法 无解syms t xft=exp(-sin(t)sx=int(ft,t,0,4) (2 )数值计算解法dt=0.05;t=0:dt:4; Ft=exp(-sin(t);Sx=dt*cumtrapz(Ft);Sx
3、(end)plot(t,Ft,*r,MarkerSize,4)hold onplot(t,Sx,.k,MarkerSize,15)hold off2xlabel(x)legend(Ft,Sx) 3.2 数值数组的创建和寻访3.2.1 一维数组的创建x=1,3,5,7,9 逐个元素输入法 x=a:inc:b 步长生成法,inc 缺省时步长为 1x=linspace(a,b,n) 线性采样法 ,以 a,b 为左右端点,产生 1*n 行数组x=logspace(a,b,n) 对数采样法,以 a,b 为左右端点,产生 1*n 行数组运用 diag, eye 等标准数组生成函数。【例 3.2-1】一维数
4、组的常用创建方法举例。a1=1:6a2=0:pi/4:pia3=1:-0.1:0 b1=linspace(0,pi,4)b2=logspace(0,3,4) %创建数组10 0 101 102 103c1=2 pi/2 sqrt(3) 3+5i 3.2.2 二维数组的创建一 小规模数组的直接输入法【例 3.2-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 三个要素:整个输入数组 “ ”行与行间 “ ;”或“Enter ” 同行中元素间 “,”或“空格”二
5、中规模数组的数组编辑器创建法 【例 3.2-3】根据现有数据创建一个 的数组。)83(3图 3.2-1 利用数组编辑器创建中规模数组三 中规模数组的 M 文件创建法【例 3.2-4】创建和保存数组 AM 的 MyMatrix.m 文件。(1) 打开文件编辑调试器,并在空白填写框中输入所需数组(见图 3.2-2)。(2) 最好,在文件的首行,编写文件名和简短说明,以便查阅(见图 3.2-2)。(3) 保存此文件,并且文件起名为 MyMatrix.m 。(4) 以后只要在 MATLAB 指令窗中,运行 MyMatrix.m 文件 ,数组 AM 就会自动生成于 MATLAB 内存中。图 3.2-2
6、利用 M 文件创建数组四 利用 MATLAB 函数创建数组【例 3.2-5】利用最常用标准数组生成函数产生标准数组的演示。ones(2,4) %产生(24)全 1数组randn(state,0) %把正态随机数发生器置 0randn(2,3) %产生正态随机阵D=eye(3) %产生 33的单位阵diag(D) %取 D阵的对角元diag(diag(D) %外 diag利用一维数组生成对角阵randsrc(3,20,-3,-1,1,3,1) %在-3,-1,1,3上产生 320 均布随机数组,随机发生器的状态设置为 143.2.3 二维数组元素的标识和寻访【例 3.2-6】本例演示:数组元素及
7、子数组的各种标识和寻访格式;冒号的使用;end 的作用。A=zeros(2,6)A(:)=1:12 % 单下标法:单下标全元素寻访A(2,4) % 全下标法:指定行、指定列A(8) % 单下标法:单下标寻访A(:,1,3) % 全下标法:全部行、指定列A(1,2,5,6) % 单下标法:生成指定的一维行(或列)数组A(:,4:end) % 全下标法:全部行、指定列,end 表示最后一列。A(2,1:2:5)=-1,-3,-5 % 全下标法:指定行、指定列B=A(1,2,2,2,1,3,5 ) % 全下标法:指定行、指定列3.2.4 数组操作技法综合【例 3.2-7】数组操作函数 reshape
8、, diag, repmat 的用法;空阵 删除子数组的用法。a=1:8A=reshape(a,4,2)A=reshape(A,2,4) %改变行数和列数b=diag(A) % 提取对角元素,。B=diag(b) % 生成对角阵D1=repmat(B,2,4) %排列 B模块 repmat(A,m,n) creates a large matrix B consisting of an m-by-n tiling of copies of A.D1(1,3,: )= %删除指定行【例 3.2-8】函数 flipud, fliplr, rot90 对数组的操作体现着“矩阵变换”。A=reshap
9、e(1:9,3,3) B=flipud(A) %上下对称交换C=fliplr(A) %左右对称交换5D=rot90(A,2) %逆时针旋转 90 度,2 次3.3 数组运算MATLAB 面向数组/矩阵编程和运算: 用“数组或矩阵运算”模式去处理那些“借助循环而反复执行的标量运算” 显著提高程序执行速度 书写简洁、便于阅读服从数组运算规则的函数及其它算符举例三角、反三角 sin, cos, tan, cot, sec, csc, asin, acos, atan, acot, asec, acsc双曲、反双曲 sinh, cosh, , asinh, acosh,指数、对数 exp, sqrt,
10、 pow2, log, log10, log2圆整、求余 ceil, floor, fix, round, mod, rem模、角、虚实部 abs, angle, real, imag, conj服从数组运算规则的函数符号函数 sign关系运算符 = =, =, , =, 大于 = 大于等于= = 等于 = 不等于【例 3.5-1】关系运算示例。A=1:9,B=10-Ar0=(AB ? Error using Matrix dimensions must agree. A=YesB=NoA=B ? Error using =Matrix dimensions must agree. 字符串的比
11、较strcmp 判断两字符串是否等价 strcmpi 忽略大小写判断两字符串是否等价 strncmp 判断两字符串前 n 个字符是否等价 strncmpi 忽略大小写判断两字符串前 n 个字符是否等价str1 = hello;str2 = Hello;str3 = help;c1=strcmp(str1,str2)c2=strcmpi(str1,str2)c3 = strncmp(str1, str3, 2)a = fate;b = cake;result = a = b 函数 upper 和 lower 分别把一个字符串中所有转化大定和小写result = upper(This is tes
12、t 1!) MATLAB 把由数字组成的字符串转化为数字要用到函数 eval。例如,字符串“3.141592”a = 3.141592c=a+1b = eval(a)d=b+1 a =3.141592c =52 47 50 53 50 54 58 51b =3.1416d =4.1416 【例 3.5-2】关系运算应用。t=-3*pi:pi/10:3*pi; % 自变量数组中,存在 0值y=sin(t)./t; % 在 t=0处,将产生非数。11tt=t+(t=0)*eps; % 逻辑数组参与运算,使 0元素被一个“机器零”小数代替yy=sin(tt)./tt; % 用 sin(eps)/ep
13、s近似替代 sin(0)/0极限subplot(1,2,1),plot(t,y),axis(-9,9,-0.5,1.2), % 非数在绘图中的剪裁作用xlabel(t),ylabel(y),title(残缺图形) subplot(1,2,2),plot(tt,yy),axis(-9,9,-0.5,1.2)xlabel(tt),ylabel(yy),title(正确图形) -5 0 5-0.4-0.200.20.40.60.81ty图图图图-5 0 5-0.4-0.200.20.40.60.81ttyy图图图图图 3.5-1 采用近似极限处理前后的图形对照3.5.2 逻辑操作逻辑操作符指令 含义
14、& 与| 或 非xor 异或逻辑操作的引入,使复杂关系运算成为可能。 标量可以与任何维数组进行逻辑运算。运算比较在标量与数组每个元素间进行,运算结果与参与运算的数组同维。 当逻辑运算中没有标量时,参与运算的数组必须维数相同。逻辑运算在两数组相同位置上的元素间进行 逻辑数组进行计算后成为数值数组【例 3.5-3】逻辑操作和关系操作。本例演示:逻辑、关系操作的组合;xor 的作用。 (1 )逻辑、关系操作的组合A=-2,-1,0,0,1,2,3L1=(A1) % 哪些元素不大于 1?L2=(A0)&(A0&A2*pi).*y; % 获得整流半波w=(tpi/3&t7*pi/3&t8*pi/3);
15、% 关系逻辑运算和数值运算wn=w;z2=w*sin(pi/3)+wn.*z1; % 获得削顶整流半波subplot(4,1,1),plot(t,y,:r),axis(0,10,-1.5,1.5) ylabel(y),grid onsubplot(4,1,2),plot(t,z1,:r),axis(0,10,-0.2,1.5),ylabel(z1)subplot(4,1,3),plot(t,wn,:r),axis(0,10,-0.2,1.5),ylabel(wn)subplot(4,1,4),plot(t,z2,-b),axis(0,10,-0.2,1.5),ylabel(z2)xlabel(t) 图 3.5-2 逐段解析函数的产生3.5.3 常用逻辑函数MATLAB 中能给出 “逻