340 likes | 554 Views
Matlab 计算与仿真技术 第四讲 : 交互式计算 -II http://human-robot.sysu.edu.cn/course. 王国利. http://sysu.edu.cn/~isswgl. 信息科学与技术学院. 中山大学. 第三讲提纲. 第三讲回顾 交互式计算 (II). 第三讲回顾. Matlab 的初识与概述 - 桌面 : 基本的工作环境 ( 命令 / 历史 / 目录 ) - 计算 : 运算操作 / 数据类型 / 联机帮助 科学计算与仿真 - 是科学认知的必要手段 - 是信息技术的必要技能 交互式计算 (I)
E N D
Matlab计算与仿真技术 第四讲: 交互式计算-II http://human-robot.sysu.edu.cn/course 王国利 http://sysu.edu.cn/~isswgl 信息科学与技术学院 中山大学
第三讲提纲 • 第三讲回顾 • 交互式计算(II)
第三讲回顾 • Matlab的初识与概述 - 桌面: 基本的工作环境(命令/历史/目录) - 计算: 运算操作/数据类型/联机帮助 • 科学计算与仿真 - 是科学认知的必要手段 - 是信息技术的必要技能 • 交互式计算(I) - 命令行信息交互 - 变量管理(命名/创建/引用)
交互式计算 (续) • 综合练习一: 找到如下矩阵中最大元素 - 提示1: 首先需要查找最大值的函数 回忆: >> lookfor max??? - 提示2: 了解如何使用这个函数 回忆: >> help/doc max???
交互式计算 (续) - 求解 >> lookfor max; % 确定函数是否存在 >> help max; % 函数使用说明 >> A=[ 1 -5 -2;… 3 4 -9;… -7 2 6]; % 创建矩阵 >> max(max(A)) % 为什么两次? ans = 6
交互式计算 (续) >> B=sin(A); % 创建矩阵 >> max(max(B)) % 求解 ans = 0.9585 - 讨论: 与 ’:’ 组合使用技巧 >>max(B(:)); % 与 max(max(B)) 等价 为什么? 提示: B(:) 将矩阵按列展开成向量
交互式计算 (续) • 综合练习二: 利用函数 sin 在 [0,Π] 上产生 长度为100的采样数据, 以表格方式存储 - 回忆:linearspace(startValue, endValue, nElements) - 提示: startValue=0, endValue=pi, nElements=100 - 求解: >> x=linespace(0,pi,100); % row vector >> y=sin(x); % row vector >> xyTable=[x’ y’]; % table form
交互式计算 (续) • 矩阵计算进阶 - 算术运算 加减运算: 相同阶数或一个为标量 提示: A+b 等价于[aij+b] 乘法运算: 相容阶数或一个为标量 提示: A*b 等价于[aij*b] 除法运算: 相容阶数且除矩阵非奇异或非零标量 提示: A/b 等价于[aij/b] 注意: 左右除的分别, 即 A/B 不等价于B/A
交互式计算 (续) - 非算术运算 关系运算: = = > < 结果:返回布尔值矩阵 条件: 相同阶数或一个为标量 提示: A==b 等价于[aij==b] 逻辑运算: &/|/~/xor 以逻辑和为例, 相同维数或至少一个为标量 >> C=A & B; % cij=1 iff both aij andbij nonzeros cij=0 otherwise
交互式计算 (续) - 矩阵函数 数学函数: 函数名通常以m为结尾标志 提示: 矩阵函数 和 函数矩阵的差异 例如, expm(X)≠exp(X) logm(X)≠log(X) 逻辑函数 相同维数或至少一个为标量 AND/OR/XOR 提示:与逻辑运算一致
交互式计算 (续) - 矩阵整形操作 维数查询 >> size(A); 功能: 返回行列值 举例: >> A=[1:4; 5:8; 9:12]’; >> [m,n]=size(A) m = 4 n = 3 提示: 通常与其他整形操作协作使用
交互式计算 (续) - 矩阵整形操作 向量长度查询 >> length(b); 功能: 返回元素个数 等价于 >> max(size(b)) 元素个数查询 >> numel(A); 功能: 返回元素个数 等价于 >> prod(size(A)); >> prod([m,n]); % == m*n;
交互式计算 (续) - 矩阵整形操作 标量确认查询 >> isscalar(b); 功能: 返回逻辑值 向量确认查询 >> isvector(b); 功能: 返回逻辑值 空矩阵确认查询 >> isempty(A); 功能: 返回逻辑值 查询非零元素: >> find(A); % 返回非零元素
交互式计算 (续) - 矩阵整形操作 重排操作 reshape 基本格式: >> reshape(A,m,n); 功能: 按列重排 举例: >> A=[1:4; 5:8; 9:12]’; >> B=reshape(A,2,6) B = 1 3 5 7 9 11 2 4 6 8 10 12 提示:对二维信号处理特别有用
交互式计算 (续) - 矩阵整形操作 翻转操作 fliplr(水平翻转)/flipud(上下翻转)/rot90(绕转) 基本格式: >> fliplr(A); >> flipud(A); >> rot90(A); 功能: 按水平/上下翻转重排, 或逆时针旋转90度 举例: >> rot90(A) >> A=[1:3; 4:6]; ans = >> fliplr(A) >> flipud(A) 3 6 ans = ans = 2 5 3 2 1 4 5 6 1 4 6 4 5 1 2 3
交互式计算 (续) - 矩阵整形操作 拼接操作 >> cat(dim,A1,A2,…); >> blkdiag(A1,A2,…); 功能: 按行或列拼接矩阵, 或按对角块方式组织 特别地 >> cat(1,A,B); % == [A;B] >> cat(2,A,B); % == [A,B] 举例: >> cat(2,A’,B’) >> A=[1:4]; B=[5:8]; ans= >> cat(1,A,B) 1 5 ans = 2 6 1 2 3 4 3 7 5 6 7 8 4 8
交互式计算 (续) - 矩阵整形操作 块提取操作: diag(对角元素)/tril(下三角)/triu(上三角) 基本格式: >> diag(A); % 返回对角向量 >> tril(A); % 上三角元素清零 >> triu(A); % 下三角元素清零 功能:提取对角块/下三角/上三角块 举例: >> triu(A) >> A=[1:3; 4:6]; ans = >> diag(A) >> tril(A) 1 2 3 ans = ans = 0 5 6 1 1 0 0 5 4 5 0
交互式计算 (续) • 数据类型使用注解 - 更多的常用数据类型 复数 字符串 多项式 数组 结构 胞组 对象
交互式计算 (续) • 关于复数 - 虚数单位 内置变量: i/j(=sqrt(-1)) >> i^2 ans = -1 提示: 应尽量避免利用其自定义变量 - 内置函数 >> abs % 幅值 >> exp % 指数 >> angle % 复角 >> imag % 实部 >> conj % 共扼 >> real % 虚部
交互式计算 (续) - 使用实例 >> zeta=5; theta=pi/3; % 幅值和复角 >> z=zeta*exp(i*theta) z = 2.5000+4.3301i >> abs(z) >> real(z) ans = ans = 5.0000 2.5000 >> angle(z)*108/pi >> imag(z) ans = ans = 60.0000 4.3301
交互式计算 (续) • 关于字符串 - 基本概念 元素为字符的矩阵 单引号方式赋值 引用方式同矩阵 - 使用实例 >> first=‘john’; >> length(name) >> last=‘coltrane’; ans = >> name=[first,’ ’,last] 13 name = john coltrane
交互式计算 (续) - 常用操作函数 转换操作 >>char 操作 功能:将整数转换成对应的ASCII码字符 另:可将两个字符串拼接 >>num2str 操作 功能:将数值矩阵转换成字符串文本 >> str2num操作 功能:将字符串文本转换成数值矩阵
交互式计算 (续) 查询操作 >> findstr 功能:查找感兴趣的子字符串 对比操作 >> strcmp 功能:比较两个字符串,返回逻辑值 >> strncmp 功能:只比较字符串的前n个字符
交互式计算 (续) >> strmatch 功能:依行进行前端匹配查询 返回前端匹配的行下标 拼接操作 >> strcat 功能:行方式拼接字符串 >> strvcat 功能:列方式拼接字符串
交互式计算 (续) 使用实例 >> msg1=[‘there are’, num2str(100/2.45),… ‘inch in meter’] msg1 = there are 39.3701 inch in meter >> msg2=sprintf(‘there are %5.2f cubic … inches in a liter’, … 1000/2.54^3) msg2 = there are 61.02 inches in a liter
交互式计算 (续) >> both=strvcat(msg1,msg2) both = there are 39.3701 inch in meter there are 61.02 inches in a liter >> strcmp(msg1,msg2) ans = 0 >> strncmp(msg1,msg2,9) ans = 1
交互式计算 (续) >> findstr(‘in’,msg1) aus = 19 26 >> i=strmatch(‘max’,strvcat(‘max’,… 'minimax','maximum')) ans = 1 3 >> char([77, 65, 84, 76, 65, 66]) ans = MATLAB
交互式计算 (续) • 关于多项式 - 基本概念 数学表达式 求值计算 >> c=[c1,c2,c3,…,cn,cn+1]; >> polyval(c,x)
交互式计算 (续) 卷积计算 >> w=conv(u,v) % 返回多项式系数向量 重构操作 >> c=poly(v) % 返回多项式系数向量 微分操作 >> cdef=polyder(c) 拟合操作 >> c=polyfit(x,y,n)
交互式计算 (续) 使用实例 >> c = [3 2 1]; >> polyval(c,[5 7 9]) ans = 85 162 262 >> x = (0: 0.1: 2.5)'; y = erf(x); >> c = polyfit(x,y,6) c = 0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004
交互式计算 (续) >> d=conv(c,[5 7 9]) ans = 15 31 46 25 9 >> dd=polyder(d) dd = 60 93 92 25 >> poly(roots(dd)) ans = 1.0000 1.5500 1.5333 0.4167
特别提醒 10月1日为公休日 过一个快乐的长假期! Be Good Do Right! 完成作业:57-58页/习题1-9
结束语 第四讲预告:交互式计算(III) (2007年10月8日)