数学软件 Matlab —— 编程基础(脚本文件/函数文件)
本讲主要内容 M 文件 基本运算:算术、关系、逻辑 简单的输入输出 控制结构:顺序、选择、循环 函数文件
Matlab 编程 Matlab 编程 Matlab 作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算能力和丰富的绘图功能,同时也可以与 C、FORTRAN 等高级语言一样进行程序设计 利用 Matlab 的程序控制功能,将相关 Matlab 命令编成程序存储在一个文件中(M 文件),然后在命令窗口中运行该文件,Matlab 就会自动依次执行文件中的命令,直到全部命令执行完毕 在 Matlab 程序设计中,要充分利用 Matlab 数据结构的特点,提高编程效率
M 文件 M 文件介绍 M 文件分类(根据调用方式的不同) 用 Matlab 语言编写的程序称为 M 文件 M 文件以 .m 为扩展名 Script:脚本文件/命令文件 Function:函数文件 可以直接运行的M文件
M 文件 M 文件的创建的与编辑 新建一个 M 文件 打开已有的 M 文件 M 文件是文本文件,可以用任何文本编辑器来建立和编辑,通常使用 Matlab 自带的 M 文件编辑器 新建一个 M 文件 菜单操作 ( File New M-File ) 命令操作 ( edit M 文件名 ) 命令按钮 ( 快捷键 ) 打开已有的 M 文件 菜单操作 ( File Open ) 命令操作 ( edit M 文件名 ) 命令按钮 ( 快捷键 ) 双击 M 文件
编程示例 例:编写M文件,将华氏温度转化为摄氏温度: 新建一个 M 文件 f2c.m,内容如下: clear; % 清除当前工作空间中的所有变量 f=input('请输入一个华氏温度:'); c=5*(f-32)/9; fprintf('对应的摄氏温度是:%f\n',c); f2c.m 在命令窗口中输入 f2c,即可执行该 M 文件 M文件运行所产生的变量都驻留在 Matlab 当前工作空间 百分号是注释符 M文件必须在当前工作目录下才能运行
本讲主要内容 M 文件 基本运算:算术(略)、关系、逻辑 简单的输入输出 控制结构:顺序、选择、循环 函数文件
关系运算 关系运算:比较大小 > 大于 >= 大于等于 == 等于 < 小于 <= 小于等于 ~= 不等于 比较大小,如果结论是 真 则返回 1 ,否则返回 0 注意 = = 与 = 的区别 可以对两个同样大小的数组进行比较运算,即对应分量进行比较,结果为一个同样大小的0-1数组 也可以对一个数组和一个标量进行比较运算,此时标量和数组中的每一个元素极限比较,结果也是一个0-1数组
关系运算举例 例: 2+2==4 x=pi^2<8 A=[1 3 5; 2 0 6] B=[3 1 0; 2 4 6] A>=B Matlab演示
逻辑运算 逻辑运算 例: & 逻辑与 | 逻辑或 ~ 逻辑非 and(x,y) 与 or(x,y) 或 xor(x,y) 异或 not(x) && 与(短格式) || 或(短格式) Matlab演示 注意 &,| 与 &&,|| 的区别 例: x=5; 3<x<8 % ERROR 3<x & x<8
逻辑运算 在 Matlab 中,0 表示 “假”,非零表示 “真” 运算法则 运算对象 与 或 非 异或 A B A&B A|B ~A Xor(A,B) 1 Matlab演示 在 Matlab 中,0 表示 “假”,非零表示 “真”
逻辑运算 逻辑运算函数:all、any all(x) % 逻辑与的推广 如果向量 X 中所有元素都非零,则返回 1,否则返回 0 any(x) % 逻辑或的推广 如果向量 X 中存在非零元素,则返回 1,否则返回 0 若 x 为矩阵,则 any 和 all 按列运算,返回一个 0-1 向量 Matlab演示 例: A=[61 83 58 94 75]; % 学生成绩 all(A>=60) % 全部及格否? any(A>=90) % 有没有90分以上的?
高 低 运算优先级 小括号 幂,点幂 正号,负号,逻辑非 乘,除,点乘,点除 加,减 冒号运算 关系运算 & | && || Matlab演示 低
本讲主要内容 M 文件 基本运算:算术、关系、逻辑 简单的输入输出 控制结构:顺序、选择、循环 函数文件
input 数据的输入:input x=input(提示信息) 例: 例: 其中 提示信息 为字符串, x=input('Please input x: ') 例: name=input('What''s your name? ') 输入字符串时必须带单引号 单引号的输出:两个连续的单引号
disp 数据的输出:disp disp(x) 例: 输出变量 x 的值,x 可以是数值矩阵或字符串 一次只能输出一个变量的值 x=pi; B=[1 2 3; 4 5 6; 7 8 9]; disp(x) disp(B) str='Hello, Tom!'; disp(str)
本讲主要内容 M 文件 基本运算:算术、关系、逻辑 简单的输入输出 控制结构:顺序、选择、循环 函数文件
M文件控制流 程序控制结构有三种: 顺序结构、选择结构和循环结构 顺序结构 任何复杂的程序都由这三种基本结构组成 按排列顺序依次执行各条语句,直到程序的最后 这是最简单的一种程序结构,一般涉及数据的输入输出、数据的计算或处理等
选择结构 选择结构 根据给定的条件成立或不成立,分别执行不同的语句 选择结构的实现 if 语句 switch 语句
if 条件语句 例: if 条件表达式 end 例: if 条件表达式 else end 单分支 if 语句 if score>=60 语句组 end if score>=60 mark='passed'; end 双分支 if 语句 例: if a>b x=a; else x=b; end if 条件表达式 语句组1 else 语句组2 end
if 条件语句 例:计算一个数符号 if 条件表达式1 elseif 条件表达式2 elseif 条件表达式m else end 语句组1 elseif 条件表达式2 语句组2 ... ... elseif 条件表达式m 语句组m else 语句组 end if x>0 sign_of_x=1; elseif x<0 sign_of_x=-1; elseif x==0 sign_of_x=0; else disp('I dont know!') end
循环结构 循环结构 根据给定的条件,重复执行指定的语句 循环结构的实现 for 语句 while 语句
for 循环 for 循环变量 = 取值列表 end for 循环 循环体 取值列表 通常是一个向量 将取值列表中的值依次赋给循环变量,直到全部取完, 循环结束 不要在循环体内改变循环变量的值 为提高代码的运行效率,应尽可能提高代码的向量化程度
for 循环 例1: 例2:如何输出下列矩阵?(程序见下页!) 已知 ,当 n=100 时,求 y 的值 y=0; n=100; for k=1:n y=y+1/(2*k-1); end y ex4for01.m 例2:如何输出下列矩阵?(程序见下页!) A = 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2
for 循环 for i=1:5 for j=1:5 if i == j A(i,j) = 2; elseif abs(i-j) == 1 end A ex4for02.m
while 循环 假 while 条件表达式 end 真 while 循环 表达式 循环体语句 当条件表达式的值为真(非 0)时, 执行循环体语句, 直到条件表达式的值是假为止 循环体语句 循环语句可以嵌套使用 如果预先知道循环的次数,可采用 for 循环 如果预先无法确定循环次数,则可使用 while 循环
while 循环 例:数论中的一个有趣问题:3n+1 问题 任取一个正整数,如果是偶数,用 2 除,如果是奇数,用 3 乘再加 1,反复这个过程,直到所得到的数为 1。 问:是否存在使该过程永不中止的整数? n=input('请输入一个正整数 n: '); x=n; while x>1 if mod(x,2)==0 x=x/2; else x=3*x+1; end fprintf(' x=%d \n', x); ex4while01.m
循环的终止 循环的中断 break continue break 和 continue 通常需要与 if 语句配合使用 跳出循环体,终止循环 结束本轮循环,执行下一轮循环 break 和 continue 通常需要与 if 语句配合使用 若想强行终止运行中的程序,可以使用 Ctrl+c
Pause与return用法 程序暂停 pause % 暂停程序的运行,按任意键后继续 pause(x) % 暂停程序 x 秒 返回/退出 pause off 屏蔽程序中所有 pause 的作用 pause on 打开 pause 的作用 返回/退出 return 退出正在运行的脚本或函数,通常用在函数文件中
本讲主要内容 M 文件 基本运算:算术、关系、逻辑 简单的输入输出 控制结构:顺序、选择、循环 函数文件
Matlab 另一类编程:函数文件 M 文件根据调用方式的不同可以分为两类 Script:脚本文件,直接输入文件名即可运行 Function:函数文件 供其它M文件调用,通常带输入参数和输出参数
函数文件 函数文件一般格式 function 输出形参列表=函数名(输入形参列表) % 注释说明部分 (可选) 函数体语句 第一行为引导行,表示该 M文件是函数文件 函数名的命名规则与变量名相同 ( 必须以字母开头 ) 当输出形参多于一个时,用方括号括起来 函数必须是一个单独的 M文件 函数文件的文件名必须与函数名一致
编程示例 例:将华氏温度转化为摄氏温度: 脚本文件 (f2cs.m): clear; f=input('Please input f:'); c=5*(f-32)/9 f2cs.m 函数文件(f2cf.m): function c=f2cf(f) c=5*(f-32)/9; end f2cf.m
函数文件举例 例:交换两个变量的值 myswap.m function [a,b] = myswap(x,y) % swap x and y a = y; b = x; myswap.m 函数可以有多个输入参数和多个输出参数 也可以没有输入参数或输出参数
函数文件举例 例:打印杨辉三角形 printyh.m function printyh(n) % 打印杨辉三角形, 本函数没有输出参数 yh=1; disp(yh); if n==1, return; end yh=[1,1]; disp(yh); for k=3:n yh_old=yh; k2=ceil(k/2); for i=2:k2 yh(i)=yh_old(i-1)+yh_old(i); end yh(k2+1:k)=yh(k-k2:-1:1); disp(yh); printyh.m
函数调用 函数调用的一般格式 输出实参列表=函数名(输入实参列表) 函数调用时,实参的顺序应与函数定义时形参的顺序一致 实参与形参之间的结合是通过值传递实现的 函数可以嵌套调用,即一个函数可以被其它函数调用, 甚至可以被它自身调用,此时称为递归调用 函数所传递的参数具有可调性,Matlab 用两个永久变量 nargin 和 nargout 分别记录调用该函数时的输入实参 和输出实参的个数
教材 P35 的习题 1:如何用程序方式建立如下的矩阵? 上机作业 教材 P35 的习题 1:如何用程序方式建立如下的矩阵? Matlab 演示