一、复习线性代数1.矩阵的定义由m×n个元素组成的m行n列的数表如下图称为一个m×n阶矩阵记为当mn时矩阵A为n阶方阵或n阶矩阵。2.同型矩阵两个矩阵行数和列数都相同。3.转置矩阵是A的转置矩阵记为4.单位矩阵5.向量的定义由n个数构成的数表[a,a2,…,an]或[aa2,…,an]T称为n维行向量或n维列向量。显然向量是矩阵的特例行向量的行数为1列向量的列数为1。6.向量的模设向量 α [ a1 , a2 , a3 ]T称为向量α的模记为lal。7.矩阵的加减法则A-B8.数与矩阵的乘法9.矩阵与矩阵的乘法AB其中必须满足左边矩阵的列数与右边矩阵的行数相等。10.矩阵的逆设A是n阶矩阵若存在n阶矩阵B使得BAE或ABE则称矩阵A可逆矩阵B称为矩阵A的逆矩阵记为BA^(-1)。11.特征值和特征向量设n阶方阵A满足以下条件存在数入入可为复数和非零n维列向量c使得Ax入x成立则称数入是方阵A的特征值称x为方阵A对应于特征值入的特征向量。注意特征向量并不唯一kxk0也是方阵A对应于特征值入的特征向量。二、matlab中的向量上一节我们知道向量可以视为矩阵的一个特例若一个矩阵的行数为1则它可以视为一个行向量若列数为1则可以视为列向量如果行数和列数同时为1那么它就是一个标量又称为常量、常数。学过其他编程语言的同学应该听过数组这个概念在程序设计中为了处理方便我们需要把具有相同类型的若干元素按有序的形式组织起来这些有序排列的同类型数据元素的集合就被称为数组。在MATLAB的官方文档中有时候也会出现数组这个概念。在MATLAB里向量可以被称为一维数组而我们常见到的由多行多列构成的矩阵可以被称为二维数组这两个维度由矩阵的行和列表示。在MATLAB中一维数组可以视为二维数组的一个特例。另外在MATLAB中我们还可以定义多维数组多维数组是指具有两个以上维度的数组绝大多数情况下我们不会用到有兴趣的同学可以查看官方帮助文档。以后在不引起误会的情况下我们将MATLAB中的矩阵和数组视为同一个概念。1.向量的创建方法①直接输入法a[1,3,5] b[1 3 5] c[1 3 5] d[1;3;5]②冒号法最常用我们可以利用命令Astep:B来创建一个行向量。其中A是起始值Istep是每次递增或递减的步长B是终止值不一定刚好停在这里。若step等于1则可以直接简写成A:B。大家根据上面的例子应该很容易发现规律。下面再给大家补充两个知识点第一上表中有三种情况都会导致MATLAB返回空的向量空的1xOdouble行向量。怎么理解这个返回结果呢这个“1×0”指的是向量的维度你可以理解为1行0列即这个向量是空的不存在元素。在MATLAB中我们可以直接使用命令[]创建空的向量。第二MATLAB返回空的向量时出现了一个英文单词double。这里的double表示双精度浮点型我在这门课中并没有特意去介绍数值的类型原因是这一块的知识比较底层涉及到数值在计算机中的存储方式。同时和C、C、JAVA等语言相比MATLAB是偏应用的一门语言其对数值类型的要求较弱。对数值类型感兴趣的同学可以先在b站学习C语言的公开课然后再从MATLAB官网搜索数值类型的帮助文档进行学习。③利用matlab函数创建我们主要介绍两个函数linspace和logspace它们分别用来创建等差数列和等比数列。首先介绍linspace函数它有两种用法区别在于是否给定第三个输入参数n如果我们不指定n则MATLlAB会默认n100。这个函数使用的频率也很高大家需要掌握。●linspace(ab)该命令用来创建一个行向量向量中的第一个元素为a最后一个元素为b形成总数为100个元素的线性间隔的向量。●linspace(abn)该命令用来创建一个行向量向量中的第一个元素为a最后一个元素为b形成总数为n个元素的线性间隔的向量。初学者可能搞不懂linspace(a,b,n)和冒号法a:step:b生成向量的区别我这里为大家总结1linspace不需要指定步长MATLAB会根据你给定的元素个数n自动计算出来而使用冒号法可以自己指定步长。(2linspace生成的向量的最后一个元素一定是b而使用冒号法A:step:B生成的向量的最后元素不一定是b。3后续章节讲解循环语句时冒号法使用的频率最高而在绘制函数图形时使用linspace得到的x轴的范围要比冒号法稍微准确一点。例如我们要绘制sin(x)在区间[02π]上的图形x的范围是0到2π我们使用 linspace(0,2*pi)生成的向量的最后一个元素一定是2π如果使用冒号法令x0:0.1:2*pi那么x向量的最后一个元素和2π有一个微小的差异当然如果我们将step取得更小例如取成0.01那么这个差异几乎可以忽略。另一个函数是logspace函数它使用的频率不高大家了解即可。它有两种常见的用法●logspace(a,b)创建一个行向量其第一个元素为10°最后一个元素为10°形成总数为50个元素的等比数列向量。●logspace(a,b,n创建一个行向量其第一个元素为10^a最后一个元素为10^b形成总数为n个元素的等比数列向量。linspace是“Linear Space”线性空间的缩写。2.向量元素的引用对向量元素的引用即提取向量指定位置的值有两种情形分别是提取向量中的单个元素和提取向量中的多个元素。在正式讲解之前我们先来介绍索引或下标的概念。我们知道向量分为行向量和列向量它们在MATLAB中只有一个维度因此我们可以利用向量中包含的元素个数来描述一个向量的大小。在MATLAB中可以使用Iength函数或numel函数来计算向量中包含的元素个数。例如a[1,3,8,9,7];length(a)或numel(a)的返回结果是5因为向量a中有五个元素。假如我们有一个行向量a里面包含了n个元素n是大于等于1的常数)它们分别是a1,a2,,am那么我们可以列一个表格从上表可以看出索引就是指某一个元素在向量中对应的位置也可以称为元素在向量中所处的下标在MATLAB中向量的索引是从1开始的。举个具体的例子假设向量a[2481632641282565121024]那么a中有10个元素因此a的最大索引是10。1单个元素引用我们提取向量a中单个元素的方法很简单只需要利用a(ind)命令小括号中的ind就是你要提取的对应元素的索引。注意创建向量用中括号提取元素要用小括号哦例如a1)的结果为2因为a中第1个位置索引或下标等于1的元素是2类似的a(9)等于512因为a中第9个位置的元素是512。有些同学可能会好奇如果我取索引为11即输入a11)会出现什么情况MATLAB会报错“索引超出数组元素的数目10”即告诉我们现在这个向量中元素的数目只有10个即最大索引是10而你取了索引11的元素超出了取值范围。如果a为空2多个元素引用类似的我们也可以利用向量的索引来同时提取多个位置的元素这时候只需要将ind设置成一个向量ind中放入我们想要提取的元素的索引然后使用a(ind)命令即可。例如我们令 ind[13579]那么a(ind)的结果为[2832128512]即我们提取了向量a中奇数位置的元素。熟悉向量冒号创建方法的同学应该能够看出ind等于1:2:9因此我们可以直接将a(ind)写成a(1:2:9)这就表示提取a中奇数位置的元素类似的提取a中偶数位置元素的命令是a(2:2:10)如果你不熟练的话可以分成两步写即先令ind2:2:10然后再使用a(ind)的命令。当然对于同一个位置的元素我们也可以提取多次例如ind[122333]那么a(ind)得到的结果应该是[244888]以后熟悉的话可以直接写成a([122333])。技巧使用end索引有同学会想假如我不知道向量a中有多少个元素也不想使用length函数或者numel函数来计算向量中元素的个数那我能不能提取出a中奇数位置的元素呢这时候就需要用到一个特殊的关键字end。它有很多种用法在这里end可以用来替代向量的最后一个索引。例如我现在要访问a中第五个至最后一个元素那么我们可以直接使用a5:end)这里的end就表示了a的最后一个索引另外我们还可以对end进行计算例如要访问a中第五个至倒数第三个元素我们可以使用a(5:end-2)得到的结果为[3264128256]。这里有一个易错点如果使用了end不能将要取元素的索引赋值给ind。例如还是要访问a中第五个至最后一个元素如果你令ind5:endMATLAB就会报错。因此我们只能在a后面的小括号中使用end来替代数组的最后一个索引。那我们回到上面的问题在不知道a中有多少个元素的前提下我们可以使用a1:2:end)最后请大家思考如何将一个向量倒序例如原来的向量是[1 5 8 4]倒序后是[4 8 5 1]。3.向量元素的修改和删除如果右边为常数则将指定位置的元素全部变成这个常数。如果我们将等号右侧变成空向量[ ]则表示删除对应位置的元素。三、matlab中的矩阵1直接输入法我们先来看直接输入法直接输入法适用于矩阵中元素数量较少的情况。输入矩阵时要以中括号“[]”作为标识符号矩阵的所有元素必须都在中括号内。矩阵的同行元素之间用空格或逗号分隔行与行之间用分号或回车键分隔。例如命令a[123;456]可以在工作区创建出变量名为a的矩阵2函数创建法MATLAB提供了一些函数这些函数可以用来生成某些特定的矩阵我们这里介绍几组最常用到的函数。第一组函数zeros、ones 和 eye。这三个函数分别用来创建全为0的矩阵、全为1的矩阵和单位矩阵eye这个名字是一个非常巧妙的双关语它既描述了矩阵对角线元素排列像一只眼睛又谐音了代表“恒等元素”的字母I。以zeros函数为例其常见的用法有两种1)zeros(n)可以创建一个n行n列全为0的矩阵2zeros(m,n)可以创建一个m行n列全为0的矩阵。第二组函数rand、randi和randn。这三个函数分别用来创建均匀分布的随机数、均匀分布的随机整数和标准正态分布的随机数以后会大量用到请大家熟记。数据的分布是概率论里面的知识点没学过的同学可以搜索关键词自学iintnnormalrand函数用来创建区间0和1内均匀分布的随机数其最常用的方法有两种1)rand(n可以创建一个n行n列的随机数矩阵2rand(mn)可以创建一个m行n列的随机数矩阵。由rand函数创建的随机数矩阵的每个元素都随机取样自0和1之间的均匀分布。randi函数用来创建均匀分布的随机整数其最一般的用法为randi([iminimax]m,n)该命令可创建一个m行n列的随机数矩阵随机数矩阵中的每个元素都是从区间[iminimax]内随机抽取的整数。举个例子假设我们要模拟投掷100次骰子骰子有6个面那么我们可以使用randi([16]1,100)得到一个长度为100的行向量向量中的每个元素都是取自123456。如果m和n相同即生成一个n行n列的方阵那么可以直接写成randi([imin,imax],n)。randn函数用来创建标准正态分布的随机数其使用方法和rand函数类似(1randn(n)可以创建一个n行n列的随机数矩阵(2randn(m,n)可以创建一个m行n列的随机数矩阵。由randn函数创建的随机数矩阵的每个元素都随机取样自标准正态分布。标准正态分布以0为平均数、以1为标准差的正态分布记为N01。第三组函数diag 和 blkdiag。diag函数可用来创建对角矩阵或者获取矩阵的对角元素情况1如果输入的第一个参数是向量则表示创建对角矩阵。diag(v,k)将向量v的元素放置在第k条对角线上其他位置元素为0。k0表示主对角线k0位于主对角线上方k0位于主对角线下方。如果k0可以直接写成diag(v)。diag是英文单词Diagonal对角线的缩写blkblock 分块情况2如果输入的第一个参数是矩阵则表示获取矩阵的对角元素。diag(Ak)返回A的第k条对角线上元素的构成的列向量。blkdiag函数可用来创建分块对角矩阵。分块对角矩阵是相对于常规的对角矩阵而言的常规的对角矩阵沿对角线具有单个元素而分块对角矩阵的对角线的元素是矩阵。我们可采用以下形式表示一个分块对角矩阵3导入本地文件中的数据MATLAB可读取本地的文件支持的常见格式如下.txt、.dat或.csv适用于带分隔符的文本文件.xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx或.ods适用于电子表格文件)由于这一块的内容比较丰富且可能涉及我们没学过的知识点所以会放在后面的章节进行讲解。到时候我们会重点学习MATLAB菜单栏“主页——导入数据”这个功能。4矩阵元素的引用上方给出了一个m行n列的矩阵对于第i行第j列的元素我们用aj表示。因此我们可以使用矩阵元素所处的行(row)和列(column)来进行引用矩阵的某一个元素方式为:a(row_ind,column_ind).这里的row_ind表示要引用的元素的行索引column_ind表示列索引。如果row_ind和column_ind都是一个常数则表示提取矩阵中的单个元素如果row_ind或column_ind是包含有多个元素的向量则表示同时提取多个位置的元素。与向量类似end也可以用来替代最后一个索引通常和冒号法一起使用。前面我们学过可以使用length函数和numel函数来计算向量中包含的元素个数。那么怎样计算一个矩阵的大小呢我们可以使用size函数它有两种常见的用法(1size(A)返回一个行向量其元素是A的各维度的长度。若A是一个3X4的矩阵则 size(A)返回向量[3 4]如果让[r,c]size(A)那么r3,c4。(2)size(A,dim)返回在维度dim上的长度。dim1时表示行dim2时表示列。若A是一个3X4的矩阵则size(A,1)返回3size(A,2)返回4。(length函数和numel函数也可以用在矩阵上。length函数会返回行和列的较大值对上面的A矩阵length(A)返回4numel函数会返回矩阵中元素的总数numel(A)返回12)有时候我们需要取出矩阵的某一行或者某一列。以取出矩阵A的第一行为例我们可以使用代码A(11:end)row_ind取1表示第一行column_ind取1:end表示从1到最后一列的索引。这时候我们可以直接将其简写为A1逗号后面是列索引的位置加一个冒号就表示取出每一列的元素。同理要取第一列的所有元素我们可以使用代码A1).