Presentation is loading. Please wait.

Presentation is loading. Please wait.

University of Electronic Science and Technology, China

Similar presentations


Presentation on theme: "University of Electronic Science and Technology, China"— Presentation transcript:

1 University of Electronic Science and Technology, China
Matlab编程及应用 第二章 Matlab数值计算功能 2006 Shiming Yang University of Electronic Science and Technology, China

2 第二章 Matlab数值计算功能 MATLAB 语言的简洁高效性 MATLAB 语言的科学运算功能 MATLAB 语言的绘图功能
计算机语言,也是很多理工科专业最适合的计算机数 学语言,本章介绍MATLAB令人惊叹的数值计算功能. 2018/12/5 Matlab编程及应用

3 第二章 Matlab数值计算功能 2.1 Matlab的数据类型 2.2 向量及其运算 2.3 矩阵及其运算 2.4 多项式运算
2.5 结果保存与再用 2.6 Matlab矢量化 2018/12/5 Matlab编程及应用

4 2.1 Matlab的数据类型 Matlab数据类型主要包括 Matlab不要求事先声明要使用的变量 Matlab不需要指定变量类型 数字
字符串 矩阵 单元型数据 结构型数据 Matlab不要求事先声明要使用的变量 Matlab不需要指定变量类型 Matlab会自动根据所赋变量的值或对变量所进行的操作来确定变量的类型. 2018/12/5 Matlab编程及应用

5 2.1 Matlab的数据类型 MATLAB 语言的变量名规则 由一个字母开头,后面可以为字母,数字,下划线,但不能使用标点
区分大小写 Abc≠ABc 有效 MYvar12, MY_Var12 和 MyVar12_ 错误的变量名 12MyVar, _MyVar12 2018/12/5 Matlab编程及应用

6 2.1 Matlab的数据类型 Matlab的变量也有作用域 未加说明时,默认一切变量为局部变量,即仅在其调用的M文件内有效
变量前加关键字global,定义全局变量,可以在多个M文件间有效. (非必须)作为好的风格,全局变量常用大写字母表示 2018/12/5 Matlab编程及应用

7 2.1 Matlab的数据类型 Matlab的常量 Matlab预定义一些常量 常量名 常量值 i, j 虚数单位, i2=-1
Realmin 最小正浮点数,2-1022 pi 圆周率 Realmax 最大正浮点数,21023 eps 浮点运算相对精度,10-52 Inf 无穷大 NaN Not-a-Number,表示不定值 2018/12/5 Matlab编程及应用

8 2.1 Matlab的数据类型 例:在命令提示符后键入 >>pi ans = 3.14159265358979
>>1/0 Warning: Divide by zero Inf >>0/0 NaN 2018/12/5 Matlab编程及应用

9 2.1 Matlab的数据类型 Matlab中,应避免变量与常量同名.若已重名,通过clear+常量名恢复 >>pi=1
ans = 2018/12/5 Matlab编程及应用

10 2.2 向量及其运算 练习:在 Matlab 下直接输入下列常数,看它们的值是多少 i j eps inf nan pi realmax
realmin 2018/12/5 Matlab编程及应用

11 2.1 Matlab的数据类型 数字变量运算 >>258*369 ans=95202 %这里ans指当前计算结果
>>x=258*369 x= %计算结果赋给变量x >>x=258*369; >> %用分号;结束一行,中间结果不显示 >>x >>x= %输入变量名,则可查询此变量 2018/12/5 Matlab编程及应用

12 2.1 Matlab的数据类型 数字输入输出格式 Matlab数据存储和运算总是以双精度进行的 根据类型显示不同形式
format命令控制显示格式 >>x=sqrt(2) x = 1.4142 >>format long >>x 2018/12/5 Matlab编程及应用

13 2.2 向量及其运算 向量的生成 1.直接输入向量 2.利用冒号表达式 3.线性等分向量生成 a=[1 2 3 4 5 6 7 8 9]
>>b=[1;2;3;4;5;6;7;8;9] 用空格或逗号生成行向量,用分号生成列向量 2.利用冒号表达式 基本形式:x=x1:step:xn >>a=1: 2: 12 a= 3.线性等分向量生成 y=linspace(x1,x2,n) >>y=linspace(1,100,6) y= a=[ ] b=[1 2 3 4 5 6 7 8 9] 2018/12/5 Matlab编程及应用

