实验1 MATLAB基本操作 |
您所在的位置:网站首页 › 作业讲评是什么意思 › 实验1 MATLAB基本操作 |
目录 【实验目的】 【实验原理】 MATLAB环境 MATLAB矩阵运算 MATLAB程序操作 MATLAB绘图操作 【实验内容】 一 矩阵操作 二 常用函数的应用 三 MATLAB程序设计 四 MATLAB绘图 【实验总结】 【实验报告要求】 【实验目的】1、熟悉MATLAB 操作环境,认识命令窗口、内存工作区窗口、历史命令窗口; 2、掌握MATLAB中数组与矩阵的创建;掌握矩阵运算与数组运算;掌握基本元素群运算 3、掌握MATLAB程序的编写、调试、调用、程序设计方法、MATLAB程序控制结构中顺序结构、选择结构、循环结构的使用、 4、掌握MATLAB函数的编写规则,及函数的调用 5、掌握二维图形的绘制;掌握图形的标注; 【实验原理】MATLAB俗称“矩阵实验室”,是Matrix Laboratory的缩写,它是一种科学计算工程软件。1984年由美国的MathWorks公司研制开发,是以矩阵计算为基础的交互式的功能强大的科学及工程计算软件。凭借它在科学计算、数据分析处理的强大功能,目前已经成为了数学界首选的科学工程软件之一。MathWorks公司通过多年的努力,集中全球各行各业的专业人士,在MATLAB的基本功能之上,开发了针对控制系统应用、信号处理、图形处理、通讯、金融财经等专业的专业工具箱组合。目前,MATLAB产品已经被广泛应用于航空航天、汽车、通讯等行业,逐步成为工程应用的最佳软件之一。在这些行业中,MATLAB已经被认为能够有效提高工作效率,改善设计手段的工具软件。 MATLAB的主要特点如下: 编程易、效率高:MATLAB以数组为基本计算单位;具有大量的算法优化功能函数; 语言简单、内涵丰富:语言及书写形式非常接近于常规数学书写形式;完备的帮忙系统,易学易用; 充分能力、可开发能力较强:MATLAB是一个开放的系统;用户可以开发自己的工具箱;可以方便地与Fortran、C语言对接; 运算符丰富; 既有结构化的控制语句(如for循环、while循环、break语句和if语句),又有面向对象编程的特性; 图像功能强大。 MATLAB的功能如下: MATLAB符号计算功能:MATLAB和著名的符号计算语言Maple相结合; MATLAB的绘图功能:MATLAB提供丰富的绘图命令,很方便实现数据的可视化; MATLAB的编程功能:MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。 然而,MATLAB也有自己的劣势:它与其他高级程序相比,MATLAB的循环运算效率低。这是由于MATLAB中所有的变量均为向量形式,这样一方面在对向量进行整体的计算时,表现出其他语言难以相比的高效率,但是对于向量中的单个元素,或是将向量作为单个循环变量来处理时,其处理过程相当复杂。 MATLAB环境1、MATLAB系统的启动与退出 启动MATLAB系统有3种常见方法: 1)“开始”→“程序”。 2)运行MATLAB系统启动程序MATLAB.exe。 3)建立MATLAB桌面快捷方式。 启动MATLAB后,进入MATLAB的默认界面,如图1-1所示。第1行为菜单栏,第2行为工具栏,左面是4个最常见的窗口,右边最大的是命令窗口(Command Window),左边分别是当前目录窗口(Current Window),工作空间窗口(Workspace)和命令历史窗口(Command History)。 命令窗口(Command Window) 命令窗口是进行MATLAB操作最重要的窗口,同时也是实现MATLAB各种功能的窗口。用户可以直接在MATLAB命令窗口内输入命令,实现其相应功能。MATLAB命令窗口除了能够直接输入命令和文本,还包括菜单命令和工具栏。下面列举常见的命令: 表1-1 MATLAB命令窗口常见命令及功能 命令 功能 clc 擦去一夜命令窗口,光标回到屏幕的左上角 clear 清除工作空间中所有的变量 clear all 从工作空间清楚所有变量和函数 clf 清除图形窗口内容 ans Answer的缩写,它是MATLAB默认的系统变量 % 其后面是用于解释的文字,不参与运算 delete 从磁盘中删除指定的文件 help 查询所示命令的帮助信息 窗口命令 clf:清除当前Figure窗口里的所有非隐藏图形对象。 Close:关闭当前的Figure窗口。 Close all:关闭所有的Figure窗口。 Clc:清除命令窗口里的内容,光标回到窗口的左上角。 工作空间管理命令 who:列出当前工作空间里的所有变量。 Whos:列出当前工作空间里的所有变量及大小、类型和所占的存储空间。 Clear:从工作空间清除所有变量。 Clear all:从工作空间清除所有变量、函数和MEX文件。 命令窗口中显示数据值计算的结果有一定的格式,默认为短格式(Format Short),即保留小数点后4位有效数字,对于大于1000的数值,使用科学计数法表示。 例1-1 在命令窗口中,输入1.2显示为1.2000,输入1200.2显示为1.2002e+003,输入x=1.2 ;y=1200.2;x+y按键,显示为ans=1.2014e+003,如图1-2所示。 注:在命令窗口中如果不执行命令且换行,要同时按下键。 (2)命令历史窗口(Command History) 用于记录一运行过的所有的MATLAB命令历史,包括已输入和运行过的命令、函数、表达式等信息,可进行命令历史的查找、检查等工作,也可以在该窗口中进行命令复制与重运行,为用户下一次使用同一个命令提供方便。 (3)工作空间窗口(Workspace) 工作空间窗口由一系列变量组成,可通过使用函数、运行M文件或载入已存在的工作空间来添加变量。它用于列出数据的变量信息,包括变量名\变量字节大小\变量数组大小\变量类型等内容。下面列举常见的命令: •who:列出当前工作空间中的所有变量; •whos:列出变量和它们的大小、类型; •save:将工作空间中的部分或全部变量保存到一个二进制文件(. mat)。 •load:将二进制文件(. mat)中的变量装入工作空间。 (4)当前目录窗口(Current Window) 当前目录窗口默认出现在MATLAB界面的左上侧的后台,用来设置当前目录,可以随时显示当前目录下的M、MDL等文件的信息,包括文件类型、文件名、最后修改的时间和文件说明信息等。 M文件的建立与打开 M文件是一个文本文件,它可以用任何编辑程序来建立和打开,而一般常用且最为方便的是使用MATLAB提供的文本编辑器。 建立新的M文件 为建立新的M文件,启动MATLAB文件编辑器有3种方法: •菜单操作。从MATLAB主窗口的File菜单中选择New菜单项,再选择M-file命令,屏幕上将出现MATLAB文本编辑器窗口。 •命令操作。在MATLAB命令窗口输入命令edit,启动MATLAB文本编辑器后,输入M文件的内容并存盘。 •命令按钮操作。单击MATLAB主窗口工具栏上的New M-File命令按钮,启动MATLAB文本编辑器后,输入M文件的内容并存盘。 打开已有的M文件 打开已有的M文件,也有3种方法: •菜单操作。从MATLAB主窗口的File菜单中选择Open命令,则屏幕出现Open对话框,在Open对话框中选中需打开的M文件。在文档窗口可以对打开的M文件进行编辑修改,编辑完成后,将M文件存盘。 •命令按钮操作。单击MATLAB主窗口工具栏上的Open File命令按钮,再从弹出的对话框中选择需打开的M文件。 MATLAB的帮助使用 (1)、 help 命令: 当不知系统有何帮助内容时,可直接输入 help 以寻求帮助: >> help(回车) 当想了解某一主题的内容时,如输入: >> help syntax %了解 MATLAB 的语法规定 当想了解某一具体的函数或命令的帮助信息时,如输入: >> help sqrt %了解函数 sqrt 的相关信息 (2)、lookfor 命令 现需要完成某一具体操作,不知有何命令或函数可以完成,主要是返回包含指定关键词的那些项。 如输入: >> lookfor line %查找与直线、线性问题有关的函数 (3)、help 菜单: 进入 MATLAB 环境,在主菜单栏找到“Help”菜单 “MATLAB Help”,打开Help Navigator 帮助导航器,可见系统提供了几种不同的帮助手段。MATLAB提供的联机帮助系统使用户在没有任何资料的情况下就能掌握它的使用和基本操作,作为MATLAB的用户应熟练掌握其联机帮助系统的使用,下面是MATLAB联机帮助系统的使用方法。 単击主窗口的绿色问号按钮即可进入帮助系统寻求帮助。 在命令窗口输入help,按回车键即可寻求帮助。 1、数据与矩阵 MATLAB运算的基本数据对象是矩阵,数组(这里指向量)是矩阵的特殊类型,但创建与运算又有区别。数组与矩阵属于数据结构的范畴,MATLAB中所有的数据都是用数组或矩阵形式保存的。 数组 数组的生成 直接法 用空格或逗号间隔数组元素,然后用中括号“[ ]”括起来。 例2-1 >> a=[1,2,3,4] a = 1 2 3 4 >> a=[1 2 3 4] a = 1 2 3 4 增量法(冒号法) 利用MATLAB提供的冒号运算符“:”,可生成1×n的矩阵。 格式:x=first: step: last; 例2-2 x=0:1:3或x=0:3 >> x=1:5:100 x = 1 6 11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 >> x=10:-1:1 %不能表示为10:1 x = 10 9 8 7 6 5 4 3 2 1 >> x=1:2:10 x = 1 3 5 7 9 linspace函数法 格式:linspace (a,b,n); [a,b] n-1等分,用那个等分点构成这个序列。 例1-7 a=linspace(1,10,3); >> a=linspace(1,10,3) a = 1.0000 5.5000 10.0000 2)数组的运算 常用数组运算符如表2-1所示。 表2-1 常用数组运算符 运算 符号 说明 数组加与减 a+ b与a-b 对应元素之间的加减 数乘数组 k*a或a*k k乘a的每个元素 数与数组加减 k+ a(k-a)或a+ k(a-k) k加(减)a的每个元素 数组乘数组 a.*b a中的元素乘以b中对应的元素a(i)*b(i) 数组乘方 a.^ k a中各元素的k次幂 k.^ a 以k为底,a中各元素为幂 数除以数组 k./a 以k为分子,a中各元素为分母 数组除法 a.\b左除 b中的元素除以a中对应的元素b(i)/a(i) a./b右除 a中的元素除以b中对应的元素a(i)/b(i) 例2-3 已知a=[1 2 3],b=[2 4 6],c=3;分析下列执行结果: >> a=[1 2 3];b=[2 4 6];c=3; >> a+ b, a-b, a+ c, a*c, a.*b, a.\b, a./b, a. ^b, a. ^c, c. ^a ans = 3 6 9 ans = -1 -2 -3 ans = 4 5 6 ans = 3 6 9 ans = 2 8 18 ans = 2 2 2 ans = 0.5000 0.5000 0.5000 ans = 1 16 729 ans = 1 8 27 ans = 3 9 27 矩阵 矩阵的表示: 矩阵元素必须在“[ ]”内; 矩阵的同行元素之间用空格(或“,”)隔开; 矩阵的行与行之间用“;”(或回车符)隔开; 矩阵的元素可以是数值、变量、表达式或函数; 矩阵的尺寸不必预先定义。 矩阵的创建: 直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。例2-4 >> x=[1 2 3;4 5 6;7 8 9] x = 1 2 3 4 5 6 7 8 9 通过函数创建 例2-5 >> x=0:pi/4:pi; >> y=sin(x) y = 0 0.7071 1.0000 0.7071 0.0000 基本矩阵函数如表所示: 表2-2 基本矩阵函数 函数 说明 ones()函数 产生全为1的矩阵,ones(n):产生n*n维的全1矩阵 zeros()函数 产生全为0的矩阵 rand()函数 产生在(0,1)区间均匀分布的随机阵 eye()函数 产生单位阵 randn()函数 产生均值为0,方差为1的标准正态分布随机矩阵 magic()函数 产生n*n魔方矩阵 利用文件建立矩阵 当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A, m, n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵。 通过M文件创建,在命令窗口或程序中执行。 例2-6 >> A=magic(5) A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 >> A(3,2) %取矩阵A中第3行第2列的元素 ans = 6 >> A(:,3:5) %表示取A的第3到第5列组成的矩阵 ans = 1 8 15 7 14 16 13 20 22 19 21 3 25 2 9 >> B=[1 3 5]; >> C=A(B,4) %表示取A的第4列的第1,3,5行元素组成的矩阵 C = 8 20 2 >> D=A(B,:) %表示取A的第1,3,5行组成的矩阵 D = 17 24 1 8 15 4 6 13 20 22 11 18 25 2 9 矩阵的简单操作 获取矩阵元素 •可以通过下标(行列索引)引用矩阵的元素,如Matrix(m, n); •也可以采用矩阵元素的序号来引用矩阵元素; •矩阵元素的序号就是相应元素在内存中的排列顺序; •在MATLAB中,矩阵元素按列存储; •序号(Index)与下标(Subscript)是一一对应的,以m*n矩阵A为例,矩阵元素 A(i, j)的序号为(j-1)*m+ i。 •其相互转换关系也可以利用sub2ind和ind2sub函数求得。 获取矩阵的信息 length(X); %返回矩阵X的行数和列数中的最大值;如果X是向量,返回分量的个数 size(X); %返回矩阵X的行数和列数 ndims(X); %返回矩阵X的维数 numel(X); %返回矩阵X的元素个数 例2-7 >> X=[1 2 3;4 5 6]; >> length(X) ans = 3 >> size(X) ans = 2 3 >> ndims(X) ans = 2 >> numel(X) ans = 6 4)矩阵的运算 矩阵常用的运算符号如表2-3所示。 表2-3常见矩阵运算符 运算符 符号 说明 算术运算符 +/- 算术加法/算术减法 * 矩阵乘法 .* 矩阵元素乘法 / 矩阵右除法 \ 矩阵左除法 ./ 矩阵元素右除法 .\ 矩阵元素左除法 ^ 矩阵指数 .^ 矩阵元素指数 ’ 复共轭转置 .’ 非复共轭转置 逻辑运算符 & 逻辑与 ~ 逻辑非 | 逻辑或 xor 逻辑异或 关系运算符 >/ > A=[1 2;3 4];>> B=[4 3;2 1]; >> 100+A ans = 101 102 103 104 >> A*B ans = 8 5 20 13 >> A.*B ans = 4 6 6 4 >> A\B ans = -6.0000 -5.0000 5.0000 4.0000 >> B/A ans = -3.5000 2.5000 -2.5000 1.5000 >> A.\B ans = 4.0000 1.5000 0.6667 0.2500 >> B./A ans = 4.0000 1.5000 0.6667 0.2500 下面介绍一些矩阵的特殊运算函数,如表2-4所示。 表2-4矩阵的特殊运算函数 函数 说明 函数 说明 det 求方阵的行列式 triu 提取矩阵A的上三角 inv 求方阵的逆 compan 求矩阵的伴随矩阵 rank 求矩阵的秩 eig 返回方阵的特征值和特征向量。[V,D]=eig(A)其中D为特征值构成的对角阵,每个特征值对应V的列为属于该特征值的一个特征向量,如果只有一个返回值,则得到特征值构成的列向量 norm 求矩阵和向量的范数norm(A, p),p可取1,2,inf norm(x,1) 1范数 norm(x, 2) 2范数 norm(x, inf) 无穷范数 cond 求矩阵的条件数,cond(A,p),p的含义同norm tril 提取矩阵A的下三角部分 5)聚合矩阵 通过连接一个或多个矩阵来形成新的矩阵。[ ]既是矩阵构造符,有事矩阵运算符。 直接构造法 C=[A B]; 水平(相同行数); C=[A;B] 垂直(相同列数)。 函数构造法 •cat 沿指定的维聚合; •horzcat 水平聚合; •vertcat 垂直聚合; •repmat 通过复制和叠置矩阵来创建新的矩阵; •blkdiag 用已有的矩阵创建新的对角矩阵。 例2-9 >> A=[1 2 3;4 5 6]; >> B=[7 8 9;10,11,12]; >> C=eye(2)*6; >> D=[A B] %等同于horzcat(A,B) D = 1 2 3 7 8 9 4 5 6 10 11 12 >> E=[A;B] %等同于vertcat(A,B) E = 1 2 3 4 5 6 7 8 9 10 11 12 >> F=cat(1,A,B) %沿1维(列)聚合,等同于vertcat(A,B);cat(2,A,B)等同于horzcat(A,B) F = 1 2 3 4 5 6 7 8 9 10 11 12 >> G=repmat(A,2,3) %将A垂直方向复制2次,水平方向复制3次 G = 1 2 3 1 2 3 1 2 3 4 5 6 4 5 6 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 4 5 6 4 5 6 >> H=blkdiag(A,B,C) %用A,B,C创建对角阵 H = 1 2 3 0 0 0 0 0 4 5 6 0 0 0 0 0 0 0 0 7 8 9 0 0 0 0 0 10 11 12 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 6 字符串(char) 在MATLAB中,字符串使用单撇号括起来的字符序列。MATLAB将字符串当做一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。也可以建立多行字符串矩阵。字符串是以ASCII码形式存储的。Abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码矩阵转换为字符串矩阵。与字符串有关的另一个重要函数是eval,其调用格式为:eval_r(t)其中t为字符串。它的作用是把字符串的内容作为对应的MATLAB语句来执行。 字符串的创建 直接法 通过把字符放在单引号中来指定字符数据,每个字符占两个字节。使用函数class或ischar测试数据类型。 country=[‘china’]; class(country); 如果字符串只有一行,可以直接赋值。 str=[‘tea’]; 如果字符串有多行,则用分号隔开。在多行的情况下,要保证每一行的字符串个数一致,即具有相同的长度,否则会出现错误。 name=[‘liu ying’;’hu xu’]; %错误 name=[‘liu ying’;’hu xu ’]; %正确 根据不同长度的字符串创建字符串时,将短的哪些字符串用空格补齐。使所有字符串的长度相同。 函数法 用char函数创建,自动以最长的输入字符串的长度为标准,进行空格补齐。 name=char(‘liu ying’;’hu xu’); 字符转换 字符转换常用的函数如表2-5所示。 表2-5 字符转换常见的函数及说明 函数 函数说明 abs 字符串转换为ASCII char 将单元数组转换为标准字符串数组 int2str 将整型数据转换为字符串型数据 str2double 将单元数组转换为字符串表示的双精度值 num2str 将数值型数据转换为字符串型数据 num2str(str, n) 将数值型数据转换为字符串型数据,且设置输出的位数 str2num 将字符串型数据转换为数值型数据 mat2str 将二维数组转换为字符串 例2-10 >> x=2018; >> size(x) %返回x的行列数 ans = 1 1 >> y=int2str(x) %将整型数据转换为字符串型数据 y = 2018 >> size(y) %返回y的行列数 ans = 1 4 >> class(x) %测试x的数据类型 ans = double >> class(y) %测试y的数据类型 ans = char >> x=[1 2 3;4 5 6]; >> size(x) %返回x的行列数 ans = 2 3 >> y=mat2str(x) %将数组转换为字符串 y = [1 2 3;4 5 6] >> size(y) ans = 1 13 >> class(x) ans = double >> class(y) ans = char MATLAB命令可以定义成一个字符串,使用eval使字符串所表达的MATLAB命令得到实现。 例2-11 >> fun='x.^2.*sin(x)' fun = x.^2.*sin(x) >> x=1:3; >> eval(fun) ans = 0.8415 3.6372 1.2701 3)比较字符串 ①strcmp()函数 strcmp()函数的基本功能是比较两个字符串是否相等,其基本用法是: strcmp(str1,str2); 比较字符串str1,str2 strncmp(str1,str2,n); 比较字符串的前n+1个字符 4)聚合字符串 在MATLAB中,想要将凉的 字符串连接在一起,有以下方法: 用中括号将str1和str2像矩阵元素一样包含起来:SC=[str1,str2]; 用strcat函数:strcat(str1,str2); 利用sprintf函数 多项式计算 多项式的建立 对于多项式P=a0xn+a1xn-1+a2xn-2+⋯+an-1x+an ,约定可以用下面的向量表示: P=[a0,a1,a2,⋯,an-1,an] 这样多项式问题就转换为向量问题来解决。 ①直接法创建多项式: 例2-12 >> P=[3 5 0 1 0 1 2] P = 3 5 0 1 0 1 2 >> y=poly2sym(P) y = 3*x^6 + 5*x^5 + x^3 + x + 2 ②若已知多项式的全部根,则可以用poly函数建立起该多项式;也可以用poly函数求矩阵的特诊多项式。Ploy函数是一个MATLAB程序,调用它的命令格式是:A=poly(x)。 多项式的四则运算 多项式的加减法运算 即多项式系数向量的加减,多项式系数向量采取相对幂从高到低的顺序排列。 多项式乘法运算 函数conv(P1,P2)用于求多项式P1和P2的乘积。这里P1、P2是两个多项式系数向量。 例2-13 求多项式x4+8x3-10 与多项式2x2-x+3 的乘积。 >> p1=[1 8 0 0 -10]; >> p2=[0 0 2 -1 3]; >> conv(p1,p2) ans = 0 0 2 15 -5 24 -20 10 -30 多项式除法运算 函数[Q,r]=deconv(P1,P2) 用于对多项式P1和P2作除法运算。其中Q返回多项式P1除以P2的商式,r返回P1除以P2的余式。这里,Q和r仍是多项式系数向量。 deconv是conv的逆函数,即有P1=conv(P2,Q)+r。 例2-14求多项式x4+8x3-10 除以多项式2x2-x+3 的结果。 >> p1=[1 8 0 0 -10]; >> p2=[2 -1 3]; >> [Q,r]=deconv(p1,p2) Q = 0.5000 4.2500 1.3750 r = 0 0 0 -11.3750 -14.1250 多项式的导函数 对多项式求导数的函数有: p=polyder(P):求多项式P的导函数; p=polyder(P,Q):求P/Q的导函数; [q,p]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。 上述函数中,参数P,Q是多项式的向量表示,结果p,q也是多项式的向量表示。 例2-15 求有理分式的导数。 >> P=[1]; >> Q=[1 0 5]; >> [p,q]=polyder(P,Q) p = -2 0 q = 1 0 10 0 25 多项式的求值 MATLAB提供了两种求多项式值得函数:polyval与polyvalm,它们的输入参数均为多项式系数向量P和自变量x。两者的区别在于前者是代数多项式求值,而后者是矩阵多项式求值。 代数多项式求值 Polyval函数用来求代数多项式的值,其调用格式为: Y=polyval(P,x); 若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中每个元素求其多项式的值。 例2-16 已知多项式x4+8x3-10 ,分别取x=1.2和一个2*3矩阵为自变量计算该多项式的值。 >> p1=[1 8 0 0 -10]; >> polyval(p1,1.2) ans = 5.8976 >> polyval(p1,[1 2 3;4 5 6]) ans = -1 70 287 758 1615 3014 矩阵多项式求值 Polyvalm函数用来求矩阵多项式的值,其调用格式与polyval相同,但含义不同。Polyvalm函数要求x为方阵,它以方阵为自变量求多项式的值。设A为方阵,P代表多项式x3-5x2+8 ,那么: polyvalm(P,A)的含义是:A*A*A-5*A*A+8*eye(size(A)), 而polyval(P,A)的含义是:A.*A.*A.*A-5*A.*A.*A+8*ones(size(A))。 例2-17 仍以多项式x4+8x3-10 为例,取一个2× 2矩阵为自变量分别用polyval和polyvalm计算该多项式的值。 >> polyval(p1,[1 2;3 4]) ans = -1 70 287 758 >> polyvalm(p1,[1 2;3 4]) ans = 485 722 1083 1568 多项式求根 n次多项式具有n个根,当然这些根可能是实根,也可能含有若干对共轭复根。MATLAB提供的roots函数用于求多项式的全部根,其调用格式为:x=roots(P)。 其中,P为多项式的系数向量,求得的根赋给向量x,即x(1),x(2),⋯ ,x(n)分别代表多项式的n个根。 例2-18 求多项式x4+8x3-10 的根。 >> A=[1 8 0 0 -10]; >> x=roots(A) x = -8.0194 + 0.0000i 1.0344 + 0.0000i -0.5075 + 0.9736i -0.5075 - 0.9736i 若已知多项式的全部根,则可以用poly函数建立起该多项式,其调用格式为:P=poly(x)。 若x为具有n个元素的向量,则poly(x)建立以x为其根的多项式,且将该多项式的系数赋给向量P。 例2-19 已知f(x) 计算f(x)=0的全部根。 由方程f(x)=0的根构造一个多项式g(x),并与f(x)进行对比。 >> P=[3,0,4,-5,-7.2,5]; >> X=roots(P) %求方程f(x)=0的根 X = -0.3046 + 1.6217i -0.3046 - 1.6217i -1.0066 + 0.0000i 1.0190 + 0.0000i 0.5967 + 0.0000i >> G=poly(X) %求多项式g(x) G = 1 至 5 列 1.0000 -0.0000 1.3333 -1.6667 -2.4000 6 列 1.6667 MATLAB程序操作1、MATLAB程序设计 1)M文件概述 将MATLAB语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式成为程序文件模式。 M语言文件可以分为主程序(脚本)文件和函数文件。 •一个M语言文件就是由若干MATLAB的命令组合在一起构成的。 •M语言文件是标准的纯文本格式的文件,其文本扩展名为.m。 MATLAB提供了meditor编辑器编辑M文件 注意: •不可用汉字命名(若用汉字命名虽然可以打开M文件,但是编译运行时会出错); •文件名不可与MATLAB内置函数重名; •文件名不可以以数字命名。 主程序(脚本)文件 •主程序文件没有输入参数和输出参数。 •执行主程序文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。 •主程序文件主要由注释行和代码行组成: a:M文件的注释行需要使用%,定义符注释定义符仅能影响一行代码 b:程序执行的结果将显示于命令窗中 函数文件(相当于C语言的子函数) •函数文件供主程序文件调用,必须制定函数名和输入输出参数,并由主程序文件中语句序列给出一系列操作,从而生成所需数据。 •函数文件格式一般包括以下部分: •(1)函数定义行:表明该m文件包含一个函数,且为其定义函数名、输入参数和输出参数。 function y=mean(x) (2)帮助信息:处在文件中的第二行,应该反映该m文件概括性信息 (3)函数体:函数所用计算过程和输入输出参数赋值的MATLAB代码;这里可以为调用函数、流程控制、交互式输入输出、计算、赋值等。 例3-1分别建立脚本文件和函数文件,将华氏温度f转换为摄氏温度c。转换公式为:c=5*(f-32)/9。 程序1:首先建立脚本文件并以文件名f2c.m存盘。 f=input('Input Fahrenheit temperature:'); c=5*(f-32)/9 然后再MATLAB的命令窗口中输入f2c,将会执行该脚本文件,执行情况为: >> f2c Input Fahrenheit temperature:73 c = 22.7778 程序2:首先建立函数文件f2c.m。 function c=f2c(f); c=5*(f-32)/9; 然后在MATLAB的命令窗口调用该函数文件。 >> y=input('Input Fahrenheit temperature:'); Input Fahrenheit temperature:70 >> x=f2c(y) x = 21.1111 2)M文件的建立与打开 M文件是一个文本文件,它可以用任何编辑程序来建立和打开,而一般常用且最为方便的是使用MATLAB提供的文本编辑器。 建立新的M文件 为建立新的M文件,启动MATLAB文件编辑器有3种方法: •菜单操作。从MATLAB主窗口的File菜单中选择New菜单项,再选择M-file命令,屏幕上将出现MATLAB文本编辑器窗口。 •命令操作。在MATLAB命令窗口输入命令edit,启动MATLAB文本编辑器后,输入M文件的内容并存盘。 •命令按钮操作。单击MATLAB主窗口工具栏上的New M-File命令按钮,启动MATLAB文本编辑器后,输入M文件的内容并存盘。 打开已有的M文件 打开已有的M文件,也有3种方法: •菜单操作。从MATLAB主窗口的File菜单中选择Open命令,则屏幕出现Open对话框,在Open对话框中选中需打开的M文件。在文档窗口可以对打开的M文件进行编辑修改,编辑完成后,将M文件存盘。 •命令按钮操作。单击MATLAB主窗口工具栏上的Open File命令按钮,再从弹出的对话框中选择需打开的M文件。 2 函数文件 函数文件的基本结构 function 输出形参表=函数名(输入形参表) 注释说明部分: 函数体语句说明:(1)通常函数名与M文件名相同,若不同,通过文件名调用。(2)关于注释说明:第一行:大写函数文件名与函数功能简要描述,lookfor关键词查询和help在线帮助时使用。第一行以后:输入出的参数含义及调用格式说明等。构成在线帮助文本。第三部分:与上部分空格行,编写日期版本编者等。(3)关于return:遇到后返回调用函数前的工作空间位置。 例3-2 编写函数文件,求半径为r的圆的面积和周长。 函数文件如下: function[s, p]=fcircle(r) %r 圆半径 %s 圆面积 %c 圆周长 s=pi*r*r; c=2*pi*r; 在命令窗口中输入: >> [s,p]=fcircle(10) s = 314.1593 p = 62.8319 2)函数调用 函数调用的一般格式是:[输出实参表]=函数名(输入实参表)。要注意的是,函数调用时各实参出现的顺序应与函数定义时形参的顺序一致;实参与形参之间的结合是通过值传递实现的;函数可以嵌套调用,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为递归调用;函数所传递的参数具有可调性,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。 例3-3利用函数文件,实现直角坐标(x, y)与极坐标(ρ,θ )之间的转换。 函数文件tran.m: function [rho,theta]=tran(x,y); rho=sqrt(x*x+y*y); theta=atan(y/x); 调用tran.m的命令文件main1.m: x=input('Please input x='); y=input('Please input y='); [rho,theta]=tran(x,y); 在MATLAB中,函数可以嵌套调用,即一个函数可以调用别的函数,甚至调用它自身,一个函数调用它自身成为函数的递归调用。 3)函数参数的可调性 重要系统变量nargin:存储调用函数时输入实参的个数。 例3-4 nargin用法示例。 函数文件testarg1.m function c=testarg1(a,b) if(nargin==1) c=2*a; elseif(nargin==2) c=a+b; end 命令窗口输入: >> testarg1 >> x=1:3; >> testarg1(x) ans = 2 4 6 >> y=2; >> testarg1(x,y) ans = 3 4 5 4)全局变量与局部变量 •函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件或其它M文件使用。 •当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即全部被清除。 •函数通过输入和输出参数与其它M文件进行数据传递。 •如果在若干个M文件中,都把某个变量定义为全局变量,则这些函数将公共使用这一变量。所有函数都可以对它进行存取和修改操作。 •定义全局变量是M文件间传递信息的一种手段。 局部变量的作用范围仅限于本函数。全局变量的作用范围为整个M文件。用global命令定义,格式为:global变量。将变量作为函数参数进行传递更为保险。 3 程序调试 程序调试概述 一般来说,应用程序的错误有两类,一类是语法错误,另一类是程序运行时的错误。语法错误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等;程序运行时的错误是指程序的运行结果有错误,这类错误也称为程序逻辑错误。 调试器 Debug菜单项(定点调试)。 该菜单项用于程序调试,需要与Breakpoints菜单项配合使用。 Breakpoints菜单项(断点调试)。 该菜单项共有6个菜单命令,前2个用于在程序中设置和清除断点,后4个是设置停止条件,用于临时停止M文件的执行,并给用户一个检查局部变量的机会,相当于在M文件指定的行号前加入了一个keyboard命令。 4 程序控制结构 顺序结构 数据的输入 从键盘输入数据,则可以使用input函数来进行,该函数的调用格式为:x=input(‘’提示内容)。 功能:在屏幕上显示提示内容,等待从键盘输入,将输入值赋给数据变量x。 例3-5 >> x=input('请输入变量x的值?'); 请输入变量x的值?[1 2 3;4 5 6;7 8 9] 再回车 如果在input函数调用时采用’s’选项,则允许用户输入一个字符串。例如想输入一个人的姓名,可采用命令: x=input(‘What’s your name?, ’s’’); 数据的输出 MATLAB提供的命令窗口输出函数主要有disp函数,其调用格式为:disp(输出项)。 其中输出项既可以为字符串,也可以为矩阵。 例 3-6 求一元二次方程ax2+bx+c=0 的根。 disp(‘求一元二次方程a.*x^2+b.*x+c=0的根,请输入系数abc:’); a=input('a='); b=input('b='); c=input('c='); delta=b*b-4*a*c; x=[(-b+ sqrt(delta))/(2*a),-b-sqrt(delta)/(2*a)]; disp([‘x1=’,num2str(x(1)),’x2=’,num2sre(x(2))]); 程序的暂停 暂停程序的执行可以使用pause函数,其调用格式为: pause(延迟秒数) 如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。 若要强行中止程序的运行可使用Ctrl+C命令。 选择结构 if语句 在MATLAB中,if语句有3种格式。 •单分支if语句 if 条件 语句组 end 当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。 例3-7 >> a=100; >> b=345; >> if a x=input('请输入x的值:'); 请输入x的值: >> if x> disp(y) •多分支if语句 if 条件1 语句组1 elseif 条件2 语句组2 ⋯⋯ elseif 条件m 语句组m else 语句组n end 多分支if语句用于实现多分支选择结构。 switch语句 switch语句称为条件选择句,根据表达式的取值不同,分别执行不同的语句,其语句格式为: switch 表达式 case 表达式1 语句组1 case 表达式2 语句组2 ⋯⋯ case 表达式m 语句组m otherwise 语句组n end 当表达式的值等于表示1的值时,执行语句组1,当表达式的值等于表示2的值时,执行语句组2,⋯ ,当表达式的值等于表示m的值时,执行语句组m,当表达式的值不等于case所列的表达式的值时,执行语句组n。当任意一个分支的语句执行完成后,直接执行switch语句的下一句。 MATLAB中的switch结构与C语言中的switch结构略有差别。在C语言中,检验某个case符合并执行其运算后,还会继续检查下一个case,直到全部检查完,所以一般会加入break,只运算第一个检验成功的运算式。但在MATLAB中只执行一个检验成功的case。 例 3-9 某商场对顾客所买的商品实行打折销售,标准如下:(商品价格用price来代表): price> price=input('请输入商品价格:'); 请输入商品价格: >> switch fix(price/100) %fix取最近的整数 case {0,1} %价格小于200,元胞数组[0],[1] rate=0; case {2,3,4} %价格大于等于200但小于500 rate=3/100; case num2cell(5:9) %价格大于等于500但小于1000 rate=5/100; %元胞数组[5][6][7][8][9] case num2cell(10:24)%价格大于等于1000但小于2500 rate=8/100; case num2cell(25:49)%价格大于等于2500但小于5000 rate=10/100; otherwise %价格大于等于5000 rate=14/100; end >> price=price*(1-rate); try语句 语句格式为: try 语句组1 catch 语句组2 end try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。 例3-10 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。 程序如下: >> A=[1 2 3;4 5 6]; >> B=[7 8 9;10 11 12]; >> try C=A*B; catch C=A.*B; end 循环结构 for语句 通常用来执行循环次数已知的情况,可按制定次数来重复执行循环体中的内容。 基本调用格式为: for 循环变量=表达式1:表达式2:表达式3 循环体语句 end 其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。 例3-11 计算从1到100的和。 程序如下: sum=0; for n=1:100 sum=sum+n; end for语句中的循环变量也可以是任何合法的MATLAB向量或矩阵。对于一个矩阵A来说可以有: for k=A 循环体语句 end 执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,每次执行循环时,k为矩阵A中1列的所有元素,即A(:,i),直至各列元素处理完毕。 while语句 while语句也是一种循环语句,一般用于事先不能确定循环次数的情况。 调用格式为: while 条件 循环体语句 end 其执行过程为:若条件成立,则执行循环体语句,执行后判断条件是否成立,如果不成立则跳出循环。 例3-12用while语句重做例1-31。 程序如下: sum=0;i=1; while (i> clear >> for n=100:200 if rem(n,21)~=0 %通过rem求余判断是否整除 continue else disp(n) end break end 105 MATLAB绘图操作(1)二维数据曲线图 1)绘制单根二维曲线 在MATLAB中,在直角坐标系下绘制二维曲线一般使用plot函数。基本调用格式:plot(x,y)。其中x和y为长度一致的向量。 2)绘制多根二维曲线 ①plot的输入参数为矩阵形式 如果plot函数的输入参数为矩阵,此时会在同一坐标下绘制多条曲线。 •x为向量,y是有一维与x同维的矩阵。 •当x,y是同维矩阵时,则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。 •对只包含一个输入参数的plot函数,当输入参数是实矩阵时,则按列绘制每列元素值相对其下标的曲线,曲线条数等于输入参数矩阵的列数。当输入参数是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标,绘制多条曲线。 ② 含有多个输入参数的plot函数。 这种情况下将对每一对向量绘制相应的曲线,其调用格式为:plot(x1,y1,x2,y2,…,xn,yn)。 •当输入参数都为向量时,x1和y1,x2和y2,⋯ ,xn和yn分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。 •当输入参数有矩阵形式时,配对的x,y按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。 具有两个纵坐标标度的图形 在MATLAB中,如果需要绘制出具有不同纵坐标标度的啷个图形,可以使用plotyy绘图函数。调用格式为:plotty(x1,y1,x2,y2)。 其中x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1,y1数据对,右纵坐标用于x2,y2数据对。 例4-1分析下列程序绘制的曲线。 >> x1=linspace(0,2*pi,100); >> x2=linspace(0,3*pi,100); >> x3=linspace(0,4*pi,100); >> y1=sin(x1); >> y2=1+sin(x2); >> y3=2+sin(x3); >> x=[x1;x2;x3]'; >> y=[y1;y2;y3]'; >> plot(x,y,x1,y1-1); 运行结果如图4-1所示。 图形保持 hold on/off 命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态之间进行切换。 设置曲线样式 假如我们要回执一条红色的曲线,我们只需要使用英文单词red的首写字母r。要设置曲线样式,可以在plot函数中加绘图选项,其调用格式为: plot(x1,y1,选项1,x2,y2,选项2,⋯ ,xn, yn,选项n); plot绘图函数的参数的汇总,如表4-1所示。 表4-1 plot绘图函数的参数 字元 颜色 字元 时标 字元 线态 y 黄色 . 点 - 实线 k 黑色 o 圆 : 点线 w 白色 + + -. 点虚线 b 蓝色 * * —— 虚线 g 绿色 r 红色 例4-2 在同一坐标内,分别用不同线型和颜色绘制曲线y1=0.2e-0.5xcos4πx 和y2=2e-xcosπx ,并标记两曲线交叉点。 程序如下: >> clear >> x=linspace(0,2*pi,1000); >> y1=0.2*exp(-0.5*x).*cos(4*pi*x); >> y2=2*exp(-x).*cos(pi*x); >> k=find(abs(y1-y2)> x1=x(k); %取y1与y2相等点的x坐标 >> y3=0.2*exp(-0.5*x1).*cos(4*pi*x1); %求y1与y2值相等点的y坐标 >> plot(x,y1,x,y2,'k:',x1,y3,'bp'); 运行结果如图4-2所示,其中“☆”为交叉点。 图4-2例1-40的运行结果 图形标注与坐标控制 图形标注 图形标注函数的调用格式: title(图形名称); xlabel(x轴说明); ylabel(y轴说明); text(x, y,图形说明); legent(图例1,图例2,⋯ ); 例4-3 在0≤ x≤ 2π 区间内,绘制曲线y1=e-x 和y2=cos(2πx) ,并给图形添加图形标注。 程序如下: >> clear >> x=0:pi/100:2*pi; >> y1=exp(-x); >> y2=cos(2*pi*x); >> plot(x,y1,x,y2); >> title('x from 0 to 2{\pi}'); %加图形标题 >> xlabel('Variable X'); %加x轴说明 >> ylabel('Variable Y'); %加y轴说明 >> text(2,0.2,'曲线y1=e^{-x}'); %在指定位置添加图形说明 >> text(4,0.8,'曲线y2=cos(2{\pi}x)'); >> legend('y1','y2'); 运行结果如图4-3所示。 图4-3 例4-3的运行结果 坐标控制 axis 函数的调用格式为: axis([xmin xmax ymin ymax zmin zmax]); axis 函数功能丰富,常用的格式还有: axis equal:纵、横坐标轴采用等长刻度。 axis square:产生正方形坐标系(默认为矩形)。 axis auto:使用默认设置。 axis off:取消坐标轴。 axis on:显示坐标轴。 给坐标加网格线用grid命令来控制。grid on/off命令控制是加还是不加网格线,不带参数的grid命令在两种状态之间进行切换。 给坐标加边框线用box命令来控制。box on/box off命令控制是加还是不加边框线,不带参数的box命令在两种状态之间进行切换。 例4-4 在同一坐标中,绘制3个同心圆,并加坐标控制。 程序如下: >> t=0:0.01:2*pi; >> x=exp(i*t); >> y=[x;2*x;3*x]'; >> plot(y); >> grid on; %加网格线 >> box on; %加坐标边框线 >> axis equal; %坐标轴采用等刻度 运行结果如图1-6所示。 图4-4 例4-4的运行结果 对函数自适应采样的绘图函数 fplot函数的调用格式为: fplot(fname, lims, tol,选项); 其中,fname为函数名,以字符串形式出现;lims为x,y的取值范围;tol为相对允许误差,其系统默认值为2e-3;选项定义与plot函数相同。 例4-5 用fplot函数绘制f(x)=cos(tan(π x))曲线。 程序如下: >> fplot('cos(tan(pi*x))',[0,1],1e-4); 运行结果如图4-5所示。 图4-5例4-5的运行结果 图形窗口的分割 subplot函数的调用格式: subplot(m, n, p); 该函数将当前图形窗口分为m× n个绘图区,即每行n个,共m行,区号按行优先编号,且选定第p个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。 (2)二维统计分析图 在MATLAB中,二维统计分析图形很多,常见的有条形图、梯形图、杆图和填充图等,所采用的函数分别是: bar(x, y,选项); stairs(x, y,选项); stem(x, y,选项); fill(x1, y1,选项1,x2, y2,选项2,⋯ ); 例4-6 分别以条形图、梯形图、杆图和填充图形式绘制曲线y=sin(x)。 程序如下: >> clear >> x=0:pi/10:2*pi; >> y=sin(x); >> subplot(2,2,1);bar(x,y,'g'); >> title('bar(x,y,"g")');axis([0,7,-1.1,1.1]); >> subplot(2,2,2);stairs(x,y,'b'); >> title('stairs(x,y,"b")');axis([0,7,-1.1,1.1]); >> subplot(2,2,3);stem(x,y,'k','.'); >> title('stem(x,y,"y")');axis([0,7,-1.1,1.1]); >> subplot(2,2,4);fill(x,y,'y'); >> title('fill(x,y,"y")');axis([0,7,-1.1,1.1]); 运行结果如图4-6所示。 MATLAB提供的统计分析绘图函数还有很多,例如,用来表示各元素占总和的百分比的饼图、复数的向量图等等。 例4-7 绘制图形: (1)某企业全年各季度的产值(单位:万元)分别为:2347,1827,2043,3025,试用饼图作统计分析。 (2)绘制复数的向量图:7+2.9j、2-3j和-1.5-6j。 程序如下: >> subplot(1,2,1); >> pie([2347,1827,2043,3025]); >> title('饼图'); >> legend('一季度','二季度','三季度','四季度'); >> subplot(1,2,2); >> compass([7+2.9j,2-3j,-1.5-6j]); >> title('向量图'); 运行结果如图4-7所示。 1)、分别在MATLAB命令窗内完成以上3个矩阵的赋值,总结逗号,分号在矩阵赋值 的使用方法。 答:逗号:一行中每个元素的分隔;分号:矩阵的行的分隔。 2)、分别用两种方法,写出引用A矩阵中’4’元素表达式。 3)、写出表达式,验证:赋值元素下标超维时,矩阵行列自动扩展,引用元素下标超维时(超维调用),则会报错。 4)、写出表达式,给B矩阵的第2行赋值为[9 8 7 6 5 4 3 2 1],C矩阵的第2列赋值为[4 3 2 1]。 2.在命令窗内写下语句i=2;j=2;而后,写出表达式,试对复数c=[1+2*i,3+4*i,5+6*i] ,用两种方式对其进行赋值,并表达式写出C的转置。总结复数赋值时需要注意什么,i之前的*符号什么时候才能省略。 答:在进行复数赋值时可以使用i或j, 此外的字母不能用于复数表示;如果 i 或 j 已经被进行了赋值, 在进行复数赋值时要省略乘号。 3.练习基本矩阵zeros, ones命令的使用,分别写出表达式,要求构成N阶方阵,M*N阶方阵,与某任意已知矩阵A同阶的矩阵。 4、数组赋值: 1)、对时间变量t进行赋值,要求:在0-20秒间每隔0.2秒取一个值,用两种办法实现.(冒号,linspace),指明当函数linspace(a,b,n),n缺省时,维数是多少? 答:linspace(a, b, n)当 n 缺省时,维数是 100, 默认 100 等分。 2)、在命令窗内逐条输入以下命令 x=logspace(1,4,4) y=linspace(1,4) 观察结果,说明语句的功能。 答:logspace(1, 4, 4)是以 10 为底的对数进行等分, 生成从 10^1 到 10^4 之间的 4 个对数间 距点组成的行向量;linspace(1, 4)生成从 1到4的100个等分点。 5、矩阵初等运算: 1)、矩阵相加减乘分别需满足什么条件?表达式验证:矩阵和一个标量相加减时,标量会扩展成同阶等元素矩阵。 答:矩阵相加减乘需满足的条件是不同矩阵具有相同的列和行。 2)、MATLAB中矩阵除法分为左除和右除,已知A=[1 2 3 4 5 6],B=[ 2 4 0;1 3 5],C=[1 4 7;8 5 2;3 6 0],分别求解A*B, A’*B’, A*B ,C\A ,C\A ’,A/C。说明左除和右除的满足的条件。 答:左除(\)运算时,行数必须相同,右除(/)运算时,列数必须相同。 部分题目需要参阅help,及附件参考文件完成 1.总结函数max,min,mean,median,sum, trapz, diff的功能。 答:(1)max函数 ① C = max(A):返回一个数组各不同维度中的最大元素,如果A是一个向量,max(A)返回A中的最大元素,如果A是一个矩阵,max(A)将A的每一列作为一个向量,返回一个行向量。 ② [C,index] = max(A):返回返回行向量C和index,C向量记录矩阵A每列的最大值,index记录A每列最大值的行号(即每列最大值的索引)。 ③ [C,index] = max(A,[],dim):返回A中有dim指定的维数范围中的最大值。其中dim=1或2。 dim = 1时,在1维方向上取最大值,即取每列中的最大值,结果 为行向量 存在C中,index为每列中最大值得索引。 (2)min函数 ① C = min(A):如果A是一个向量,min(A)返回A中的最小元素。如果A是一个矩阵,min(A)将A的每一列作为一个向量,返回一行向量包含了每一列的最小元素。 ② C = min(A,B)返回一个和A和B同大小的数组,其中的元素是从A或B中取出的最小元素。 ③ C = min(A,[],dim)返回A中有dim指定的维数范围中的最小值。 ④[C,I] = min(...)找到A中那些最小值的索引位置,将他们放在向量I中返回。如果这里有多个相同最小值时,返回的将是第一个的索引。 (3)mean函数 M = mean(A) 返回 A 沿大小不等于 1 的第一个数组维度的元素的均值。如果 A 是向量,则 mean(A) 返回元素均值。如果 A 为矩阵,那么 mean(A) 返回包含每列均值的行向量。如果 A 是多维数组,则 mean(A) 沿大小不等于 1 的第一个数组维度计算,并将这些元素视为向量。此维度会变为 1,而所有其他维度的大小保持不变。 (4)median函数 M = median(A) 返回 A 的中位数值如果 A 为向量,则 median(A) 返回 A 的中位数值。如果 A 为非空矩阵,则 median(A) 将 A 的各列视为向量,并返回中位数值的行向量。如果 A 为 0×0 空矩阵,median(A) 返回 NaN。如果 A 为多维数组,则 median(A) 将沿大小不等于 1 的第一个数组维度的值视为向量。此维度的大小将变为 1,而所有其他维度的大小保持不变。 (5)sum函数 ①S = sum(A) 返回 A 沿大小不等于 1 的第一个数组维度的元素之和如果 A 是向量,则 sum(A) 返回元素之和。如果 A 是矩阵,则 sum(A) 将返回包含每列总和的行向量。如果 A 是多维数组,则 sum(A) 沿大小不等于 1 的第一个数组维度计算,并将这些元素视为向量。此维度会变为 1,而所有其他维度的大小保持不变。 ②S = sum(A,'all') 计算 A 的所有元素的总和。 ③S = sum(A,dim) 沿维度 dim 返回总和。例如,如果 A 为矩阵,则 sum(A,2) 是包含每一行总和的列向量。 ④S = sum(A,vecdim) 根据向量 vecdim 中指定的维度对 A 的元素求和。例如,如果 A 是矩阵,则 sum(A,[1 2]) 是 A 中所有元素的总和,因为矩阵的每个元素包含在由维度 1 和 2 定义的数组切片中。 ⑤sum(A,'includenan') 会在计算中包括所有 NaN 值。 ⑥sum(A,'omitnan') 则忽略这些值。 (6)trapz函数 trapz(x, y, n), 其中y是x的积分, 使用梯形法则逼近函数y = f(x)的积分, 并且n(可选)与维度n进行积分。句法Z = trapz(Y)Z = trapz (X, Y)Z = trapz (..., dim)。 (7)diff函数 diff函数式用于求导数和差分的.无论是求导数还是差分。 ①对连续求导diff(X) , 求函数X的一阶导数。 ②diff(X, n) , 求函数X的n阶导 (n是具体整数)。 ③diff(X,变量名), 求函数X的偏导数(对谁求偏导数,变量名就是谁)。 ④diff(X, 变量名,n) ,求函数X的n阶偏导数。 2.产生8*6阶的随机数矩阵R1,服从N(4,8)的正态分布,并求其各列的平均值和均方差。 产生 4*6阶的均匀分布随机数矩阵R2,并验证其均值是否为0.5。 3、查询函数conv的功能,并总结其用法。 答:conv 计算卷积和多项式乘法,w = conv(u,v) 返回向量 u 和 v 的卷积。如果 u 和 v 是多项式系数的向量,对其卷积与将这两个多项式相乘等效。w = conv(u,v,shape) 返回如 shape 指定的卷积的分段。 4、设方程的根x=[-3,-5,-8,-9],求它们对应的x多项式的系数。 2)、用roots函数求此多项式的根。 【思考题】 总结在完成实验的过程中,遇到了哪些问题,如何解决的。 答:很多函数不知道具体作用和用法,通过网络查询以及运用命令行help查看解释和询问同学解决的。 说明什么是元素群运算,元素群运算的优势在哪里。 答:元素群运算是指对一组元素进行特定处理后得到的结果仍然是该元素群中的元素, 比 如 matlab 中的矩阵通过一次运算如加减 转置 矩阵的逆之后得到的结果仍然是元素群中的元素。 抽象性,可以将一些复杂的处理抽象成一个元素群的运算,如将一个多元方程的求根问题 可以抽象转化成一个矩阵的变化问题,简化了处理方法,提高了解决问题的可行性.。 重复性,一个元素群经过同样大的处理后得到的结果是相同的,可以通过重复处理来判断 结果的准确定。 可扩展性,元素群可以根据情况进行扩张,从而可以适应不同的问题情况。 应用领域多,可以在多个领域应用,在物理学 数学 几何学 化学等多个领域,适用性广,可 以利用元素群运算更好的处理相关问题. 3、总结幂次运算需要注意什么。 答:在进行较大数值的幂次运算时要先对数值进行一个预估避免出现数值过大或过小而发生的溢出问题;矩阵的幂次运算需要注意矩阵的维数是否满足乘法需求。 三 MATLAB程序设计1、在文本编辑窗内输入以下程序段,并存储调用,分析该程序的功能。 x=0:pi/20:pi/3; y=sin(x); p=polyfit(x,y,5) x1=0:pi/30:pi*2; y1=sin(x1); y2=polyval(p,x1); plot(x1,y1,'b-',x1,y2,'r*') legend('原曲线','拟合曲线') axis([0 7 -1.2 4]) 2.编写一个通用函数文件,求圆的面积,在命令窗给定半径,调用该函数求解。 3、选择结构 1)、输入一个百分制成绩,要求输出成绩等级A、B、C、D、E。其中90分~100分为A,80分~89分为B,70分~79分为C,60分~69分为D,60分一下为E。 要求: 1)分别用if语句和switch语句实现。 2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 4、循环结构 1)、 根据pi*pi/6=1/1^2+1/2^2+1/3^2+……+1/n^2,求pi的近似值。当n分别取100,1000,10000时,结果是多少? 2)、 根据y=1+1/3+1/5+……+1/(2n-1),求 (1)y |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |