第4章matlab程序流程控制_习题答案
MATLAB程序设计流程控制语句

顺序结构 判断语句(if…else…end) 分支语句 循环语句 其他流程控制函数
1
函数流程控制——顺序结构
顺序结构是最简单的程序结构,系统在编译程序时,按 照程序的物理位置顺序执行。这种程序容易编制,但是 结构单一,能够实现的功能有限。
r=1;
% the radius of the colume
20
Байду номын сангаас
函数流程控制——循环语句——while语句
while 语句用于将相同的代码块执行多次,但是次数并 不预先指定,当 while 的条件表达式为真时,执行代码块, 直到条件表达式为假。
while 语句的结构为: while 表达式 执行代码块 end
21
函数流程控制——循环语句——while语句
case 条件语句
执行代码块
case {条件语句1, 条件语句2, 条件语句3, ...}
执行代码块
otherwise 执行代码块
end
12
函数流程控制——分支语句
其中的分支语句为一个变量,可以是数值变量或者字符 串变量,如果该变量的值与某一条件相符,则执行相应 的语句,否则,执行 otherwise 后面的语句。在每一个 条件中,可以包含一个条件语句,可以包含多个条件, 当包含多个条件时,将条件以单元数组的形式表示。
elseif 表达式2
执行代码块2
elseif ......
......
......
else
执行代码块
end
其中可以包含任意多个 elseif 语句。
8
函数流程控制——判断语句
例1:输入一个字符,若为大写字母,则输出其对应的小 写字母;若为小写字母,则输出其对应的大写字母;若 为数字字符则输出其对应的数值,若为其他字符则原样 输出。
matlab程序设计与应用第二版习题答案

matlab程序设计与应用第二版习题答案Matlab程序设计与应用第二版习题答案Matlab是一种强大的数学软件,广泛应用于科学计算、数据分析和工程设计等领域。
《Matlab程序设计与应用》是一本经典的教材,对于学习和掌握Matlab编程语言具有重要的意义。
本文将为大家提供《Matlab程序设计与应用第二版》中部分习题的答案,帮助读者更好地理解和应用Matlab。
第一章:Matlab基础1.1 基本操作1. a = 3; b = 4; c = sqrt(a^2 + b^2); disp(c);2. x = linspace(-pi, pi, 100); y = sin(x); plot(x, y);3. A = [1 2 3; 4 5 6; 7 8 9]; B = [9 8 7; 6 5 4; 3 2 1]; C = A + B; disp(C);1.2 控制结构1. for i = 1:10disp(i);end2. n = 0; sum = 0; while sum < 100n = n + 1;sum = sum + n;enddisp(n);3. x = 5; if x > 0disp('x is positive');elseif x < 0disp('x is negative');elsedisp('x is zero');end第二章:向量和矩阵运算2.1 向量运算1. A = [1 2 3]; B = [4 5 6]; C = A .* B; disp(C);2. A = [1 2 3]; B = [4 5 6]; C = A ./ B; disp(C);3. A = [1 2 3]; B = [4 5 6]; C = dot(A, B); disp(C);2.2 矩阵运算1. A = [1 2 3; 4 5 6]; B = [7 8; 9 10; 11 12]; C = A * B; disp(C);2. A = [1 2 3; 4 5 6]; B = [7 8; 9 10; 11 12]; C = B * A; disp(C);3. A = [1 2 3; 4 5 6]; B = [7 8; 9 10; 11 12]; C = A .* B; disp(C); 第三章:函数和脚本文件3.1 函数1. function y = myfunc(x)y = x^2 + 3*x + 2;end2. function [y1, y2] = myfunc(x1, x2)y1 = x1^2 + 3*x1 + 2;y2 = x2^2 + 3*x2 + 2;end3. function [y1, y2] = myfunc(x)y1 = x^2 + 3*x + 2;y2 = sin(x);end3.2 脚本文件1. x = linspace(0, 2*pi, 100); y = sin(x); plot(x, y);2. x = linspace(-10, 10, 100); y = x.^2 + 3*x + 2; plot(x, y);3. x = linspace(0, 2*pi, 100); y1 = sin(x); y2 = cos(x); plot(x, y1, x, y2);通过以上习题的答案,读者可以对Matlab程序设计的基本语法和常用函数有一个初步的了解。
第四章 MATLAB的程序设计和调试

(5)检查cow是不是当前目录上的文件(先找 cow.p,然后是cow.m);假如不是,再往下 执行; (6)检查搜索路径上是否有cow存在(先找 cow.p,然后是cow.m)。 MATLAB将使用最先找到的那个cow。如 果一直找不到cow,MATLAB就给出错误提示 信息。
4.4 MATLAB控制流 4.4.1 for循环结构 for循环结构的语法形式: for x=array (commands) end 说明: • 循环体的执行次数由for指令后面的数组array的列数决 定。 • 在for后面的表达式中的数组可以伪任何合法的 MATLAB数组。 • 循环结构可以嵌套使用。 • 为了得到高效代码,应尽量提高代码的向量化程度,而 避免使用循环结构。 • 为了得到高效代码,在循环指令之前应尽量对数组进行 预定义。
说明: • 表达式有时由多个逻辑表达式组成,MATLAB 将尽可能少的检测子表达式的值。例如,表达式 为(子表达式1|表达式2),当MATLAB检测到 子表达式1的值为真时,它就认为表达式值为真, 而不再对表达式2进行检测。又如表达式1&表达 式2)当MATLAB检测到子表达式1的值为假时, 它就认为表达式值为假的,从而跳过该结构。 • if指令判决和break指令的配合使用,可以强制 终止for循环或while循环。
4.3.3 局部变量和全局变量 (1)局部(Local)变量 存在于函数空间内部的中间变量,产生于该 函数的运行过程中,其影响范围仅限于该函数本 身。 (2)全局(Global)变量 通过global指令,MATLAB也允许几个不 同的函数空间以及基本工作空间共享同一个变量。 这种被共享的变量称为全局变量。每个希望共享 全局变量的函数或MATLAB基本工作空间,必 须逐个用global对其具体变量加以专门定义。没 采用global定义的函数或基本工作空间,将无权 享用全局变量。
MATLAB中程序结构流程的控制

MATLAB中程序结构流程的控制MATLAB中程序结构流程的控制一. 顺序结构二.循环结构1. for -end :特点是循环判断条件通常是对循环次数的判断,即循环次数是预先设定的。
调用格式为:for 变量=表达式执行语句……执行语句end表达式是一个向量,可表示为m:s:n2. while-end:判断控制一般是逻辑判断语句,使用范围更大。
调用格式为:while 表达式执行语句……执行语句end表达式一般是关系运算式或逻辑运算式组成的逻辑判断语句,以确定循环是否继续。
通常表达式的值非零,即为逻辑真,程序继续循环,否则停止循环。
三. 选择结构if-else-end 又称为条件语句,根据表达式的情况判断是否满足条件来确定程序下一步的运行。
大致可分为三步进行:首先计算紧跟if后面表达式。
接着判断表达式计算结果,若结果为0,判断值为假;若结果为1,判断值为真。
然后若判断值为真,则执行其后的执行语句组;否则跳过,执行下一个条件表达式或者结束该选择语句。
调用格式为:1. if 表达式执行语句组end2. if 表达式执行语句组1else执行语句组2end3. if 表达式1执行语句组1elseif 表达式2执行语句组2elseif 表达式3执行语句组3……else执行语句组nend关键字if 或elseif后面的条件表达式为条件,通常是由关系运算或与逻辑运算式组成的逻辑判断语句,如果if 或elseif后面的表达式的值为真时,执行紧跟其后的语句内容,否则跳过去,并根据选择语句的表达形式执行后面的elseif表达式语句、跟在else后的执行语句或end语句。
四. 分支语句switch-case-end 又称为开关语句,使程序在不同的情况下进行相应的操作。
调用格式为:switch 表达式case 常量表达式1执行语句组1case 常量表达式2执行语句组2……case 常量表达式n执行语句组notherwise执行语句组n+1end在switch后面的表达式为开关条件,它可以是数字或字符串。
MATLAB流程控制脚本文件编制参考答案

1.判断三角形clca=input('');b=input('');c=input('');if a+b>c&&b+c>a&&a+c>aswitch 1case a==b==cdisp(1)case a==b|b==c|a==cdisp(2)otherwise disp(3)endelsedisp(0)end2、费波纳切数列:1、1、2、3、5、8、13……,其递推公式为:a(1)=a(2)=1,a(n)=a(n-1)+a(n-2)(n>=3)。
编程实现求n项的费波纳切数列。
要求:用M语言脚本文件实现;对输入的错误数据格式(如字符串、小数等)能够给出错误提示。
(函数)function y=feibonaqie(n)%求费波纳切数列a(1)=1;a(2)=1;%n=input('请输入项数n:');if(n==1)a(n)=1;elseif(n==2)a(n)=1;elseif(n>=3)i=3;while(i<=n)a(i)=a(i-1)+a(i-2);i=i+1;endendy=a(n);(脚本)clc;a(1)=1;n=input('请输入项数n :');if(n==1)a(n)=1;elseif(n==2)a(n)=1;elseif(n>=3)i=3;while(i<=n)a(i)=a(i-1)+a(i-2);i=i+1;endendsprintf('a(%u)=%u',n,a(n))9X9乘法表for i=1:9;A=[];for j=1:i;A=[A,sprintf('%d ×%d=%2d ',j,i,i*j)];enddisp(A)end3、古代的数学家祖冲之利用正多边形逼近的割圆法计算了常数pi 的值,请编程实现,要求精确到小数点后的第10位。
06-MATLAB程序流程控制