14 2.2 向量及其运算 练习:给出下列向量的生成代码 1. a=[1 2 3 4 5 6 7 8 9 10 11 12];
3. a=[ ]T; 2018/12/5 Matlab编程及应用

15 2.3 矩阵及其运算 矩阵的生成 1.直接输入小矩阵 例:表示矩阵a= >>a=[1 2 3; 4 5 6; 7 8 9]
1.矩阵大小可不预先定义 2.行元素用空格或逗号格开 行之间用分号或回车符分开 3.输入矩阵要以”[]”为标识 2018/12/5 Matlab编程及应用

16 2.3 矩阵及其运算 矩阵的四则运算 1.矩阵加减 2.矩阵乘法 c= 2 3 4
>>a=[1 2 3;2 3 4;3 4 5]; >>b=[1 1 1;2 2 2;3 3 3]; c=a+b 2.矩阵乘法 >>c=a*b*c c = 2018/12/5 Matlab编程及应用

17 2.3 矩阵及其运算 3.矩阵的除法 例:求线性方程组Ax=b, A=[5 12 8;6 5 8;9 6 10], b=[7;11;7];
左除”\”: X=A\B 是方程式AX=B的解 右除”/”: X=B/A 是方程式XA=B的解 例:求线性方程组Ax=b, A=[5 12 8;6 5 8;9 6 10], b=[7;11;7]; >>x=A\b x= 5.6829 2018/12/5 Matlab编程及应用

18 2.3 矩阵及其运算 矩阵的行列式计算 矩阵的幂运算 矩阵的特征值运算 x = 0.5774 -0.0988 -0.8105
y = >>a=det(b) 矩阵的幂运算 >>a=b^3 矩阵的特征值运算 x为特征向量矩阵 y为特征值矩阵 >>A=[ ; ; ]; >>[x,y]=eig(A) 2018/12/5 Matlab编程及应用

19 2.3 矩阵及其运算 求矩阵行数/列数/维数 ndims(A) 返回A的维数 size(A) 返回A各个维的最大元素个数
length(A) 返回max(size(A)) [m,n]=size(A) 如果A是二维数组,返回行数和列数 nnz(A) 返回A中非0元素的个数 2018/12/5 Matlab编程及应用

20 2.3 矩阵及其运算 以eig函数为例,使用Matlab的help系统 >>help eig
EIG Eigenvalues and eigenvectors. E = EIG(X) is a vector containing the eigenvalues of a square matrix X. [V,D] = EIG(X) produces a diagonal matrix D of eigenvalues and a full matrix V whose columns are the corresponding eigenvectors so that X*V = V*D. 2018/12/5 Matlab编程及应用

21 [V,D] = EIG(X,'nobalance') performs the computation with balancing
disabled, which sometimes gives more accurate results for certain problems with unusual scaling. If X is symmetric, EIG(X,'nobalance') is ignored since X is already balanced. E = EIG(A,B) is a vector containing the generalized eigenvalues of square matrices A and B. 2018/12/5 Matlab编程及应用

22 [V,D] = EIG(A,B) produces a diagonal matrix D of generalized
eigenvalues and a full matrix V whose columns are the corresponding eigenvectors so that A*V = B*V*D. EIG(A,B,'chol') is the same as EIG(A,B) for symmetric A and symmetric positive definite B. It computes the generalized eigenvalues of A and B using the Cholesky factorization of B. 2018/12/5 Matlab编程及应用

23 EIG(A,B,'qz') ignores the symmetry of A and B and uses the QZ algorithm.
In general, the two algorithms return the same result, however using the QZ algorithm may be more stable for certain problems. The flag is ignored when A and B are not symmetric. See also CONDEIG, EIGS. Overloaded methods help lti/eig.m help sym/eig.m 学会使用help了解函数的使用方法 2018/12/5 Matlab编程及应用

24 2.3 矩阵及其运算 练习: 通过help,学会矩阵的秩函数rank(), 求逆函数inv(), 矩阵对角元素抽取函数diag()
上三角矩阵和下三角矩阵抽取triu()和tril() 正弦,余弦函数sin(),cos() 指数函数exp(),平方根函数sqrt(),模函数abs() 2018/12/5 Matlab编程及应用

