第一章 Matlab介绍 一、概述 MATLAB是一套功能十分强大的工程计算机及数据分析软件,它的应用范围覆盖了当今所有的工业、电力、电子、医疗、建筑等各领域。 2018年11月24日星期六
1980年前后,MATLAB的首创者Cleve Moler博士在New Mexico大学讲授线性代数课程时,看到了用高级语言编程解决工程计算问题的诸多不便,因而构思开发了MATLAB软件(MATrix LABoratory,矩阵实验室),该软件利用了Moler博士在此前开发的LINPACK(线性代数软件包)和EOSPACK(基于特征值计算的软件包)中可靠的子程序,用Fortran语言编写而成,集命令翻译、工程计算功能于一身。 2018年11月24日星期六
80年代初期,Cleve Moler和John Little采用C语言改写了MATLAB的内核。不久,他们成立了Mathworks软件开发公司并将MATLAB正式推向市场。 2018年11月24日星期六
现在的MATLAB新版本早已不只停留在工程计算的功能上了,它由主包、Simulink以及功能各异的工具箱组成,以矩阵运算为基础,把计算、可视化、程序设计融合到了一个简单易用的交互式工作环境中。在这里可以实现工程计算、算法研究、符号运算、建模和仿真、原型开发、数据分析及可视化、科学和工程绘图、应用程序设计(包括图形用户界面设计)等等功能。 2018年11月24日星期六
正式凭借MATLAB的这些突出的优势,它现在已成为世界上应用最广泛的工程计算软件。在美国等发达国家的大学里MATLAB是一种必须掌握的基本工具,而在国外的研究设计单位和工业部门,更是研究和解决工程计算问题的一种标准软件。在国内也有越来越多的科学技术工作者参加到学习和倡导这门语言的行列中来。在大家的共同努力下,MATLAB正在成为计算机应用软件中的一个热点。 2018年11月24日星期六
二、Matlab 的主要功能 值运算是Matlab最基本、最重要的功能, Matlab能够成为世界上最优秀的数学软件之一,和它出色的数值运算能力是分不开的。 Matlab以矩阵运算为基础,把计算、可视化、程序设计融合到一个简单易用的交互式工作环境中,可实现工程计算、算法研究、符号运算、建模和仿真、原型开发、数据分析及可视化、科学和工程绘图、应用程序设计等功能. 2018年11月24日星期六
第二章 Matlab的基本操作 一、基本知识 1.进入和退出 Matlab 安装好 Matlab后,从 Matlab的程序组中执行 Matlab即可进入Matlab命令窗口,或者双击Matlab图标,也可进入。单击File菜单中Exit,或使用Matlab的Exit命令退出。 2018年11月24日星期六
2.基本算术运算符 加号:+ 减号:- 乘号: * 除号:/ 指数:^ 可用括号规定运算的优先级 2018年11月24日星期六
(1)Matlab将矩阵加、减、乘的程序编为内部函数,只要用+,-,*做运算符号就包含阶数检查和执行运算的全过程。 3.基本运算 (1)Matlab将矩阵加、减、乘的程序编为内部函数,只要用+,-,*做运算符号就包含阶数检查和执行运算的全过程。 两相加矩阵有一个是标量时,Matlab承认算式有效,自动把标量扩展为同阶等元素矩阵。 如:键入 X=[-1 0 1]; Y=X-1 得 Y= -2 -1 0 (2)矩阵除法 矩阵求逆 inv(A),如果det(A)等于或很接近零,Matlab会提示出错。 “左除”与“右除”,左乘或右乘矩阵的逆,A\或/A (3)幂运算 ^ A*A*A=A^5 2018年11月24日星期六
二、基本操作 1.数、数组、矩阵的输入 (1)数的输入 a=5 b=2-5i 注意:在行尾加“;”,该行结果不显示;标点符号一定要在英文状态下输入! (2)数组的输入 b=[1,3,5,7,9,11] c=1:2:11 d=linspace(1,11 ,6) 问题: 若b为在0~2π(π用pi表示)之间均匀分布的22个数据,c=(1.3,2.5,7.6,2,-3),d=(23,20,17,14,11,8,5,2),各用何种方法输入较简单? 2018年11月24日星期六
问题:输入A(2,3),结果如何?输入A(7)又如何? 注意:变量名开头必须是英文字母,变量名对字母大小写是区分的. (3)矩阵的输入 A=[2,3,5;1,3,5;6,9,4] %行之间要用分号隔开 A= 2 3 5 1 3 5 6 9 4 m=input('请输入初始量,m='); 请输入初始量,m= 问题:输入A(2,3),结果如何?输入A(7)又如何? 注意:变量名开头必须是英文字母,变量名对字母大小写是区分的. 2018年11月24日星期六
A(2:3,1:2) %取出A的2,3行与1,2列交叉的元素 A([1,3],:) = A([3,1],:) %将A的1行和3行互换 2.矩阵的块操作 A(2,:) %取出A的第2行的所有元素 A([1,3],:) %取出A的第1,3行的所有元素 A(2:3,1:2) %取出A的2,3行与1,2列交叉的元素 A([1,3],:) = A([3,1],:) %将A的1行和3行互换 问题:如何将A的2,3列互换? A(2,:) = 4 %将A的第2行的所有元素用4取代 A(find(A==3))=-3 %将A中等于3所有元素换为-3 A(2,:) = [] %删除A的第2行 reshape(A,2,3) %返回以A的元素重新构造的2×6维矩阵 [A(1:3,2:3),A(2:4,1:2);A,A(:,2)] %由小矩阵构造大矩阵。 2018年11月24日星期六
flip(抛、弹、翻转),rotation(旋转) flipud(A) %A进行上下翻转 fliplr(A) %A进行左右翻转 3.矩阵的翻转操作 flip(抛、弹、翻转),rotation(旋转) flipud(A) %A进行上下翻转 fliplr(A) %A进行左右翻转 rot90(A) %A逆时针旋转90° 2018年11月24日星期六
A = zeros(n,m) %产生n×m维0矩阵 A = rand(n,m) %产生n×m维随机矩阵(元素在 0~1之间) 4. 特殊矩阵的产生 random(随意, 任意),randn(Normally distributed random numbers.)randperm(Random permutation.(排列)) A = eye(n) %产生n维单位矩阵 A = ones(n,m) %产生n×m维1矩阵 A = zeros(n,m) %产生n×m维0矩阵 A = rand(n,m) %产生n×m维随机矩阵(元素在 0~1之间) randn(m,n) %产生m×n正态分布随机矩阵 randperm(n) %产生1~n之间整数的随机排列 2018年11月24日星期六
生成一个在区间[10,20]内均匀分布的4阶随机矩阵. 例 randperm(6) ans = 3 2 1 5 4 6 问题: 生成一个在区间[10,20]内均匀分布的4阶随机矩阵. 2018年11月24日星期六
sqrt(square root),exp(exponent),log(logarithm) 4+2 4*2 4/2 %4右除2,等于2 5.数的运算 sqrt(square root),exp(exponent),log(logarithm) 4+2 4*2 4/2 %4右除2,等于2 4\2 %4左除2,等于0.5 4^3 %4的3次方 sqrt(4) %4的算术平方根 ,和4^0.5比较 exp(3) %e的3次方,不能输成e^3 log(4) %4的自然对数,log10(4)是以10为 底,log2(4)是以2为底 2018年11月24日星期六
[X,D] = eig(A) %A的特征向量X及特征值D 3*A %常数与矩阵相乘 A+B %A,B必须是同维矩阵,和3+A进行比较 6.矩阵的运算 det(determinant,行列式,决定性的,有决定作用的),rank(秩,等级),inv(inverse,倒转的, 反转的),eig(eigenvalues,eigenvectors,本征的,固有的) A’ %A的转置 det(A) %A的行列式,A必须是方阵 rank(A) %A的秩 inv(A) %A的逆 eig(A) %A的特征值 [X,D] = eig(A) %A的特征向量X及特征值D 3*A %常数与矩阵相乘 A+B %A,B必须是同维矩阵,和3+A进行比较 A–B %A,B必须是同维矩阵,和3-A进行比较 2018年11月24日星期六
A^2 %A^2相当于A*A(和A.^2进行比较) A*B %和A.*B进行比较 A/B %(和A./B进行比较) A\B %(和A.\B进行比较) A^2 %A^2相当于A*A(和A.^2进行比较) 注意:“.* ” , “. / ”, “ .\ ” ,“ . ^ ” 称为点运算(或称数组运算,又称元素群运算),点运算是前后矩阵对应元素之间的运算. 2018年11月24日星期六
help sqrt %将显示出平方根sqrt 命令的功能和使用方式 7.联机求助 例: help sqrt %将显示出平方根sqrt 命令的功能和使用方式 2018年11月24日星期六
8. 数据格式命令说明 format short 1.4142 短格式,显示5位 format long 1.41421356237310 长格式,显示15位 format short e 1.4142e+000 最优化短格式,5位加指数 format long e 1.41421356237310 e+000 最优化长格式,15位加指数 format hex 3ff6a09e667f3bed 十六进制,货币银行格式,小数点后2位 format bank 1.41 货币银行格式,小数点后2位 format rat 1395/985 有理格式 format + + 紧密格式,显示数据+,-, 2018年11月24日星期六
三、函数 1. 基本的数学函数 函数名 含 义 sin/cos 正弦/余弦函数 tan/cot 正切/余切函数 sec/csc 含 义 sin/cos 正弦/余弦函数 tan/cot 正切/余切函数 sec/csc 正割/余割函数 sinh/cosh 双曲正弦/双曲余弦函数 tanh/coth 双曲正切/双曲余切函数 2018年11月24日星期六
函数名 含 义 asin/acos 反正弦/反余弦函数 atan/acot 反正切/反余切函数 asec/acsc 反正割/反余割函数 含 义 asin/acos 反正弦/反余弦函数 atan/acot 反正切/反余切函数 asec/acsc 反正割/反余割函数 asinh/acosh 反双曲正弦/反双曲余弦函数 atanh/acoth 反双曲正切/反双曲余切函数 2018年11月24日星期六
函数名 含 义 sech/csch 双曲正割/双曲余割函数 exp 指数函数 log 对数函数 abs 绝对值函数 imag 复数虚部函数 含 义 sech/csch 双曲正割/双曲余割函数 exp 指数函数 log 对数函数 abs 绝对值函数 imag 复数虚部函数 conj 共轭复数函数 fix 朝零方向取整 round 四舍五入取整 rem 求余函数 gcd 最大公约数 perms 排列 2018年11月24日星期六
函数名 含 义 asech/acsch 反双曲正割/反双曲余割函数 sqrt 平方根函数 log10 常用对数函数 angle 角相位函数 含 义 asech/acsch 反双曲正割/反双曲余割函数 sqrt 平方根函数 log10 常用对数函数 angle 角相位函数 real 复数实部函数 sign 正负符号函数 ceil 朝正无穷方向取整 floor 朝负无穷方向取整 mod 求余函数(带符号) lcm 最小公倍数 nchoosek 组合 2018年11月24日星期六
2.特殊变量与函数 函数名 含 义 ans 默认返回变量 nargin 函数输入变量个数 varargin 函数中输入的可选参数 i 含 义 ans 默认返回变量 nargin 函数输入变量个数 varargin 函数中输入的可选参数 i 虚数单位 inf 无穷值 flops 浮点运算次数 2018年11月24日星期六
函数名 含 义 eps 默认相对浮点精度 nargout 函数输出变量个数 varargout 函数中输出的可选参数 pi 圆周率 nan 含 义 eps 默认相对浮点精度 nargout 函数输出变量个数 varargout 函数中输出的可选参数 pi 圆周率 nan 不定值 inputname 输入参数名 2018年11月24日星期六
3.矩阵变换和矩阵函数 函数名 含 义 flipud 矩阵上下翻转 rot90 矩阵旋转90° tril 产生或提取下三角阵 eye 含 义 flipud 矩阵上下翻转 rot90 矩阵旋转90° tril 产生或提取下三角阵 eye 产生单位矩阵 ones 产生1矩阵 linespace 构造线性分布向量 det 行列式的值 trice 矩阵的迹 rref 化行最简形 2018年11月24日星期六
函数名 含 义 fliplr 矩阵左右翻转 diag 产生或提取对角阵 triu 产生或提取上三角阵 rand 产生随机矩阵 zeros 含 义 fliplr 矩阵左右翻转 diag 产生或提取对角阵 triu 产生或提取上三角阵 rand 产生随机矩阵 zeros 产生零矩阵 logspace 构造对数分布向量 eig 矩阵的特征值 inv 矩阵的逆 null 零空间 2018年11月24日星期六
四、多项式和线性方程组的求解 1、多项式的表达方式 (1)用降幂排列的多项式的系数向量表示 (1)用降幂排列的多项式的系数向量表示 例4.1 对多项式p=x4+2x3-5x+6和s=x2+2x+3,用多项式的系数表示为 p=[1,2,0,-5,6]; s=[1,2,3]; 2018年11月24日星期六
poly2sym(p) %将多项式的向量表示转变为符号形式 ans = x^3-13*x^2+44*x-32 (2)由根创建多项式 r=[1,4,8]; %已知多项式的根为(1,4,8) p=poly(r) p = 1 -13 44 -32 poly2sym(p) %将多项式的向量表示转变为符号形式 ans = x^3-13*x^2+44*x-32 2018年11月24日星期六
2. 多项式的加减乘除 例4.2 求例4.1中多项式p,s的和、差、积、商. conv(Convolution,卷积),deconv(deconvolution,去卷积,反褶积) p=[1,2,0,-5,6]; s=[0,0,1,2,3]; %多项式加法,向量p,s必须同维,s扩维成s=[0,0,1,2,3] p+s p-s %多项式减法,向量p,s必须同维 2018年11月24日星期六
conv(p,s) %求多项式p和s的乘积,也是向量p,s的卷积 ans = 0 0 1 4 7 1 -4 -3 18 0 0 1 4 7 1 -4 -3 18 p=[1,2,0,-5,6];s=[1,2,3]; =deconv(p,s) %求多项式p除以s的商q和余项r,也是向量解卷积运算 q = 1 0 -3 r = 0 0 0 1 15 即两多项式相除商为x2-3,余项为x+15. 2018年11月24日星期六
3. 求多项式的根 compan( companion,同伴, 共事者) 格式:r=roots(p) %求多项式p的根,即p(x)=0方程的解. pc=compan(p) %求多项式p的伴随矩阵. r=eig(pc) %多项式p的伴随矩阵的特征值等于多项式p的根. 2018年11月24日星期六
例4.3 求多项式p=x2+2x+6的根. 解一: p=[1,2,6]; r=roots(p)结果为: r = -1.0000 + 2.2361i -1.0000 - 2.2361i 解二: pc=compan(p); r1=eig(pc) r1 = 即多项式p=x2+2x+6的根为一对共轭虚数. 2018年11月24日星期六
4、非齐次线性方程组求解 例4.4 求线性方程组AX=b的解,其中,A=[2,3,5;3,6,8;6,5,4],b=[12;34;43]. 解一:用矩阵左除法求解. A=[2,3,5;3,6,8;6,5,4]; b=[12;34;43];R=rank(A) X=A\b 结果为: R = 3 X = 0.2759 12.3793 -5.1379 注意:b是列向量,求解前先检验A是否是满秩方阵. 2018年11月24日星期六
则D的最后一列元素就是所求的解,同解一结果相同. 解二:用函数rref求解. C=[A,b] D=rref(C) 结果为: C = 2 3 5 12 3 6 8 34 6 5 4 43 D = 1.0000 0 0 0.2759 0 1.0000 0 12.3793 0 0 1.0000 -5.1379 则D的最后一列元素就是所求的解,同解一结果相同. 2018年11月24日星期六
五、集合和向量的基本运算 1. 两个集合的交集 格式: c = intersect(a,b) %返回a,b的公共部分,即c = a∩b. 格式: c = intersect(a,b) %返回a,b的公共部分,即c = a∩b. [c,ia,ib] = intersect(a,b) %c为a,b的公共元素,ia表示公共元素在a中的位置,ib表示公共元素在b中位置. 2018年11月24日星期六
[c,ia,ib] = intersect(A,B) c = 1 6 20 ia = 1 3 4 ib = 1 5 7 例5.1 A = [1,9,6,20]; B = [1,2,3,4,6,10,20]; [c,ia,ib] = intersect(A,B) c = 1 6 20 ia = 1 3 4 ib = 1 5 7 2018年11月24日星期六
2. 两个集合的差集 例5.2 A = [1,7,9,6,20]; B = [1,2,3,4,6,10,20]; c=setdiff(A,B) c = 7 9 2018年11月24日星期六
3. 两个集合的并集 格式: c = union(a,b) %返回a,b的并集,即c = a∪b. c = union(A,B,'rows') %返回矩阵A,B不同行向量构成的大矩阵,其中相同行向量只取其一. [c,ia,ib] = union(…) %ia,ib分别表示c中行向量在原矩阵(向量)中的位置. 例5.3 A=[1,2,3,4];B=[2,4,5,8];c=union(A,B) 则结果为: c = 1 2 3 4 5 8 2018年11月24日星期六
4. 向量的点积 格式: C = dot(A,B) %若A,B为向量,A与B长度必须相同,则返回向量A与B的点积;若A,B为矩阵,则A与B必须有相同的维数. C = dot(A,B,dim) %在dim维数中给出A与B的点积. 例5.4 A=[1,2,3];B=[3,4,5]; dot(A,B); %计算向量A,B的标积,结果为26 还可用另一种算法:sum(A.*B). 2018年11月24日星期六
5. 向量的叉积 例5.5 A=[1,2,3,]; B=[3,4,5,]; cross(A,B);%计算A,B的叉积, 结果为:-2 4 -2. 2018年11月24日星期六
6. 向量的长度 由定义,向量A的长度为, 所以命令: sqrt(dot(A,A)) %或 sqrt(sum(A.*A))可求出 2018年11月24日星期六
7. 向量的方向角 L = sqrt(dot(A,A)); %计算向量A的长度 alpha = acos(A(1)/L); %计算向量A与x轴的夹角 beta = acos(A(2)/L); %计算向量A与y轴的夹角 gamma = acos(A(3)/L); %计算向量A与z轴的夹角 2018年11月24日星期六
L1= sqrt(dot(A,A)); %计算向量A的长度 >>L2= sqrt(dot(B,B)); %计算向量B的长度 8. 向量的夹角 L1= sqrt(dot(A,A)); %计算向量A的长度 >>L2= sqrt(dot(B,B)); %计算向量B的长度 >>c=dot(A,B)/L1/L2; %计算向量A,B的点积 >>alpha=acos(c) %计算向量A,B间夹角 2018年11月24日星期六
六、向量组的线性相关性及方程组的通解 相关命令 [R, s]=rref(A), 把矩阵A的最简梯矩阵赋值给R;s是一个行向量,它的元素由R的首非零元所在列号构成 null(A, ‘r’), 齐次线性方程组Ax=0的基础解系 x0=A\b, 非齐次线性方程组Ax=b的一个特解x0 length(s), 计算s向量的维数 end, 矩阵的最大下标,最后一行或最后一列 find(s), 向量s中非零元素的下标 sub(A, k, n), 将A中所有符号变量k用数值n代替 2018年11月24日星期六
当k取何值时方程组有非零解?在有非零解的情况下,求出其基础解系。 已知齐次线性方程组: 当k取何值时方程组有非零解?在有非零解的情况下,求出其基础解系。 2018年11月24日星期六
clear syms k % 定义符号变量k A=[1-2 clear syms k % 定义符号变量k A=[1-2*k,3,3,3;3,2-k,3,3;3,3,2-k,3;3,3,3,11-k]; % 给系数矩阵赋值 D=det(A); % 算出系数矩阵的行列式D kk=solve(D); % 解方程“D=0”,得到解kk,即k值 for i=1:4 AA=subs(A,k,kk(i)); % 分别把k值代入系数矩阵A中 fprintf('当k='); disp(kk(i)); % 显示k的取值 fprintf('基础解系为:\n'); disp(null(AA)) % 计算齐次线性方程组“Ax=0”的基础解系 end 2018年11月24日星期六
七、特征向量与二次型 orth(A), 求出矩阵A的列向量组构成空间的一个正交规范基 P=poly(A), 计算A的特征多项式,P是行向量,元素为多项式系数 roots(P), 求多项式P的零点 r=eig(A), r为列向量,元素为A的特征值 [V, D]=eig(A), 矩阵D为A的特征值所构成的对角阵,V的列向量为A的特征向量,与D中特征值一一对应 [V, D]=schur(A), 矩阵D为对称阵A的特征值所构成的对角阵,V的列为A的单位特征向量,与D中特征值一一对应 2018年11月24日星期六
例:已知矩阵 ,求其特征值。 2018年11月24日星期六
B=A-k*eye(length(A)); % 构造矩阵B=(A-kI) D=det(B); % 计算行列式:|A-kI| % 1.符号变量法 syms k % 定义符号变量k B=A-k*eye(length(A)); % 构造矩阵B=(A-kI) D=det(B); % 计算行列式:|A-kI| lamda1=solve(D) % 求|A-kI|=0的符号形式的解 % 2.特征多项式法 P=poly(A); % 计算矩阵A的特征多项式, 向量P的元素为该多项式的系数 lamda2=roots(P) % 求该多项式的零点,即特征值 % 3.命令法 lamda3=eig(A) % 直接求出矩阵A的特征值 2018年11月24日星期六
八、实验 求:C=A+B ,C=C-2 2、A=[1 2 3;4 5 6];B=ones(3) 求: C=A*B 求:A\B,A/B 2018年11月24日星期六
4、A=[1 2 3;4 5 7;4 7 9]; 求:A^2 ,A^-2 ,det(A) 2018年11月24日星期六
An3=eye(5)/A % eye(5)为5阶单位矩阵 % 4.左除法:An4=A\eye(5) % 5.初等行变换法: clear A=[-7,-2,-6,4,6;1,3,-6,3,11;3,-11,9,5,-2;-3,0,-2,9,-3;7,30,-18,11,4]; % 1.命令法:An1=inv(A) % 2.幂运算法:An2=A^-1 % 3.右除法: An3=eye(5)/A % eye(5)为5阶单位矩阵 % 4.左除法:An4=A\eye(5) % 5.初等行变换法: B=rref([A,eye(5)]); % 对矩阵[A , I] 进行初等行变换 % B为矩阵A的最简行阶梯矩阵 if(rank(B(:,1:5))==5) % 判断最简行阶梯矩阵B的前5列是否为单位阵 An5=B(:,6:10) % 取出矩阵的后5列,并显示 else disp('A不可逆'); end 2018年11月24日星期六
D=det(A) % 计算含符号变量矩阵A的行列式D f=factor(D) % 对行列式D进行因式分解 6、解方程: 提示:% 求解符号行列式方程 clear % 清除各种变量 syms x % 定义x为符号变量 A=[3,2,1,1;3,2,2-x^2,1;5,1,3,2;7-x^2,1,3,2] D=det(A) % 计算含符号变量矩阵A的行列式D f=factor(D) % 对行列式D进行因式分解 % 从因式分解的结果,可以看出方程的解 X=solve(D) % 求方程“D=0”的解 2018年11月24日星期六
[V,D]=eig(A); % 其中矩阵V即为所求正交矩阵 % 矩阵D为矩阵A的特征值构成的对角阵 化为标准型 用正交变换法将二次型 clear A=[1,0,0;0,2,2;0,2,2]; % 输入二次型的矩阵A [V,D]=eig(A); % 其中矩阵V即为所求正交矩阵 % 矩阵D为矩阵A的特征值构成的对角阵 % 或:[V,D]=schur(A) % 结果和eig( ) 函数相同 disp('正交矩阵为:'); V disp('对角矩阵为:'); D disp('标准化的二次型为:'); syms y1 y2 y3 f=[y1,y2,y3]*D*[y1;y2;y3] 2018年11月24日星期六
结束 2018年11月24日星期六