case {12,1,2}
season = 'Winter';
end
fprintf('Month %d ===> %s.\n', month, season);
end
Month 1 ===> Winter.
.
.
.
.
.
.
Month 12 ===> Winter.
MATLAB 程序设计
程序流程控制之范例十二
1/6
1/7
1/8
1/9
1/10
1/6
1/7
1/8
1/9
1/10
1/11
向量化编程: [I,J]=meshgrid(1:6,1:6);h=1./[I+J-1]
MATLAB 程序设计
程序流程控制之范例三
在下例中,for 循环列出先前产生的 Hilbert 矩阵的每一直行的平方和:
format short
MATLAB程序设计入门篇 程序流程控制
MATLAB 程序设计
6-1 循环指令
MATLAB 提供两种循环指令
for 循环(For Loop) while 循环(While Loop)
MATLAB 程序设计
Formats of For Loops
Format 1:
for 变数 = 向量
表达式
在上例中,矩阵 x 最初是一个 1×6 大小的零矩阵,在 for 循环中,变量 i 的值依次是 1 到 6,因此矩阵 x 的第 i 个元素的值依次被设为 1/i。
向量化编程一句可实现 x=1./[1:6]
我们接着可用分数形式来显示此数列:
>> format rat
matlab习题与解答
matlab习题与解答MATLAB 习题与解答习题1:利用if 语句根据不同的输入a 值,获取响应的计算因子,()()()[]()0.01,560.03,80.05,0,40.00,a or a a Lfactor a else==??>?=?∈ MatLab 代码:a=input('请输入a :');if a==5||a==6Lfactor=0.01elseif a>8Lfactor=0.03elseif a>=0&&a<=4Lfactor=0.05elseLfactor=0end运行结果:习题2:了解max 函数,执行v=[12 3.4 32 12 43]; [a n]=max(v),其中a 返回v 的最大值,n 返回v 中最大值a 的位置。
独立编制一段程序,实现matlab 内部函数max 的功能。
MatLab 代码:v=[12 3.4 32 12 43]; [a n]=max(v)a=v(1);n=1;for i=2:length(v)if a<v(i)< bdsfid="88" p=""></v(i)<>a=v(i);n=i;endend[a n]输出结果:习题3:执行vpa(pi,20), 解释vpa函数的功能MatLab 代码:vpa(pi,20)运行结果:vpa函数功能:matlab控制运算精度用的是digits和vpa这两个函数,digits用于规定运算精度,凡是用需要控制精度的,我们都对运算表达式使用vpa函数。
习题4:求解如下方程组:4x+2y-z=23x-y+2z=1012x+3y=8MatLab 代码:A=[4 2 -1;3 -1 2;12 3 0];b=[2;10;8];A\b运行结果:习题5:创建矩阵[-1 6 15 –7 -2 -4 -6]并选出其中非正元素组成一个新的向量s1,并对s1进行升序排列行程矩阵s2 。
第4章 MATLAB编程基础
(3)使用C-MEX文件:在必须使用for或 while循环体时,为了提高执行效率,可以将 循环部分的代码转化为C-MEX文件。 (4)尽量使用函数文件:在MATLAB中,函 数文件的效率一般比脚本文件的效率要高, 这是由于函数文件有自己的工作空间,执行 一次后仅保存程序运行必需的变量,并将函 数编译成伪代码,下次调用时提高了效率。
例:根据用户要求找出数组x中的最大值、最 小值或所有元素的和。
t=[0:100];x=exp(-t).*sin(t); %给定数组x require=input('Type min,max,or sum.','s') %用户输入要求 require=lower(require); switch require case 'min' %分支判断通过比较字符串完 成 minimum=min(x) case 'max' maximum=max(x) case 'sum' total=sum(x) otherwise disp('You have not entered a proper requirement') end
例:利用for循环求1!+2!+3!+ +5!的值
sum=0; for i=1:5 pdr=1; for k=1:i pdr=pdr*k; end sum=sum+pdr; end
e x 1 x x 2 2 x3 6 例:找出近似级数 中误差大于1%之前的最大的x值(精确到小数点后两
垂直条形图 水平条形图
误差条形图 y轴对数刻度 坐标
commet stairs
rose compass
Matlab for西安电子科技大学4-1
小结: 流程控制语句
3 种分支结构
if - else - end switch – case – end menu
2 种循环结构:
for - end 计数型循环 while - end 条件型循环
关于编程的几点说明
1 注意标量与数组(矩阵)的区别
例1:编程,由键盘入x, 计算下列分段函数 y=
{
… 循环体 …
缺省, 则步长为1
end
例1: 分析下列程序的功能
r=1 ; for k=1 : 20 r=r*k ; end disp(r)
计算 r=20!
例2: 利用循环产生A矩阵 5 0 0 0 0 0 5 0 0 0 0 0 5 0 0 0 0 0 5 0 0 0 0 0 5
A=zeros(5) ; for i=1 : 5 A(i,i)=5; end A
0 x≤0 1 0<x ≤1 2x 1<x ≤2 2x+5 x>2
例1:编程,键入x,计算下列分段函数
x=input('x=?'); if x<=0 y=0; elseif x<=1 y=1; elseif x<=2 y=2*x; else y=2*x+5; end disp(y)
y=
{
0 x≤0 1 0<x ≤1 2x 1<x ≤2 2x+5 x>2
… if A(: ,1)==0 A=A(1:10 , 2:10)
end :依此取A的 所有行下标
例2: 分析下列程序,问B=
? A=?
并说明程序的功能.
A=[ 0 0 3 0 5 0 0 6 7 B=all(A==0) if B(1) A(:,1)=[] end 4 5 8 ]; B = 1 A = 0 5 6
matlab第四版课后习题
一:原程序如下function [output] = order( input ,arguement)%UNTITLED 此处显示有关此函数的摘要 input为输入数组 argument为命令%排序if(nargin==1) %命令丢失output=sort(input);%升序elseswitch(arguement);case'up'%up 升序output=sort(input);case'down'%down 降序output=sort(input,'descend');endEnd以下几图均为验证:图一:升序命令图二:命令丢失;默认升序图三:降序命令MatLab排序函数sort函数的调用格式:sort(X) 功能:返回对向量X中的元素按列升序排列的新向量。
[Y, I] = sort(A, dim, mode) 功能:对矩阵A的各列或各行重新排序,I记录Y 中的元素在排序前A中位置,其中dim指明读A的列还是行进行排序。
若dim=1,则按列排序;若dim=2,则按行排序。
mode为排序的方式,取值'ascend'为升序,'descend'为降序。
2.原程序如下:主函数:finfunction [ output_ ] = fin()global ISEEDa=floor(10*rand);seed((floor(1000*rand)));output=((-1)^a)*random0(1)子函数:seed% function seed.mfunction seed(new_seed)new_seed = round(new_seed);ISEED = abs(new_seed);子函数:random0%function random0.mfunction ran = random0(n,m)global ISEED % Seed for random number generator%Calculate random valuesISEED = mod(8121*ISEED + 28411,134456);ran = ISEED/134456;结果如下图四:Matlab取整函数有: fix, floor, ceil, round.具体应用方法如下:fix朝零方向取整,如fix(-1.3)=-1; fix(1.3)=1;floor,顾名思义,就是地板,所以是取比它小的整数,即朝负无穷方向取整,如floor(-1.3)=-2;floor(1.3)=1;floor(-1.8)=-2,floor(1.8)=1ceil,与floor相反,它的意思是天花板,也就是取比它大的最小整数,即朝正无穷方向取整,如ceil(-1.3)=-1;ceil(1.3)=2;ceil(-1.8)=-1,ceil(1.8)=2round四舍五入到最近的整数,如round(-1.3)=-1;round(-1.52)=-2;round(1.3)=1round(1.52)=2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章 MATLAB程序流程控制 习题4 一、选择题 1.下列关于脚本文件和函数文件的描述中不正确的是( )。 A A.函数文件可以在命令行窗口直接运行 B.去掉函数文件第一行的定义行可转变成脚本文件 C.脚本文件可以调用函数文件 D.函数文件中的第一行必须以function开始 2.下列程序的输出结果是( )。D y=10; if y==10 y=20; elseif y>0 y=30 end disp(y) A.1 B.30 C.10 D.20 3.有以下语句: a=eye(5); for n=a(2:end,:) for循环的循环次数是( )。C A.3 B.4 C.5 D.10 4.设有程序段 k=10; while k k=k-1 end 则下面描述中正确的是( )。A A.while循环执行10次 B.循环是无限循环 C.循环体语句一次也不执行 D.循环体语句执行一次 5.有以下程序段: x=reshape(1:12,3,4); m=0; n=0; for k=1:4 if x(:,k)<=6 m=m+1; else n=n+1; end end 则m和n的值分别是( )。C A.6 6 B.2 1 C.2 2 D.1 2 6.调用函数时,如果函数文件名与函数名不一致,则使用( )。A A.函数文件名 B.函数名 C.函数文件名或函数名均可 D.@函数名 7.如果有函数声明行为“function [x,y,z]=f1(a,b,c)”,则下述函数调用格式中错误的是( )。B A.x=f1(a,b,c) B.[x,y,z,w]=f1(a,b,c) C.[x,b,z]=f1(a,y,c) D.[a,b]=f1(x,y,z) 8.执行语句“fn=@(x) 10*x;”,则 fn是( )。A A.匿名函数 B.函数句柄 C.字符串 D.普通函数 9.执行下列语句后,变量A的值是( )。D >> f=@(x,y) log(exp(x+y)); >> A=f(22,3); A.22,3 B.22 C.3 D.25 10.程序调试时用于设置断点的函数是( )。A A.dbstop B.dbclear C.dbcont D.dbstack 二、填空题 1.将有关MATLAB命令编成程序存储在一个扩展名为.m的文件中,该文件称为 。M文件 2.有语句“for k=[12;34]”引导的循环结构,其循环体执行的次数为 。1 3.MATLAB中用于控制不确定重复次数的循环语句为 ,若在循环执行过程中需要终止该循环时采用的语句为 。while…end,break 4.函数文件由 语句引导。在函数定义时,函数的输入输出参数称为 参数,简称 。在调用函数时,输入输出参数称为 参数,简称 。 function,形式,形参,实际,实参 5.在MATLAB中,函数文件中的变量是 变量。定义 变量是函数间传递信息的一种手段,可以用 命令定义。局部,全局,global 6.应用程序的错误有两类,一类是 错误,另一类是运行时的错误,即 错误。MATLAB程序调试方法有两种,一是利用 进行程序调试,二是利用 进行程序调试。 语法,逻辑,调试函数,调试工具 三、应用题 1.写出下列程序的输出结果。 s=0; a=[12,13,14;15,16,17;18,19,20;21,22,23]; for k=a for j=1:4 if rem(k(j),2)~=0 s=s+k(j); end end end s 2.分别用if语句和switch语句实现以下计算,其中a、b、c的值从键盘输入。
5.55.3,ln5.35.1,sin5.15.0,2xxcbxxbaxcbxaxyc
if语句: a=input('a='); b=input('b='); c=input('c='); x=input('x='); if <=x&x< y=a*x^2+b*x+c; elseif <=x&x< y=a*(sin(b))^c+x; elseif <=x&x< y=log(abs(b+c/x)); end y switch语句: a=input('a='); b=input('b='); c=input('c='); x=input('x='); switch fix(x*10) case num2cell(5:14) y=a*x^2+b*x+c; case num2cell(15:34) y=a*(sin(b))^c+x; case num2cell(35:54) y=log(abs(b+c/x)); otherwise disp('nsrdxcw') end y 3.产生20个两位随机整数,输出其中小于平均值的偶数。 x=fix(10+rand(20)*89); a=sum(x)/20; for i=1:20 if x(i)if rem(x(i),2)==0 disp(x(i)) end end end 4.输入20个数,求其中最大数和最小数。要求分别用循环结构和调用MATLAB的max函数、min函数来实现。 循环结构: for a=1:20 A(a)=input('请输入20个数:'); end A mi=A(1);ma=A(1); for i=1:20 if mi>A(i) mi=A(i); end if mama=A(i); end end disp(ma) disp(mi) max、min函数: for a=1:20 A(a)=input('请输入20个数:'); end A mi=min(A),ma=max(A) 5.已知 s=1+2+22+23+…+263 分别用循环结构和调用MATLAB的sum函数求s的值。 循环结构: s=0; for x=0:63 s=2^x+s; end disp(s) sum函数: i=0:63; f=2.^i; sum(f) 6.当n分别取100、1000、10000时,求下列各式的值:
(1) )2ln(1)1(41312111nn
(2) )4(7151311π (3) )31(4164116141n
(4) )2()12)(12()2)(2(756653443122πnnnn
要求分别用循环结构和向量运算(使用sum或prod函数)来实现。 (1): 循环结构: n=input('请输入n的值:'); s=0; for a=1:n s=s+(-1)^(a+1)/a; end s 向量运算: n=input('请输入n的值:'); a=1:n; f=(-1).^(a+1)./a; s=sum(f) (2): 循环结构: n=input('请输入n的值:'); s=0; for a=1:n; s=s+(-1)^(a+1)/(2*a-1); end s 向量运算: n=input('请输入n的值:'); a=1:n; f=(-1).^(a+1)./(2*a-1); s=sum(f) (3): 循环结构: n=input('请输入n的值:'); s=0; for a=1:n s=s+(1/4)^a; end s 向量运算: n=input('请输入n的值:'); a=1:n; f=(1/4).^a; s=sum(f) (4): 循环结构: n=input('请输入n的值:'); s=1; for a=1:n f=(2*a)^2/((2*a-1)*(2*a+1)); s=s*f; end s 向量运算: n=input('请输入n的值:'); a=1:n; f=(2*a).^2./((2*a-1).*(2*a+1)); s=prod(f) 7.编写一个函数文件,求小于任意自然数n的斐波那契(Fibnacci)数列各项。斐波那契数列定义如下:
121211(2)nnnfffffn
function f=Fibnacci(n) for i=1:n if i==1 f=1; elseif i==2 f=1; else f=Fibnacci(i-1)+Fibnacci(i-2); end end
n=input('n='); f=Fibnacci(n) 8.编写一个函数文件,用于求两个矩阵的乘积和点乘,然后在脚本文件中调用该函数。 function [C,D]=CJ(A,B) C=A*B; D=A.*B;