750 likes | 898 Views
第 4 章 数值计算 (1). 主要内容:. ① 数据分析; ②矩阵分析; ③多项式运算; ④数值插值和拟合; ⑤数值积分和微分 。. 4.1 概述. 数值计算的特点: 1 )数值计算是定义在数值数组的基础上,在计算之前必须定义变量并赋值。 2 )数值计算有误差。 3 )数值计算的计算速度较快。 4 )数值计算除定义了算术运算、关系运算和逻辑运算三种,还提供了许多运算函数。. 4.2 数据分析. 4.2.1 统计分析 1 最大值和最小值 1 )求向量的最大和最小值.
E N D
主要内容: ①数据分析; ②矩阵分析; ③多项式运算; ④数值插值和拟合; ⑤数值积分和微分 。 MATLAB 7.X程序设计
4.1 概述 数值计算的特点: 1)数值计算是定义在数值数组的基础上,在计算之前必须定义变量并赋值。 2)数值计算有误差。 3)数值计算的计算速度较快。 4)数值计算除定义了算术运算、关系运算和逻辑运算三种,还提供了许多运算函数。 MATLAB 7.X程序设计
4.2 数据分析 4.2.1统计分析 1 最大值和最小值 1)求向量的最大和最小值 • y=max(X)返回向量X的最大值存入y,如果X中包含复数元素,则按模取最大值。 • [y,I]=max(X)返回向量X的最大值存入y,最大值的序号存入I,如果X中包含复数元素,则按模取最大值。 • 求向量X的最小值的函数是min(X),用法和max(X)完全相同。 MATLAB 7.X程序设计
例4-1已知x=[-43,72,9,16,23,47], 求向量x的最大值和最小值。 y=max(x)%求向量x中的最大值 [y,l]=max(x)%求向量x中的最大值及其该元素的位置 z=min(x)%求向量x中的最小值 [z,m]=min(x)%求向量x中的最小值及其该元素的位置 MATLAB 7.X程序设计
2)求矩阵A的最大值和最小值 • max(A) 返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。 [Y,U]=max(A) 返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大值的行号。 • max(A,[],dim) dim取1或2。dim取1时,该函数和max(A)完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。 • 求矩阵最小值的函数是min,其用法和max完全相同。 MATLAB 7.X程序设计
例4-2 分别求三阶魔方矩阵中各列和各行元素 中的最大值,并求整个矩阵的最大值和 最小值。 MATLAB 7.X程序设计
3)同型的向量或矩阵比较 • U=max(A,B) A,B是两个同型的向量或矩阵,结果U是与A,B同型的向量或矩阵,U的每个元素等于A,B对应元素的较大者。 • U=max(A,n) • n是一个标量,结果U是与A同型的向量或矩阵,U的每个元素等于A对应元素和n中的较大者。 • min函数的用法和max完全相同。 MATLAB 7.X程序设计
例 4-3分析下列程序的功能。 x=[4 5 6;1 4 8]; y=[1 7 5;4 5 7]; p=max(x,y) ; P 分析:取两个2×3的二维数组x和y同一位置上的元素值大者构成一个新矩阵p。 MATLAB 7.X程序设计
2 平均值和中值 求数据序列平均值的函数是mean,求数据序列中值的函数是median。 • mean(X) • 返回向量X的算术平均值。 • median(X) • 返回向量X的中值。 • mean(A) • 返回一个行向量,其第i个元素是A的第i列的算术平均值。 MATLAB 7.X程序设计
median(A) 返回一个行向量,其第i个元素是A的第i列的中值。 • mean(A,dim) • 当dim为1时,该函数等同于mean(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的算术平均值。 • median(A,dim) • 当dim为1时,该函数等同于median(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的中值。 MATLAB 7.X程序设计
例4-4已知x=[1 8 4 2;9 6 2 5;3 6 7 1],从 不同维方向求出其平均值和中值。 • median(x) median(x,1)%按列方向,求数组的中值 • median(x,2)%按行方向,求数组的中值 • mean(x) • mean(x,1)%按列方向,求数组的平均值 • mean(x,2)%按行方向,求数组的平均值 MATLAB 7.X程序设计
3 求和与求积 • sum(X) 返回向量X各元素的和。 • prod(X) • 返回向量X各元素的乘积。 设A是一个矩阵,函数的调用格式为: • sum(A) • 返回一个行向量,其第i个元素是A的第i列的元素和。 • prod(A) • 返回一个行向量,其第i个元素是A的第i列的元素乘积。 MATLAB 7.X程序设计
sum(A,dim) 当dim为1时,该函数等同于sum(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素之和。 • prod(A,dim) • 当dim为1时,该函数等同于prod(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素乘积。 MATLAB 7.X程序设计
例4-5已知x=[4 5 6;1 4 8],分析矩阵x的每行、每列元素的乘积和全部元 素的乘积。 sum(x) sum(x,1) %求数组各列元素的和 sum(x,2) %求数组各行元素的和 sum(sum(x)) %求数组所有元素的和 MATLAB 7.X程序设计
prod(x) prod(x,1) %求数组各列元素的乘积 prod(x,2) %求数组各行元素的乘积 prod(prod(x)) %求数组所有元素的乘积 MATLAB 7.X程序设计
4 累加和与累乘积 • cumsum(X) 返回向量X累加和向量。 • cumprod(X) 返回向量X累乘积向量。 • cumsum(A) 返回一个矩阵,其第i列是A的第i列的累加和向量。 MATLAB 7.X程序设计
cumsum(A,dim) • 当dim为1时,该函数等同于cumsum(A);当dim为2时,返回一个矩阵,其第i行是A的第i行的累加和向量。 • cumprod(A) 返回一个矩阵,其第i列是A的第i列的累乘积向量。 • cumprod(A,dim) • 当dim为1时,该函数等同于cumprod(A);当dim为2时,返回一个向量,其第i行是A的第i行的累乘积向量。 MATLAB 7.X程序设计
例4-6已知a = [1 2 3; 3 9 6; 4 10 8; 4 0 7],求矩阵a的每行、每列元 素的乘积和全部元素的累加和。 cumsum(a) %求矩阵的各列元素的累加和 cumsum(a,2) %求矩阵的各行元素的累加和 cumprod(a) cumprod(a,1) %求矩阵的各列元素的累乘积 cumprod(a,2) %求矩阵的各行元素的累乘积 MATLAB 7.X程序设计
5 标准方差 • 对于向量x,std(x,flag)返回一个标准方差。flag取0或1。 • 对于矩阵A,std(A)返回一个行向量,它的各个元素便是矩阵A各列或各行的标准方差。 Y=std(A,flag,dim) 其中dim取1或2。当dim=1时,求各列元素的标准方差;当dim=2时,则求各行元素的标准方差。flag取0或1。缺省flag=0,dim=1。 MATLAB 7.X程序设计
例 4-7 已知a = [1 2 3; 3 9 6; 4 10 8;4 0 7],从不同维方向求出其标准方差。 std(a) std(a,0,1) %按列方向求矩阵a的标准方差 std(a,1,1) %按列方向求矩阵a的标准方差 std(a,0,2) %按行方向求矩阵a的标准方差 std(a,1,2) %按列方向求矩阵a的标准方差 MATLAB 7.X程序设计
6 排序 sort(X) 返回一个对向量X中的元素按升序排列的新向量。 [Y,I]=sort(A,dim,MODE) 对矩阵A的各列或各行重新排序, Y 是排序后的矩阵; I 记录Y中的元素在排序前A中位置; dim 指明对A的列还是行进行排序; MODE为排序的方式。 MATLAB 7.X程序设计
按升序排列行函数sortrows的调用格式: B = sortrows(A) 按升序排列A 的列,其中A为矩阵或行向量。 B = sortrows(A,column) 以指定的列向量排序矩阵 [B,index] = sortrows(A) 排序时返回向量的序号。 如果A 为列向量,B = A(index); 如果A 为m-by-n 矩阵,B = A(index,:)。 MATLAB 7.X程序设计
例4-8 已知a = [1 2 3; 3 9 6; 4 10 8; 4 0 7],对矩阵排序。 sort(a,1) sort(a,1,'ascend') %对矩阵a的各列进行升序排列 sort(a,2) sort(a,2,'ascend') %对矩阵a的各行进行升序排列 sort(a,1,'descend') %对矩阵a的各列进行降序排列 sort(a,2,'descend') %对矩阵a的各行进行降序排列 MATLAB 7.X程序设计
例4-9分析下列语句的功能。 a=['one ','two ','three ','four ','five']; sortrows(a) MATLAB 7.X程序设计
4.2.2 协方差和相关系数 • cov(x) 求向量x的协方差。 • cov(A) 求协方差矩阵,对角线元素是A中各列的方差。 • corrcoef(X) 返回从矩阵X形成的一个相关系数矩阵。 MATLAB 7.X程序设计
例4-10计算x的协方差、y的协方差、 x与y的互协方差。 x=[1 2 3 4 5]; y=[2 4 6 8 10]; cx=cov(x) cy=cov(y) cxy=cov(x,y) MATLAB 7.X程序设计
4.2.3 傅立叶变换 函数名 含义 fft 离散傅立叶变换 fft2二维离散傅立叶变换 fftn n维离散傅立叶变换 fftshift 将零延迟移到频谱中心 Ifft离散傅立叶反变换 ifft2 二维离散傅立叶反变换 ifftnn维离散傅立叶反变换 ifftshift 逆fftshift MATLAB 7.X程序设计
例4-11求行向量(0,0.1 ,0.2 …,3.14) 的离散傅立叶变换,并通过傅立叶 反变换验证结果是正确的。 MATLAB 7.X程序设计
4.3 矩阵操作 4.3.1 矩阵的结构变换 1 转置 转置运算的操作符: ‘ 求A的转置,运算表达式为 A‘ 其中A可以是行向量、列向量和矩阵。 MATLAB 7.X程序设计
例4-12分析下列语句的执行结果。 a=[1 2 3]; b=a′%行向量的转置 a=[1; 2; 3]; b=a′%列向量的转置 a=[1 2; 2 3; 3 4]; b=a′%矩阵的转置 a=[1+2*i 3-4*i]; b=a′%复数矩阵的转置 MATLAB 7.X程序设计
2 对角阵 • X = diag(v,k) 当v 是n个元素的向量时,返回有第k个对角线的n+abs(k)顺序的方阵,k = 0(可省略)代表主对角线,k > 0代表上方的次对角线, k < 0代表下方的次对角线。 • v = diag(X,k) • 返回第k 条对角线构成的列向量,k = 0(可省略) 时,返回主对角线。 MATLAB 7.X程序设计
diag也允许嵌套使用,格式为: diag(diag(A)) 内部的diag取A的对角元素,外diag利用取出的列向量构成对角阵。 例4-13编程求出n阶魔方矩阵的各对角线。 MATLAB 7.X程序设计
3 对称变换 上下对称交换函数:flipud 左右对称变换函数:fliplr • B = flipud(A) 返回上下方向翻转的矩阵。如果是列向量,返回相反顺序的向量;如果是行向量,返回原向量。 • B = fliplr(A) 返回水平方向翻转的矩阵。如果是行向量,返回相反顺序的向量;如果是列向量,返回原向量。 MATLAB 7.X程序设计
以指定的维翻转矩阵的函数flipdim,格式为: B = flipdim(A,dim) 返回以指定的维翻转矩阵。dim =1,以行方向翻转;dim =2,以列方向翻转。 flipdim(A,1)等价 flipud(A), flipdim(A,2) 等价 fliplr(A)。 MATLAB 7.X程序设计
例4-14 分析下列语句的功能。a=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16]; flipud(a) %flipdim(A,1)%上下方向翻转矩阵 fliplr(a) %flipdim(A,2)% 水平方向翻转矩阵 a=[1; 2; 6; 7; 8]; flipud(a)%列向量的上下方向翻转 a=[1 2 6 7 8]; flipud(a)%行向量的上下方向翻转 MATLAB 7.X程序设计
4 旋转 • B = rot90(A) 返回A的逆时针旋转90度的矩阵 • B = rot90(A,k) 返回A的逆时针旋转k×90度的矩阵,其中k为正整数。 • 例4-15已知a=[1 2; 6 7; 8 0],分析下列语句 • 的功能。 • rot90(a) • rot90(a,2) • rot90(a,3) MATLAB 7.X程序设计
5 重组 B = reshape(A,m,n) 返回矩阵A的元素重组的m×n 的矩阵B。如果A没有m×n 个元素,结果错误。 例 4-16建立有12个元素的行向量,并分别重组 为3×4和2×6的矩阵。 MATLAB 7.X程序设计
6 下三角和上三角矩阵 • tril (X) 提取X的下三角矩阵 • tril (X,K) 提取X的主对角线上和第K条对角线上、下的元素。其中K =0是主对角线,K >0是主对角线的上面,K< 0是主对角线的下面。 MATLAB 7.X程序设计
triu (X) 提取X的上三角矩阵. • triu (X,K) 提取X的主对角线上和第K条对角线上的元素。其中K =0是主对角线,K >0是主对角线的上面,K< 0是主对角线的下面。 MATLAB 7.X程序设计
例4-17求出3阶魔方矩阵的各下三角阵和各上三角阵。例4-17求出3阶魔方矩阵的各下三角阵和各上三角阵。 MATLAB 7.X程序设计
例 4-18分析下列程序的功能。 a=-4:4 A=reshape(a,3,3) %把一维数组a重组为二维数组 a1=diag(A,1) %取A阵第一对角线的元素 A1=diag(a1,-1) %产生以a1数组元素为第一下对角线元素的二维数组 flipudA=flipud(A)%上下方向翻转矩阵A fliplrA=fliplr(A)%水平方向翻转矩阵A rot90A=rot90(A)%逆时针旋转90度矩阵A MATLAB 7.X程序设计
例4-19将三个2×2的矩阵x,y和z组合 成两个新矩阵: (1)组合成一个43的矩阵,其中第一列为按列顺序排列的x矩阵元素,第二列为按列顺序排列的y矩阵元素,第三列为按列顺序排列的z矩阵元素。 (2)按照x,y和z的列顺序组合成一个行向量。 MATLAB 7.X程序设计
4.3.2矩阵分析 1 逆矩阵 inv(A) 求方阵A的逆矩阵 求伪逆的函数为:pinv(A) 例4-20求矩阵的逆。 a=[-1 2 0;-2 3 0;3 0 2]; inv(a) MATLAB 7.X程序设计
例4-21解方程组 MATLAB 7.X程序设计
A=[2 2 -1 1;4 3 -1 2;8 3 -3 4;3 3 -2 -2]; b=[4 6 12 6]'; x=inv(A)*b 执行结果为: x = 0.6429 0.5000 -1.5000 0.2143 由执行结果可知方程组的解为: 0.6429 0.5000 -1.5000 0.2143 。 MATLAB 7.X程序设计
例4-22求矩阵X,使满足:AXB = C。 A=[1 2 3;2 2 1;3 4 3]; B=[2,1;5 3]; C=[1 3;2 0;3 1]; X=A\C/B MATLAB 7.X程序设计
例4-23求方程组的最小范数解。 MATLAB 7.X程序设计
2 秩 rank(A) 求A的秩 例4-24求矩阵的秩: (1)a=[4 2 -6;7 5 4 ;3 4 9];R=rank(a) (2)a=[5 4 -2 ;4 5 2;-2 2 8] ; R=rank(a) MATLAB 7.X程序设计
3 行列式 det(A) 求方阵A对应的行列式的值 例4-25求任意阶魔方矩阵的行列式。 n=input('please input the order of magic matrix'); a=magic(n); det(a) MATLAB 7.X程序设计