25 2.3 矩阵及其运算 一些特殊矩阵的生成 1.全0阵 2.单位阵 3.全1阵 >>zeros(m,n); %生成m*n阶的全0阵
>>eye(m,n); %生成m*n阶的单位阵 >>ones(m,n); %生成m*n阶的全1阵 2018/12/5 Matlab编程及应用

26 2.3 矩阵及其运算 一些特殊矩阵的生成 4.随机阵 >>rand(n); %生成n*n阶(0,1)区间均匀分布的随机阵
>>rand(m,n);%生成m*n 阶(0,1)区间均匀分布的随机阵 >>randn(m,n);%生成m*n 阶正态分布的随机阵, 均值为1,方差为0,标准差为1 2018/12/5 Matlab编程及应用

27 2.3 矩阵及其运算 矩阵元素的定位和获取 1.取出矩阵中某一个元素 >>a(i,j) 2.取出矩阵某几行(列)元素
取x1行到x2行 >>a(x1:x2,:) 取y1列到y2列 >>a(:,y1:y2) 取x1行到x2行, y1列到y2列元素 >>a(x1:x2,y1:y2) 2018/12/5 Matlab编程及应用

28 2.3 矩阵及其运算 矩阵对角抽取 diag(m) diag(m,k) diag(v,k) V=[1 2 3 4 5 6 7]; a =
ans= a = diag(a,3)=[0.9218] diag(a,2)=[ ]’ diag(a,1)=[ ]’ diag(a,0)=[ ]’ diag(a,-1)=[ ]’ diag(a,-2)=[ ]’ diag(a,-3)=[0.4860]’ 2018/12/5 Matlab编程及应用

29 2.3 矩阵及其运算 上三角矩阵和下三角矩阵抽取 tril(m) tril(m,k) triu(m) triu(m,k) m =
triu(m,1)= 2018/12/5 Matlab编程及应用

30 2.4多项式运算 多项式的表示方法 用以下行向量表示: 例如:输入多项式 >>p=[1 -5 6 -33];
>>poly2sym(p) ans= x^3-5*x^2+6*x-33 2018/12/5 Matlab编程及应用

31 2.4多项式运算 求多项式的根 例:求解方程 的所有根 >>p=[2 -5 6 -1 9]; >>roots(p)
例:求解方程 的所有根 >>p=[ ]; >>roots(p) ans= i i i i 2018/12/5 Matlab编程及应用

32 2.4多项式运算 多项式的乘除运算 乘法由函数conv来实现;除法由deconv实现 例:计算两多项式的乘除法 例:计算两多项式的乘除法
>>p=[ ]; >>poly2sym(p) ans= 2*x^4-5*x^3+6*x^2-x+9 >>d=[ ]; ans= 3*x^2-90*x-18 >>pd=conv(p,d) pd= 例:计算两多项式的乘除法 >>poly2sym(pd) ans= 6*x^6-195*x^5+432*x^4-453*x^3+9*x^2-792*x-162 >>p1=deconv(pd,d) p1= 2018/12/5 Matlab编程及应用

33 2.5 结果保存与再用 把Matlab工作空间中一些有用的数据长久保存下来的方法是生成mat数据文件
save —— 将工作空间中所有的变量存到mat文件中 如:save data 将工作空间中所有的变量存到data.mat文件中 save data a b 将工作空间中a和b变量存到data.mat文件中 load data —— 将data.mat记录的变量调入工作空间 2018/12/5 Matlab编程及应用

34 2.6 Matlab矢量化 何为“矢量化” 改善程序的性能 问题尽量使用矩阵表述 避免出现太多(两重或以上)的循环嵌套 2018/12/5

35 2.6 Matlab矢量化 例:有一200×400矩阵data for i = 1:200 for j = 1:400
if data(i,j) > 0 data(i,j) = 0; end data(data > 0) = 0; cputime=0.0160 cputime=0.0470 2018/12/5 Matlab编程及应用

36 2.6 Matlab矢量化 例:百万个点的计算 %一般循环编程 %矢量化编程 i=0; t=0:.01:10000;
for t=0:.01:10000 i=i+1; y(i)=sin(t); end %矢量化编程 t=0:.01:10000; y=sin(t); cputime=0.2340秒 cputime>20秒 2018/12/5 Matlab编程及应用

