【3小时学会MATLAB】3 分支语句
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 清晰的描述待解决的问题
使程序的要求更加清楚具体
2. 定义程序需要的输入变量和返回的输出变量
做一个输入输出变量列表并对每个变量进行说明
3. 设计程序中需要用到的算法
分解 把问题分解成可以独立解决的若干个小任务 逐步完善 用伪代码描述出算法
“自上而下”的程序设计流程
4. 将算法转换为MATLAB语句
在M文件编辑调试器中 写程序!
嵌套式 if 条件结构
if expr_1 …… elseif expr_2 …… else …… end
if expr_1 …… else if expr_2 …… else …… end end
尽可能使用带 elseif 从句的单一 if 条件结构, 而不使用嵌套式 if 条件结构.
if 条件分支结构
¾ elseif 一个if结构中可以有若干个elseif从句(0或者 多个) ¾ else 一个if结构中最多有一个else从句(0或1个) ¾ end 每个if结构都要以关键字end结尾。注意此处 的关键字end和返回相应坐标的最大值的函数 end完全不同。
“自上而下”的程序设计流程
¾ otherwise
最多可以有一个 otherwise 从句 (0 or 1).
switch条件结构只执行一组命令
例 4 编写一个MATLAB程序,对给定的两个数a 和b及用户指定的运算符,完成相应的算术计 算,具体描述如下:
⎧a + b op = '+ ' ⎪ a − b op = '− ' ⎪ f (a, b, op ) = ⎨ ⎪ a * b op = '*' ⎪ ⎩ a / b op = '/'
try/catch 条件结构
try statement 1 statement 2 catch statement 1 statement 2 end
Catch Block Try Block
例 5 建立一个数组,显示用户的指定的元素。
例 6 检查下列程序是否存在问题。
控制 x- , y-轴
例 10 将前述四条曲线绘制在一个 2×2 的 子图系统中。
绘图线型的增强控制
plot ( x , y , ’LineSpec’ , ’PropertyName’ , value , … ) ¾ PropertyName
LineWidth MarkerEdgeColor MarkerFaceColor MarkerSize
将伪代码逐句转换为相应的MATLAB语句
5. 测试MATLAB程序
单元测试 每个小任务都要单独测试其工作正常 Alpha版 小任务集合成完整的程序 Beta版 程序员及其亲近人员进行全方位测试 以消除主要bug 最终版 让一些潜在用户进行更广泛的测试以 消除小bug
一个经典的if条件分支结构 分段函数
分支与循环
¾ 分支 根据条件执行指定部分的程序代码 ¾ 循环 使指定部分的程序代码反复执行
if 条件分支结构
if control_exp_1 statement 1 statement 2 elseif control_exp_2 statement 1 statement 2 else statement 1 statement 2 end Block 3 Block 2 Block 1
>> reshape(1:9,3,3) >= magic(3) >> 1:9 >= 1:10
特别要注意区分 == 和 =
¾ == 关系运算符,用于检测相等关系返回“逻辑 真”或“逻辑假”的结果. ¾ = 赋值运算符,将符号右边表达式的值赋予符 号左边的变量.
逻辑运算符
逻辑表达式
>> pi & exp(1) >> ’a’ & ’b’ >> ~eye(2) >> xor(eye(2),1) >> eye(2) | zeros(2) >> eye(2) & [1,2,0,3]
¾ \bf \it \rm
P194~195
¾ \fontname{ fontname } ¾ \fontsize{ fontsize } ¾ _{ xxx } ¾ \inf ¾ \\ \_ \neq \^ ^{ xxx } \circ \{ \} \leftarrow ¾ \alpha \beta \pi \sigma \Sigma
axis([xmin,xmax,ymin,ymax]) axis on axis off axis square axis equal axis normal axis tight v = axis “axis square” 等同于 “axis(‘square’)”. 只有那些 带有字符串参数的函数可以 视为命令。
¾ 设置断点调试程序
Set breakpoints, Run, Step In
嵌套式 if 条件结构
if expr_1 …… if expr_2 …… if expr_3 …… end end end 千万注意 if 和 end 关键 词的数量匹配. 嵌套结构中的每个 if 条 件结构都可以有自己的 elseif 和 else 从句.
switch 条件结构
switch switch_expr case case_expr_1 statement 1 statement 2 case case_expr_2 statement 1 statement 2 ...... otherwise statement 1 statement 2 end
Chapter 3
分支语句
本章我们将学习
¾ 关系运算符和逻辑运算符 ¾ 分支语句 ¾ “自上而下”的程序设计流程 ¾ 进一步的绘图方法
MATLAB中表示逻辑“真”与“假”
TRUE FALSE 非零值 零
关系百度文库算符
关系表达式
a1 op a2 若表达式为“真”,则返回值为1; 若表达式为“假”,则返回值为0. >> 2 > 4 >> 2 ~= 4 >> ’a’ > ’b’ “ 1:3 > 1”的 运行结果是 什么?
MATLAB Help Æ Search Æ Text Properties
文本字符串的增强控制
>> title(’\ity = A*\rmsin (\it\omegat)’) >> title(’\it\fontsize{20}y = A*\rmsin(\it\omegat)’) >> title(’\fontsize{20}\itE_{x} = E_{x0}e^{-jkx}’) >> title(’\fontsize{20}\nabla\times\itE = … -\partialD/\partialt’)
例 3 编写一段MATLAB程序用于计算如下分 段函数 f(x,y) .
⎧ x+ y ⎪ x + y2 ⎪ f ( x, y ) = ⎨ 2 ⎪x +y 2 2 ⎪ + x y ⎩
x ≥ 0, y ≥ 0 x ≥ 0, y < 0 x < 0, y ≥ 0 x < 0, y < 0
按“自上而下”流程解决问题
1. 描述任务 对用户给定的 x 和 y 的值,计算函数值 f(x,y) 2. 定义输入输出变量
x y -- First independent variable -- Second independent variable
fun -- Resulting function
3. 设计算法 分解 Read the input values of x and y Calculate f(x,y) Write out the result
>> plot ( t, sin(2*t), '-mo', 'LineWidth', 2, ... 'MarkerEdgeColor', 'k', 'MarkerFaceColor', ... [.49 1 .63],'MarkerSize',12)
文本字符串的增强控制
title(’string’)
当执行 hold on 命令后, 该状态被触发,直到执行 另一个 hold 或者 hold off 命令才会停止。
在多个绘图窗口中绘制多幅图像
¾ figure(n) 使第n个图像窗口激活为当前窗口 例 9 将例8中的四条正弦曲线分别绘制在四个 绘图窗口中。
子图
将多幅图像绘制在同一绘图窗口中 ¾ subplot(m,n,p)
逻辑函数
MATLAB Help Æ Search Æ is*
运算优先级
1. 算术运算
1) 括号 ( ) 2) 乘方 ^ .^ 3) 乘除法 * .* / ./ \ .\ 4) 加减法 + -
2. 关系运算 3. 逻辑运算
1) 逻辑非 ~ 2) 逻辑和 & 3) 逻辑或 |
从左到右
例 1 设a, b, c, d 定义如下,试推断以下表达 式的运行结果。
伪代码
4. 将算法改成MATLAB语句
5. 测试程序
使用各种不同的值测试程序 f(2,3) f(2,-3) f(-2,3) f(-2,-3) f(a,b)
有用的编程技巧
¾ 注释 % comments
定义行, 描述, 变量列表 每一段程序前和中的注释 Ctrl+R Ctrl+T
¾ M文件的调用
文件名 ( 不带 “.m”)
逐步完善
Prompt the user for the values of x and y Read x and y if x >= 0 and y >=0 fun Å x + y elseif x >=0 and y<0 fun Å x + y^2 elseif x < 0 and y >= 0 fun Å x^2 + y else fun Å x^2 + y^2 end Write out f(x,y)
Block 1
Block 2
Block 3
switch 条件结构
¾ switch
switch_expr 可以是一个标量或者字符型变量.
¾ case
可以有一个或多个 case 从句. 如果有多个switch_expr 的值都执行同一段代码,可以用花括号{ } 将这些值括起来. case { case_expr1, case_expr2, case_expr3 }
a=2
⎡1 −2 ⎤ b=⎢ ⎥ ⎣0 10 ⎦
⎡0 1⎤ c=⎢ ⎥ ⎣2 0⎦
>> ~(a > b) >> a > c & b > c >> c <= d
⎡ −2 1 2 ⎤ d=⎢ ⎥ ⎣ 0 1 0⎦
例 2 设a, b, c, d 定义如下,试推断以下表达 式的运行结果。 a=2 ; c=0 ; >> a * b ^ 2 > a * c >> isinf(a/b) >> isinf(a/c) >> isempty(c) >> a > b & ischar(d) b = -2 ; d = ’Test’ ;
极坐标图
polar ( theta , r , LineSpec )
未完待续……
例 7 绘制如下椭圆:
x2 y 2 + =1 4 9
查看这些 “axis *” 语 句产生的不同效果
一个坐标轴上绘制多条曲线
¾ plot(x1,y1,x2,y2,…); ¾ plot(x1,y1); hold on; plot(x2,y2); hold off;
例 8 描绘一个向右传播的正弦电磁波.
使程序的要求更加清楚具体
2. 定义程序需要的输入变量和返回的输出变量
做一个输入输出变量列表并对每个变量进行说明
3. 设计程序中需要用到的算法
分解 把问题分解成可以独立解决的若干个小任务 逐步完善 用伪代码描述出算法
“自上而下”的程序设计流程
4. 将算法转换为MATLAB语句
在M文件编辑调试器中 写程序!
嵌套式 if 条件结构
if expr_1 …… elseif expr_2 …… else …… end
if expr_1 …… else if expr_2 …… else …… end end
尽可能使用带 elseif 从句的单一 if 条件结构, 而不使用嵌套式 if 条件结构.
if 条件分支结构
¾ elseif 一个if结构中可以有若干个elseif从句(0或者 多个) ¾ else 一个if结构中最多有一个else从句(0或1个) ¾ end 每个if结构都要以关键字end结尾。注意此处 的关键字end和返回相应坐标的最大值的函数 end完全不同。
“自上而下”的程序设计流程
¾ otherwise
最多可以有一个 otherwise 从句 (0 or 1).
switch条件结构只执行一组命令
例 4 编写一个MATLAB程序,对给定的两个数a 和b及用户指定的运算符,完成相应的算术计 算,具体描述如下:
⎧a + b op = '+ ' ⎪ a − b op = '− ' ⎪ f (a, b, op ) = ⎨ ⎪ a * b op = '*' ⎪ ⎩ a / b op = '/'
try/catch 条件结构
try statement 1 statement 2 catch statement 1 statement 2 end
Catch Block Try Block
例 5 建立一个数组,显示用户的指定的元素。
例 6 检查下列程序是否存在问题。
控制 x- , y-轴
例 10 将前述四条曲线绘制在一个 2×2 的 子图系统中。
绘图线型的增强控制
plot ( x , y , ’LineSpec’ , ’PropertyName’ , value , … ) ¾ PropertyName
LineWidth MarkerEdgeColor MarkerFaceColor MarkerSize
将伪代码逐句转换为相应的MATLAB语句
5. 测试MATLAB程序
单元测试 每个小任务都要单独测试其工作正常 Alpha版 小任务集合成完整的程序 Beta版 程序员及其亲近人员进行全方位测试 以消除主要bug 最终版 让一些潜在用户进行更广泛的测试以 消除小bug
一个经典的if条件分支结构 分段函数
分支与循环
¾ 分支 根据条件执行指定部分的程序代码 ¾ 循环 使指定部分的程序代码反复执行
if 条件分支结构
if control_exp_1 statement 1 statement 2 elseif control_exp_2 statement 1 statement 2 else statement 1 statement 2 end Block 3 Block 2 Block 1
>> reshape(1:9,3,3) >= magic(3) >> 1:9 >= 1:10
特别要注意区分 == 和 =
¾ == 关系运算符,用于检测相等关系返回“逻辑 真”或“逻辑假”的结果. ¾ = 赋值运算符,将符号右边表达式的值赋予符 号左边的变量.
逻辑运算符
逻辑表达式
>> pi & exp(1) >> ’a’ & ’b’ >> ~eye(2) >> xor(eye(2),1) >> eye(2) | zeros(2) >> eye(2) & [1,2,0,3]
¾ \bf \it \rm
P194~195
¾ \fontname{ fontname } ¾ \fontsize{ fontsize } ¾ _{ xxx } ¾ \inf ¾ \\ \_ \neq \^ ^{ xxx } \circ \{ \} \leftarrow ¾ \alpha \beta \pi \sigma \Sigma
axis([xmin,xmax,ymin,ymax]) axis on axis off axis square axis equal axis normal axis tight v = axis “axis square” 等同于 “axis(‘square’)”. 只有那些 带有字符串参数的函数可以 视为命令。
¾ 设置断点调试程序
Set breakpoints, Run, Step In
嵌套式 if 条件结构
if expr_1 …… if expr_2 …… if expr_3 …… end end end 千万注意 if 和 end 关键 词的数量匹配. 嵌套结构中的每个 if 条 件结构都可以有自己的 elseif 和 else 从句.
switch 条件结构
switch switch_expr case case_expr_1 statement 1 statement 2 case case_expr_2 statement 1 statement 2 ...... otherwise statement 1 statement 2 end
Chapter 3
分支语句
本章我们将学习
¾ 关系运算符和逻辑运算符 ¾ 分支语句 ¾ “自上而下”的程序设计流程 ¾ 进一步的绘图方法
MATLAB中表示逻辑“真”与“假”
TRUE FALSE 非零值 零
关系百度文库算符
关系表达式
a1 op a2 若表达式为“真”,则返回值为1; 若表达式为“假”,则返回值为0. >> 2 > 4 >> 2 ~= 4 >> ’a’ > ’b’ “ 1:3 > 1”的 运行结果是 什么?
MATLAB Help Æ Search Æ Text Properties
文本字符串的增强控制
>> title(’\ity = A*\rmsin (\it\omegat)’) >> title(’\it\fontsize{20}y = A*\rmsin(\it\omegat)’) >> title(’\fontsize{20}\itE_{x} = E_{x0}e^{-jkx}’) >> title(’\fontsize{20}\nabla\times\itE = … -\partialD/\partialt’)
例 3 编写一段MATLAB程序用于计算如下分 段函数 f(x,y) .
⎧ x+ y ⎪ x + y2 ⎪ f ( x, y ) = ⎨ 2 ⎪x +y 2 2 ⎪ + x y ⎩
x ≥ 0, y ≥ 0 x ≥ 0, y < 0 x < 0, y ≥ 0 x < 0, y < 0
按“自上而下”流程解决问题
1. 描述任务 对用户给定的 x 和 y 的值,计算函数值 f(x,y) 2. 定义输入输出变量
x y -- First independent variable -- Second independent variable
fun -- Resulting function
3. 设计算法 分解 Read the input values of x and y Calculate f(x,y) Write out the result
>> plot ( t, sin(2*t), '-mo', 'LineWidth', 2, ... 'MarkerEdgeColor', 'k', 'MarkerFaceColor', ... [.49 1 .63],'MarkerSize',12)
文本字符串的增强控制
title(’string’)
当执行 hold on 命令后, 该状态被触发,直到执行 另一个 hold 或者 hold off 命令才会停止。
在多个绘图窗口中绘制多幅图像
¾ figure(n) 使第n个图像窗口激活为当前窗口 例 9 将例8中的四条正弦曲线分别绘制在四个 绘图窗口中。
子图
将多幅图像绘制在同一绘图窗口中 ¾ subplot(m,n,p)
逻辑函数
MATLAB Help Æ Search Æ is*
运算优先级
1. 算术运算
1) 括号 ( ) 2) 乘方 ^ .^ 3) 乘除法 * .* / ./ \ .\ 4) 加减法 + -
2. 关系运算 3. 逻辑运算
1) 逻辑非 ~ 2) 逻辑和 & 3) 逻辑或 |
从左到右
例 1 设a, b, c, d 定义如下,试推断以下表达 式的运行结果。
伪代码
4. 将算法改成MATLAB语句
5. 测试程序
使用各种不同的值测试程序 f(2,3) f(2,-3) f(-2,3) f(-2,-3) f(a,b)
有用的编程技巧
¾ 注释 % comments
定义行, 描述, 变量列表 每一段程序前和中的注释 Ctrl+R Ctrl+T
¾ M文件的调用
文件名 ( 不带 “.m”)
逐步完善
Prompt the user for the values of x and y Read x and y if x >= 0 and y >=0 fun Å x + y elseif x >=0 and y<0 fun Å x + y^2 elseif x < 0 and y >= 0 fun Å x^2 + y else fun Å x^2 + y^2 end Write out f(x,y)
Block 1
Block 2
Block 3
switch 条件结构
¾ switch
switch_expr 可以是一个标量或者字符型变量.
¾ case
可以有一个或多个 case 从句. 如果有多个switch_expr 的值都执行同一段代码,可以用花括号{ } 将这些值括起来. case { case_expr1, case_expr2, case_expr3 }
a=2
⎡1 −2 ⎤ b=⎢ ⎥ ⎣0 10 ⎦
⎡0 1⎤ c=⎢ ⎥ ⎣2 0⎦
>> ~(a > b) >> a > c & b > c >> c <= d
⎡ −2 1 2 ⎤ d=⎢ ⎥ ⎣ 0 1 0⎦
例 2 设a, b, c, d 定义如下,试推断以下表达 式的运行结果。 a=2 ; c=0 ; >> a * b ^ 2 > a * c >> isinf(a/b) >> isinf(a/c) >> isempty(c) >> a > b & ischar(d) b = -2 ; d = ’Test’ ;
极坐标图
polar ( theta , r , LineSpec )
未完待续……
例 7 绘制如下椭圆:
x2 y 2 + =1 4 9
查看这些 “axis *” 语 句产生的不同效果
一个坐标轴上绘制多条曲线
¾ plot(x1,y1,x2,y2,…); ¾ plot(x1,y1); hold on; plot(x2,y2); hold off;
例 8 描绘一个向右传播的正弦电磁波.