1、2018年10月12日9时37分,MATLAB语言与应用,1,第 2 章 程序设计基础,现代设计与分析研究所王 雷,2018年10月12日9时37分,MATLAB语言与应用,2,本章主要内容,2.1 MATLAB 语言基础 2.2 MATLAB 基本数学运算 2.3 MATLAB 语言流程控制 2.4 MATLAB 函数的编写,2018年10月12日9时37分,MATLAB语言与应用,3,2.1 MATLAB 语言基础,MATLAB 语言的变量名规则 由一个字母引导,后面可以为其他字符 区分大小写 Abc ABc 有效 MYvar12, MY_Var12 和 MyVar12_ 错误的变量名 1
2、2MyVar, _MyVar12 MATLAB 的保留常量 eps, i, j, pi, Inf, NaN lastwarn, lasterr,2018年10月12日9时37分,MATLAB语言与应用,4,数值型数据结构,双精度数值变量 IEEE标准,64位 (8字节),11指数位,53数值位和一个符号位double() 函数的转换 其他数据类型 uint8,常用于图像表示和处理,8位 int8(), int16(), int32(),uint16(), uint32(),2018年10月12日9时37分,MATLAB语言与应用,5,符号型变量数据类型,符号型,sym(A), 常用于公式推导变
3、量声明采用变精度函数求值【例2-1】求出 p 的 300 位有效数字,2018年10月12日9时37分,MATLAB语言与应用,6,MATLAB 支持的其他数据结构,字符串型数据:用单引号括起来 多维数组:是矩阵的直接扩展,多个下标 单元数组:将不同类型数据集成到一个变量名下面,用 表示(细胞型) 结构体:A.b, 引用也用 A.b,不是A-b 类与对象:可以定义重载函数,2018年10月12日9时37分,MATLAB语言与应用,7,MATLAB 的基本语句结构,直接赋值语句【例2-2】表示矩阵,2018年10月12日9时37分,MATLAB语言与应用,8,函数调用语句冒号表达式,2018年1
4、0月12日9时37分,MATLAB语言与应用,9,【例2-3】 用不同的步距生成 (0,p) 间向量,2018年10月12日9时37分,MATLAB语言与应用,10,Linspace(a,b,n)【例2-4】 0到pi的50个等间距点T=linspace(0,pi,50)相当于,0:pi/49:pi,2018年10月12日9时37分,MATLAB语言与应用,11,子矩阵提取,基本语句格式 【例2-5】子矩阵提取 提取 A 矩阵全部奇数行,所有列提取 A 矩阵 3,2,1 行、2,3,4 列构成子矩阵将 A 矩阵左右翻转,2018年10月12日9时37分,MATLAB语言与应用,12,例子exs
5、tring.m 字符串数据类型xibao.m 单元数组(细胞)jiegou.m 结构型数据,2018年10月12日9时37分,MATLAB语言与应用,13,2.2 基本数学运算,2.2.1 代数运算 2.2.2 逻辑运算 2.2.3 比较运算 2.2.4 解析结果的化简与变换 2.2.5 基本数论运算,2018年10月12日9时37分,MATLAB语言与应用,14,矩阵的代数运算,矩阵转置 数学表示 MATLAB 求解 BA,2018年10月12日9时37分,MATLAB语言与应用,15,矩阵加减法注意其一为标量的情形 矩阵乘法 数学表示MATLAB 表示 注意相容性,2018年10月12日9
6、时37分,MATLAB语言与应用,16,矩阵除法 矩阵左除:AX = B,求 XMATLAB 求解:X=AB A不是方阵,求最小二乘解 矩阵右除:XA = B,求 XMATLAB求解:X=B/A A不是方阵,求最小二乘解,2018年10月12日9时37分,MATLAB语言与应用,17,矩阵除法求解方程组MATLAB求解 A=8 1 6;3 5 7;4 9 2;B=7.5 4 12; x=AB,2018年10月12日9时37分,MATLAB语言与应用,18,矩阵翻转 左右翻转 上下翻转 旋转 90o矩阵乘方A 为方阵,求MATLAB 实现:,2018年10月12日9时37分,MATLAB语言与应
7、用,19,点运算矩阵对应元素的直接运算例如,2018年10月12日9时37分,MATLAB语言与应用,20,矩阵的逻辑运算,逻辑运算(相应元素间的运算) 与运算 或运算 非运算 异或运算,2018年10月12日9时37分,MATLAB语言与应用,21,矩阵的比较运算,各种允许的比较关系, =, , =, =,=, find(), all(), any() 实例,2018年10月12日9时37分,MATLAB语言与应用,22,解析结果的化简与变换,其他常用化简函数,【例2-6】,2018年10月12日9时37分,MATLAB语言与应用,23,变量替换,syms x subs(P,s,x) sub
8、s(P,s,5),2018年10月12日9时37分,MATLAB语言与应用,24,【例2-7】,求其 Taylor 幂级数展开,syms a b c d t; f= cos(a*t+b)+sin(c*t)*sin(d*t); f1=taylor(f) pretty(f1),结果,2018年10月12日9时37分,MATLAB语言与应用,25,基本数论运算,2018年10月12日9时37分,MATLAB语言与应用,26,【例2-8】 对下面的数据进行取整运算-0.2765,0.5772,1.4597,2.1091,1.191,-1.6187,2018年10月12日9时37分,MATLAB语言与应
9、用,27,m=1856120; n=1483720 g=gce(m,n); l=lcm(m,n); g,l,【例2-10】1856120,1483720,最大公约数、 最小公倍数,质因数分解,【例2-11】1-1000间质数,%prod验证,2018年10月12日9时37分,MATLAB语言与应用,28,2.3 MATLAB 语言流程控制,循环结构 for 结构while 结构,2018年10月12日9时37分,MATLAB语言与应用,29,【例2-12】用循环求解,【例2-13】用循环求解求最小的 m,2018年10月12日9时37分,MATLAB语言与应用,30,【例2-14】求, tic
10、, s=0;for i=1:100000, s=s+1/2i+1/3i; endtoc,2018年10月12日9时37分,MATLAB语言与应用,31,转移结构,2018年10月12日9时37分,MATLAB语言与应用,32,2018年10月12日9时37分,MATLAB语言与应用,33,【例2-15】用循环求解求最大的 m,2018年10月12日9时37分,MATLAB语言与应用,34,2.3.3 开关结构,2018年10月12日9时37分,MATLAB语言与应用,35,2018年10月12日9时37分,MATLAB语言与应用,36,和 C 语言的区别,当开关表达式的值等于某表达式,执行该语
11、句后结束该结构,不用 break 同时满足若干个条件之一,则用单元结构 otherwise 语句,不是 default 程序的执行结果和各个case顺序无关 case 语句中条件不能重复,否则列在后面的条件将不能执行,2018年10月12日9时37分,MATLAB语言与应用,37,2.3.4 试探结构,全新结构,2018年10月12日9时37分,MATLAB语言与应用,38,2.4 MATLAB 函数的编写,函数是 MATLAB 编程的主流方法 除了函数外,还可以采用 M-script 文件 M-script 适合于小规模 【例2-16】若最大值不为 10000,需修改程序对 m 和 1000
12、0 值的设置,不适合于M-script,2018年10月12日9时37分,MATLAB语言与应用,39,2.4.1 MATLAB 语言的函数的基本结构,nargin, nargout, varargin, varargout,2018年10月12日9时37分,MATLAB语言与应用,40,【例2-17】前面的要求,m, 10000,无需修改程序,2018年10月12日9时37分,MATLAB语言与应用,41,【例2-18】若只给出一个输入参数,则会自动生成一个方阵在函数中给出合适的帮助信息检测输入和返回变量的个数,edit myhilb,2018年10月12日9时37分,MATLAB语言与应用
13、,42,2018年10月12日9时37分,MATLAB语言与应用,43,2018年10月12日9时37分,MATLAB语言与应用,44,2.4.2 可变输入输出个数,【例2-21】 可以计算两个多项式的积 用 varargin 实现任意多个多项式的积,2018年10月12日9时37分,MATLAB语言与应用,45,2.4.3 inline 函数和匿名函数,inline 函数,可以免去文件MATLAB 7.0,2018年10月12日9时37分,MATLAB语言与应用,46,f=inline(x.3,x); t=-1:0.05:1; y=f(t); plot(t,y),【例2-19】inline函数,f=inline(sin(sqrt(x.2.+y.2),x,y); t=-1.5*pi:0.2:1.5*pi; x,y=meshgrid(t); z=f(x,y);mesh(x,y,z),