37 2.6.2 矢量化技术 使用向量作索引 如果 X 和 V 都为向量
X(V) 就是 [X(V(1)), X(V(2)), ..., X(V(n))] 2018/12/5 Matlab编程及应用

38 2.6.2 矢量化技术 使用向量作索引 例: X=[2 5 8 11 14 17 20 23 26 29] 且 V=[4 2 6]
使用向量作索引 例: X=[ ] 且 V=[4 2 6] X(V) 就是 [ ] 2018/12/5 Matlab编程及应用

39 2.6.2 矢量化技术 创建和操作矩阵 从向量构建矩阵 A = ones(5,5)*10 A = 10; A = A(ones(5,5))
乘法是不必要的 A =                     2018/12/5 Matlab编程及应用

40 2.6.2 矢量化技术 创建和操作矩阵 从向量构建矩阵 v = (1:5)'; M = v(:,ones(3,1))
2018/12/5 Matlab编程及应用

41 2.6.2 矢量化技术 创建和操作矩阵 从向量构建矩阵 M = repmat([1:5]', [1,3]);
2018/12/5 Matlab编程及应用

42 2.6.2 矢量化技术 排序、设置和计数 max 最大元素 min 最小元素 sort 递增排序
unique 寻集合中互异元(去掉相同元素) find 查找非零、非NaN元素的索引值 在许多应用中,你要做的计算则可能与其它元素密切相关。例如,假设你用一个向量x来表示一个集合。不观察向量的其他元素,你并不知道某个元素是不是一个冗余元素,并应该被去掉。如何在不使用循环语句的情况下删除冗余元素 ,解决这类问题需要相当的智巧 2018/12/5 Matlab编程及应用

43 2.6.2 矢量化技术 >>a=[5 2 7 89 12 7 525 78]; >>[Y,I]=max(a)
例:找出向量中最大元,返回其下标 >>a=[ ]; >>[Y,I]=max(a) Y = 525 I = 7 2018/12/5 Matlab编程及应用

44 2.6.2 矢量化技术 >>a=[5 2 7 89 12 7 525 78]; >>sort(a) ans =
例:向量元素排序 >>a=[ ]; >>sort(a) ans = 2018/12/5 Matlab编程及应用

45 2.6.2 矢量化技术 作业: 1. 任意给定一向量(元素个数大于6),要得到它的前3个最大元的值以及其下标。如:向量a=[ ], 要返回最大元9, 8, 6,及其相应下标8, 4, 3. 2018/12/5 Matlab编程及应用

46 2.6.2 矢量化技术 作业 2. 来自人工免疫原理的问题 N个抗体Ab,由字符编码,如Ab(i)=[6 2 6 8]
Artificial Immune Theory N个抗体Ab,由字符编码,如Ab(i)=[ ] 与一个抗原Ag作比对,Ag也由字符编码, 如Ag=[ ]。现要将抗体作变异, 对第i个抗体Ab(i),其变异率为a(i),为[0,1]间 随机数。变异计算公式为: Ab_new(i)=Ab(i)-a(i)*(Ab(i)-Ag) 用向量化的代码实现N个抗体的变异 提示: 用diag和repmat 2018/12/5 Matlab编程及应用

47 第二章 Matlab数值计算功能 练习: 1.生成两个矩阵,计算他们的转置、逆、行列式的值
2.产生两个行、列向量,计算他们的乘积(两种乘法) 3.用 roots 指令算出 x3+2x2+x+1=0 的根 2018/12/5 Matlab编程及应用

48 第二章 Matlab数值计算功能 练习: 4. 在数学上可以证明:一个方阵的行列式的值,等于它的特征值的乘积。试任意产生不同维数的 10个方阵,來验证上述恒等式 提示: 参考幻灯片18页 2018/12/5 Matlab编程及应用

49 第二章 Matlab数值计算功能 本章总结 介绍了Matlab的数据类型,向量、矩阵和多项式的运算 简介了常用的数值计算命令
学习使用help命令查看函数使用方法 2018/12/5 Matlab编程及应用

50 第二章 Matlab数值计算功能 本章总结 重点在于熟悉Matlab以向量为单位的操作,利用向量化的高效率进行代码优化
要能够编写向量化的Matlab代码,避免C/C++思维方式 2018/12/5 Matlab编程及应用


Download ppt "University of Electronic Science and Technology, China"

Similar presentations


Ads by Google