描述
1
数学软件Matlab
——编程基础(脚本)
2
本讲主要内容
M文件基本运算:算术、关系、逻辑简单的输入输出控制结构:顺序、选择、循环
3
Matlab编程入门
Matlab作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算能力和丰富的绘图功能,同时也可以与C、FORTRAN等高级语言一样进行程序设计利用Matlab的程序控制功能,将相关Matlab命令编成程序存储在一个文件中(M文件),然后在命令窗口中运行该文件,Matlab就会自动依次执行文件中的命令,直到全部命令执行完毕在Matlab程序设计中,要充分利用Matlab数据结构的特点,提高编程效率
Matlab编程简介
4
用Matlab语言编写的程序称为M文件M文件以.m为扩展名M文件是由若干Matlab命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法
两类重要的M文件(调用方式不同)
Script:脚本文件/命令文件Function:函数文件
M文件
M文件介绍
可以直接运行的M文件
5
M文件的创建的与编辑M文件是文本文件,可以用任何文本编辑器来建立和编辑,通常使用Matlab自带的M文件编辑器
M文件
新建一个M文件
菜单操作(File New M-File)命令操作(editM文件名)命令按钮(快捷键)
打开已有的M文件
菜单操作(File Open)命令操作(editM文件名)命令按钮(快捷键)双击M文件
6
编程示例
u=[0:pi/60:2*pi];v=[0:pi/60:pi];[U,V]=meshgrid(u,v);R=3;X=R*sin(V).*cos(U);Y=R*sin(V).*sin(U);Z=R*cos(V);mesh(X,Y,Z);axis equal;
编程方式:新建一个M文件myprg1.m,内容如下:
例:用mesh绘制半径为3的球
命令行方式:
>>u=[0:pi/60:2*pi];>>v=[0:pi/60:pi];>>[U,V]=meshgrid(u,v);>>R=3;>>X=R*sin(V).*cos(U);>>Y=R*sin(V).*sin(U);>>Z=R*cos(V);>>mesh(X,Y,Z);>>axis equal;
在命令窗口输入myprg1,即可执行该M文件
文件的命名规则与变量相同!
7
本讲主要内容
M文件基本运算:算术、关系、逻辑简单的输入输出控制结构:顺序、选择、循环
8
关系运算
比较大小,如果结论是真则返回1,否则返回0
注意==与=的区别
关系操作符可以比较两个同样大小的数组,或用来比较一个数组和一个标量,在后一种情况,标量和数组中的每一个元素相比较,比较结果与数组大小一样
关系运算符
9
例:
关系运算举例
>>2+2==4
>>2>3
>>A=[1 3 5; 2 0 6];>>B=[3 1 0; 2 4 6];>>A>=B
>>x&#61;[5 0; 4 2];>>x<4
10
逻辑运算
逻辑运算符
A&B等价于and(A,B)A|B等价于or(A,B)~A等价于not(A)
11
逻辑运算表
在Matlab中&#xff0c;0表示 “假”&#xff0c;非零表示 “真”
12
all(x)如果向量X中所有元素都非零&#xff0c;则返回1&#xff0c;否则返回0
若x为矩阵&#xff0c;则any和all按列运算&#xff0c;返回一个0-1向量
逻辑运算
逻辑运算函数&#xff1a;all、any
any(x)如果向量X中存在非零元素&#xff0c;则返回1&#xff0c;否则返回0
13
一些测试函数
>>isfinite(5)>>isinf(5)
测试函数
14
运算优先级
高
低
15
本讲主要内容
M文件基本运算&#xff1a;算术、关系、逻辑简单的输入输出控制结构&#xff1a;顺序、选择、循环
16
例&#xff1a;
A&#61;input(&#39;Please input A: &#39;)
数据的输入&#xff1a;input
A&#61;input(提示信息)
其中提示信息为字符串&#xff0c;该命令要求用户输入A的值(可以是数或字符串)
input
name&#61;input(&#39;What&#39;&#39;s your name?&#39;)
例&#xff1a;
输入字符串时必须带单引号单引号的输出&#xff1a;两个连续的单引号
17
disp(X)
输出变量X的值&#xff0c;X可以是数值矩阵或字符串一次只能输出一个变量
>>B&#61;[1 2 3; 4 5 6; 7 8 9];>>disp(B)
disp
数据的输出&#xff1a;disp
>>A&#61;&#39;Hello, Tom!&#39;;>>disp(A)
例&#xff1a;
18
fprintf
fprintf(format,variables)
数据的格式化输出&#xff1a;fprintf
按指定的格式将变量的值输出到屏幕或指定的文件format用来指定数据输出时采用的格式&#xff0c;包含&#xff1a;普通字符串、格式字符串、转义字符
格式字符串&#xff1a;以%开头&#xff0c;包括&#xff1a;
flags(可选)Widthandprecisionfields(可选)Conversioncharacter(格式说明符&#xff0c;必须)
19
格式说明符和转义字符
常见的格式说明符
常见的转义字符
20
fprintf
fprintf(&#39;a&#61;%-12.5f\n&#39;, pi)
以%开头
flag
field width
precision
格式说明符
-:左对齐&#43;:输出符号0:空白处添0空格:前面加一空格
字段宽度
小数点后的位数
21
fprintf
>>a&#61;&#39;Hello&#39;;>>b&#61;2.4;>>c&#61;100*pi;>>fprintf(&#39;a&#61;%s, b&#61;%f, c&#61;%e\n&#39;,a,b,c)
例&#xff1a;
format中的格式字符串要与输出变量一一对应
可以没有输出变量
>>fprintf(&#39;Today is Monday\n&#39;)
例&#xff1a;
22
本讲主要内容
M文件基本运算&#xff1a;算术、关系、逻辑简单的输入输出控制结构&#xff1a;顺序、选择、循环
23
程序控制结构有三种&#xff1a;顺序结构、选择结构和循环结构任何复杂的程序都由这三种基本结构组成
M文件控制流
按排列顺序依次执行各条语句&#xff0c;直到程序的最后
这是最简单的一种程序结构&#xff0c;一般涉及数据的输入输出、数据的计算或处理等
顺序结构
24
选择结构
选择结构根据给定的条件成立或不成立&#xff0c;分别执行不同的语句
选择结构的实现
if语句switch语句
25
单分支结构
if条件表达式语句组end
if条件语句
if条件表达式语句组1else语句组2end
双分支结构
26
if条件表达式1语句组1elseif条件表达式2语句组2... ...elseif条件表达式m语句组melse语句组end
多分支结构
if条件语句
27
根据表达式的不同取值&#xff0c;分别执行不同的语句
switch表达式case表达式1语句组1case表达式2语句组2... ...case表达式m语句组motherwise语句组end
switch语句
先计算表达式的值&#xff0c;然后将它依次与各个case指令后表达式的值进行比较&#xff0c;当比较结果为真时&#xff0c;就执行相应语句组&#xff0c;然后跳出switch结构。switch后面的表达式的值可以是一个标量或字符串。otherwise指令可以不出现。如果所有的比较结果都为假&#xff0c;则执行otherwise后面的语句组。
28
循环结构
循环结构根据给定的条件&#xff0c;重复执行指定的语句
循环结构的实现
for语句while语句
29
for循环变量&#61;取值列表循环体end
取值列表通常是一个向量将取值列表中的值依次赋给循环变量&#xff0c;直到全部取完&#xff0c;循环结束
for循环
不要在循环体内改变循环变量的值
为了提高代码的运行效率&#xff0c;应尽可能提高代码的向量化程度
30
for循环
clear;y&#61;0; n&#61;100;fork&#61;1:ny&#61;y&#43;1/(2*k-1);end
例&#xff1a;
已知 &#xff0c;当n&#61;100时&#xff0c;求y的值
例&#xff1a;计算s &#61; 1 &#43; 3 &#43; 10 - 28 &#43; 30 &#43; 50 - 12 - 8
clear;s&#61;0;x&#61;[1,3,10,-28,30,50,-12,-8];fork&#61;xs&#61;s&#43;k;end
31
循环语句可以嵌套使用通常&#xff0c;如果预先知道循环的次数&#xff0c;可采用for循环&#xff1b;如果预先无法确定循环次数&#xff0c;则可使用while循环。
while循环
while条件表达式循环体end
当条件表达式的值为真(非0)时&#xff0c;执行循环体语句
数论中的一个有趣问题&#xff1a;3n&#43;1问题&#xff1a;任取一个正整数&#xff0c;如果是偶数&#xff0c;用 2 除&#xff0c;如果是奇数&#xff0c;用 3 乘再加 1&#xff0c;反复这个过程&#xff0c;直到所得到的数为 1。问&#xff1a;是否存在使该过程永不中止的整数&#xff1f;
例&#xff1a;
32
while1n&#61;input(&#39;Please enter n (nonpositive quit): &#39;);ifn<&#61;0,break;endnt &#61; n;%将n的初始值记录下来whilen>1ifmod(n,2)&#61;&#61;0n &#61; n/2;elsen &#61; 3*n&#43;1;endfprintf(&#39; n&#61;%d \n&#39;, n);endfprintf(&#39; n&#61;%d is not we need! \n&#39;, nt);end
编程示例
33
这个例子给出了估计eps的一种方法。这里我们用大写EPS&#xff0c;因此系统中eps的值不会被覆盖。当EPS&#61;eps时&#xff0c;条件仍成立&#xff1b;而当EPS计算Matlab中eps值
while编程示例
k&#61;0; EPS&#61;1;while(1&#43;EPS) > 1EPS &#61; EPS/2;k &#61; k&#43;1;end
例&#xff1a;
34
break和continue
break语句用于终止循环的执行&#xff0c;即跳出最内层循环continue语句用于结束本次循环&#xff0c;进行下一次循环break和continue一般与if语句配合使用
其它流控制语句
return
return语句用于退出正在运行的脚本或函数&#xff0c;通常用在函数文件中
35
pause
暂停&#xff1a;pause
pause或pause(n)
若想强行终止正常运行的程序&#xff0c;可以使用Ctrl&#43;c
其中n是暂停的时间&#xff0c;以秒为单位若缺省&#xff0c;则将暂停程序&#xff0c;直到用户按任意键后继续
pause off屏蔽程序中所有pause的作用pause on打开pause的作用
36
首先由计算机随机产生一个[1,100]之间的一个整数&#xff0c;然后由用户猜测所产生的这个数。根据用户猜测的情况给出不同的提示&#xff0c;如果猜测的数大于产生的数&#xff0c;则显示Higher&#xff0c;小于则显示Lower&#xff0c;等于则显示You won&#xff01;&#xff0c;同时退出游戏。用户最多有7次机会。
编程示例
猜数游戏
例&#xff1a;
37
编程示例
x &#61; randi(100,1); %由计算机随机产生一个[1,100]的整数n &#61; 7; %有7次机会flag &#61; 1;fprintf(&#39;欢迎参加猜数游戏&#xff01;你共有%d次机会。\n&#39;, n);fprintf(&#39;请猜一个1到100之间的一个整数\n&#39;);for k &#61; 1 : nguess&#61;input(&#39;Enter your guess: &#39;);if guess xdisp(&#39;higher&#39;);elsedisp(&#39;Congratulation, You won!&#39;);flag &#61; 0; break;endfprintf(&#39;你还有%d次机会&#xff01;\n&#39;,n-k);endif flag&#61;&#61;1disp(&#39;Sorry, You lost!&#39;)end