数值数组及其运算
- 格式:doc
- 大小:103.00 KB
- 文档页数:5
第三章数值数组及向量化运算(matlab基础教程)第3章数值数组及向量化运算数值数组(Numeric Array)和数组运算(Array Operations)始终是MATLAB的核心内容。
本书从第3章起,全部注意力将集中于数值数组及其运算。
本章系统阐述:数组浮点算法的特点;一、二维数值数组的创建和寻访;数组运算和向量化编程;实现数组运算的基本函数;常用标准数组生成函数和数组构作技法;非数NaN、“空”数组概念和应用;关系和逻辑操作。
3.1 数值计算的特点和地位【例3.1-1】已知f(t) t2cost,求s(x) (1)符号计算解法syms t x ft=t^2*cos(t) sx=int(ft,t,0,x) ft =t^2*cos(t) sx =x^2*sin(x)-2*sin(x)+2*x*cos(x)xf(t) dt。
(2)数值计算解法dt=0.05; t=0:dt:5; Ft=t.^2.*cos(t); Sx=dt*cumtrapz(Ft); t(end-4: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】已知f(t) e sin(t),求s(x) 0f(t) dt。
4(1)符号计算解法syms t xft=exp(-sin(t)) sx=int(ft,t,0,4) ft =exp(-sin(t))Warning: Explicit integral could not be found. In sym.int at 58 sx = int(exp(-sin(t)),t = 0 .. 4)(2)数值计算解法dt=0.05; t=0:dt:4; Ft=exp(-sin(t)); Sx=dt*cumtrapz(Ft); Sx(end)plot(t,Ft,'*r','MarkerSize',4) hold onplot(t,Sx,'.k','MarkerSize',15) hold off xlabel('x')legend('Ft','Sx') ans =3.0632图3.1-2 在区间[0, 4]中间的被积函数及其原函数的离散计算结果3.23.2.1 一二数值数组的创建和寻访一维数组的创建递增/减型一维数组的创建通用型一维数组的创建【例3.2-1】一维数组的常用创建方法举例。
MATLAB专题实验指导书刘美兰吴彩玲电信学院自动化系2006年6月目录实验一MATLAB的安装------------------------------------------1 实验二Desktop操作桌面基础-----------------------------------5实验三数值数组及其运算----------------------------------------10实验四数据和函数的可视化-----------------------------------------16实验五MATLAB仿真环境-----------------------------------------------22实验六句柄图形和图形用户界面制作--------------------------------24附录1 Matlab的函数及指令Functions and Commands----------27附录2 SIMULINK的库模块-----------------------------------------------38实验一 MATLAB的安装一、实验目的熟练Matlab的安装步骤。
二、Matlab安装的硬件要求硬件要求:CPU:Pentium II以上,内存24MB以上,CD-ROM(安装用)。
硬盘安装前应有2MB以上空间。
8位以上显卡,图形加速卡,声卡。
三、实验内容和步骤MATLAB软件的安装与卸载。
下面以一台PC机(操作系统为WIN2000)为例,介绍Matlab的安装过程。
1)把安装盘放入CD-ROM,一般会自动运行安装程序,如果不运行,可以进入光盘双击setup.exe文件,初始化完成,会出现图1-1所示界面。
图1-12)单击Next按钮,出现一个对话框,如图1-2所示,输入你的安装序列号。
图1-23)单击Next,出现对话框如图1-3,内容是你是否接受协议。
MATLAB实习报告这学期进行了MATLAB的实习,在为期几天的实习中,大家实习了MATLAB基本操作、值数组及其运算、ATLAB图形绘制基础和SIMULINK仿真基础。
同时通过这些也了解了MATLAB的基本情况和它的众多优点。
一、MATLAB的基本情况和优点MATLAB是主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB 来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB 也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用。
二、实习内容实习内容一: MATLAB基本操作实习内容二:数值数组及其运算实习内容三: MATLAB图形绘制基础实习内容四:SIMULINK仿真基础三、MATLAB实习过程1、掌握MATLAB操作过程1、进入MATLAB的开发环境。
方法一:点击桌面上的快捷方式或matlab\文件夹下的快捷方式图标。
第 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。
matlab中的数组Matlab中的数组Matlab是一种强大的数学计算软件,广泛用于科学计算、数据分析、图像处理等领域。
在Matlab中,数组是一种重要的数据类型,它可以存储多个数值或字符串,并且可以进行各种数学运算和统计分析。
本文将介绍Matlab中的数组及其常见操作。
一、数组的定义和初始化在Matlab中,可以使用以下方式定义和初始化数组:1. 直接输入数组元素,用空格或逗号分隔,用方括号括起来:a = [1 2 3 4 5];b = [1, 2, 3, 4, 5];2. 使用冒号运算符和步长来生成等差数列:c = 1:5; % 生成[1 2 3 4 5]d = 1:2:9; % 生成[1 3 5 7 9]3. 使用linspace函数生成指定范围和元素个数的等差数列:e = linspace(0, 1, 5); % 生成[0 0.25 0.5 0.75 1]4. 使用rand函数生成指定大小的随机数矩阵:f = rand(3, 2); % 生成一个3行2列的随机数矩阵二、数组的索引和切片Matlab中可以使用下标操作符(方括号)来访问数组元素。
下标从1开始,可以使用单个下标或多个下标来访问单个元素或多个元素。
例如:a = [1 2 3 4 5];b = a(2); % b等于2c = a(1:3); % c等于[1 2 3]Matlab还支持使用逗号来进行多维数组的索引和切片。
例如:A = [1 2 3; 4 5 6; 7 8 9];B = A(2,:); % B等于[4 5 6]C = A(:,1:2); % C等于[1 2; 4 5; 7 8]三、数组的运算和函数Matlab中的数组支持各种数学运算和函数,包括加、减、乘、除、幂次方、三角函数、指数函数、对数函数等。
例如:a = [1 2 3];b = [4 5 6];c = a + b; % c等于[5 7 9]d = a .* b; % d等于[4 10 18]e = a .^ 2; % e等于[1 4 9]f = sin(a); % f等于[0.8415 0.9093 0.1411]g = exp(a); % g等于[2.7183 7.3891 20.0855]h = log(a); % h等于[0 0.6931 1.0986]Matlab还提供了许多常用的数组函数,例如mean、sum、max、min、std、sort等,用于计算数组的平均值、总和、最大值、最小值、标准差、排序等统计信息。
MATLAB基础教程实验指导书实验一:Desktop操作桌面基础一、实验目的及要求1、熟悉MATLAB系统的安装流程,掌握MATLAB的启动和退出。
2、掌握MATLAB系统的各命令窗口的功能,熟悉常用选项和工具栏的功能和用途。
3、熟悉简单程序的输入、运行、调试及结果的显示过程。
二、实验内容1、认识MATLAB集成环境:熟悉个操作窗口的功能和用途。
掌握File(文件)、Edit(编辑)、View(显示)、Web(网络)、Window(窗口)和Help(帮助) 等菜单命令的使用。
2、启动和退出MATLAB(1)启动MATLAB的M文件。
在启动MATLAB时,系统可自动执行主M文件matlabrc.m,在matlabrc.m的末尾还会检测是否存在startup.m,如存在则会自动执行它。
在网络系统中,matlabrc.m保留给系统管理员,而各个用户可利用startup.m进行初始设置。
(2)、终止或退出MATLAB。
quit命令可终止MATLAB,但不保存工作空间的内容。
为保存工作空间的内容,可使用save命令。
1、利用save、load命令,保存和恢复工作空间。
用clear命令可清空工作空间。
(1)、工作空间中的变量可以用save命令存储到磁盘文件中。
(2)、用load命令可将变量从磁盘文件读入MATLAB的工作空间。
(3)、用clear命令可清除工作空间中现存的变量。
4、MATLAB的所有图形工具窗体都可以嵌入MATLAB窗体(Dock),也可以从MATLAB窗体中弹出(Undock),例如在MATLAB默认的图形窗体环境下,单击命令行窗体左上角按钮,就可以将MATLAB命令行窗体弹出。
要求分别将命令行窗体(Command Window)、命令行历史窗体(Command History)、当前路径查看器(Current Directory)、工作空间浏览器(Workspace Browser)、帮助(Help)、MATLAB性能剖析工具(Profiler) 从MATLAB窗体中弹出和嵌入MATLAB窗体(Dock)。
第3章数值数组及其运算4.在时间区间 [0,10]中,绘制t e y t2cos 15.0--=曲线。
要求分别采取“标量循环运算法”和“数组运算法”编写两段程序绘图。
解答%标量循环运算法t=linspace(0,10,200);N=length(t);y1=zeros(size(t));for k=1:Ny1(k)=1-exp(-0.5*t(k))*cos(2*t(k));endsubplot(1,2,1),plot(t,y1),xlabel('t'),ylabel('y1'),grid on %数组运算法y2=1-exp(-0.5*t).*cos(2*t);on指令实现。
解答%方法一t1=linspace(0,2*pi,10)%方法二t2=0:2*pi/9:2*pit1 =Columns 1 through 70 0.6981 1.3963 2.0944 2.7925 3.49074.1888Columns 8 through 104.88695.58516.2832t2 =Columns 1 through 70 0.6981 1.3963 2.0944 2.7925 3.49074.1888Columns 8 through 104.88695.58516.28326.由指令rng('default'),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。
解答rng('default')A=rand(3,5)[ri,cj]=find(A>0.5);id=sub2ind(size(A),ri,cj);ri=ri';cj=cj';disp(' ')disp('大于0.5的元素的全下标')disp(['行号 ',int2str(ri)])disp(['列号 ',int2str(cj)])disp(' ')disp('大于0.5的元素的单下标')disp(id')A =0.8147 0.9134 0.2785 0.9649 0.95720.9058 0.6324 0.5469 0.1576 0.48540.1270 0.0975 0.9575 0.9706 0.8003大于0.5的元素的全下标行号 1 2 1 2 2 3 1 3 1 3列号 1 1 2 2 3 3 4 4 5 5大于0.5的元素的单下标1 2 4 5 8 9 10 12 13 157.采用默认全局随机流,写出产生长度为1000的“等概率双位(即取-1,+1)取值的随机码”程序指令,并给出-1码的数目。
解答(1)运用均匀随机数解题法——解法1rng default %为以下结果重现而设;产生默认随机流。
详见第4.3.2节A=rand(1,1000);a=2*(A>0.5)-1;Na=sum(a==-1)Na =512(2)运用正态随机数解题法——解法2randn('state',123)B=randn(1,1000);b=2*(B>0)-1;Nb=sum(b==-1)Nb =462(3)直接发生法——解法3c=randsrc(1,1000,[-1,1]);Nc=sum(c==-1)Nc =4828.先运行clear,format long,rng('default'),A=rand(3,3),然后根据A写出两个矩阵:一个对角阵B,其相应元素由A的对角元素构成;另一个矩阵C,其对角元素全为0,而其余元素与对应的A阵元素相同。
解答clear,format longrng('default')A=rand(3,3)B=diag(diag(A))C=A-BA =0.814723686393179 0.9133758561390190.2784982188670480.905791937075619 0.6323592462254100.5468815192049840.126986816293506 0.0975404049994100.957506835434298B =0.814723686393179 0 00 0.632359246225410 00 0 0.957506835434298C =0 0.913375856139019 0.2784982188670480.905791937075619 0 0.5468815192049840.126986816293506 0.097540404999410 09.先运行指令x=-3*pi:pi/15:3*pi; y=x; [X,Y]=meshgrid(x,y); warning off;Z=sin(X).*sin(Y)./X./Y; 产生矩阵Z。
(1)请问矩阵Z中有多少个“非数”数据?(2)用指令surf(X,Y,Z); shading interp观察所绘的图形。
(3)请写出绘制相应的“无裂缝”图形的全部指令。
解答x=-3*pi:pi/15:3*pi;y=x;[X,Y]=meshgrid(x,y);warning offZ=sin(X).*sin(Y)./X./Y;NumOfNaN=sum(sum(isnan(Z))) %计算“非数”数目subplot(1,2,1),surf(X,Y,Z),shading interp,title('有缝图')%产生无缝图XX=X+(X==0)*eps;YY=Y+(Y==0)*eps;ZZ=sin(XX).*sin(YY)./XX./YY;subplot(1,2,2),surf(XX,YY,ZZ),shading interp,title('无缝图')NumOfNaN =18110. 下面有一段程序,企图用来解决如下计算任务:有矩阵⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡++++=k k k k k k k k 10229221911 A ,当k 依次取10, 9, 8, 7, 6, 5, 4, 3, 2, 1时,计算矩阵k A “各列元素的和”,并把此求和结果存放为矩阵Sa 的第k 行。
例如3=k 时,A 阵为⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡306329522841 ,此时它各列元素 的和是一个)101(⨯行数组[]87156 ,并把它保存为Sa 的第3行。
问题:该段程序的计算结果对吗?假如计算结果不正确,请指出错误发生的根源,并改正之。
解答(1)企图用以下程序完成题目要求。
for k=10:-1:1A=reshape(1:10*k,k,10);Sa(k,:)=sum(A);endSaSa =55 55 55 55 55 55 55 55 55 55 3 7 11 15 19 23 27 31 35 39 6 15 24 33 42 51 60 69 78 87 10 26 42 58 74 90 106 122 138 154 15 40 65 90 115 140 165 190 215 240 21 57 93 129 165 201 237 273 309 345 28 77 126 175 224 273 322 371 420 46936 100 164 228 292 356 420 484 548 612 45 126 207 288 369 450 531 612 693 774 55 155 255 355 455 555 655 755 855 955(2)正确性分析除k=1外,计算所得Sa 所有行的结果都正确。
但k=1时,]10,,2,1[1 A ,Sa 的第1行应该与1A 相同。
上述程序的错误是对sum 理解不正确。
sum 对二维数组,求和按列施行;而对一维数组,不管行数组或列数组,总是求那数组所有元素的和。
正确的程序应该写成for k=10:-1:1A=reshape(1:10*k,k,10);Sa(k,:)=sum(A);if k==1Sa(k,:)=A;endendSaSa =1 2 3 4 5 6 7 8 9 10 3 7 11 15 19 23 27 31 35 39 6 15 24 33 42 51 60 69 78 87 10 26 42 58 74 90 106 122 138 154 15 40 65 90 115 140 165 190 215 240 21 57 93 129 165 201 237 273 309 345 28 77 126 175 224 273 322 371 420 469 36 100 164 228 292 356 420 484 548 612 45 126 207 288 369 450 531 612 693 774 55 155 255 355 455 555 655 755 855 955。