第四章 MATLAB 程序设计
《MATLAB_程序设计与应用》刘卫国高等教育出版社-第4章课后答案
第四章1.a=input('请输入一个4位数:');while (a<1000|a>9999)a=input('输入错误,请重新输入一个4位数:'); endb=fix(a/1000);c=rem(fix(a/100),10);d=rem(fix(a/10),10);e=rem(a,10);b=b+7;c=c+7;d=d+7;e=e+7;b=rem(b,10);c=rem(c,10);d=rem(c,10);e=rem(e,10);g=b;b=d;d=g;g=c;c=e;e=g;a=1000*b+100*c+10*d+e;disp(['加密后:',num2str(a)])2.逻辑表达式法:a=input('请输入a: ');b=input('请输入b: ');c=input('请输入c: ');x=0.5:1:5.5;x1=(x>=0.5&x<1.5);x2=(x>=1.5&x<3.5);x3=(x>=3.5&x<=5.5);y1=a.*(x.^2)+b.*x+c;y2=a*(sin(b)^c)+x;y3=log(abs(b+c./x));y=y1.*x1+y1.*x2+y3.*x3; disp(y)if语句法:a=input('请输入a: ');b=input('请输入b: ');c=input('请输入c: ');for x=0.5:1:5.5if x>=0.5 & x<1.5y=a.*(x.^2)+b.*x+celseif x>=1.5 & x<3.5y=a*(sin(b)^c)+xelseif x>=3.5 & x<5.5y=log(abs(b+c./x))endendswitch语句法:a=input('请输入a: ');b=input('请输入b: ');c=input('请输入c: ');for x=0.5:1:5.5switch floor(x/0.5)case {1,2}y=a.*(x.^2)+b.*x+c;case {3,4,5,6}y=a*(sin(b)^c)+x;case {7,8,9,10}y=log(abs(b+c./x)); enddisp(y)end3.x=fix(rand(1,20)*89)+10;x1=mean(x);n=find(rem(x,2)==0 & x<x1);disp(['小于平均数的偶数是:',num2str(x(n))]);4.(1)A=input('请输入20个数的一个行向量:');a=A(1);b=A(1);for m=Aif a>=ma=m;elseif b<=mb=m;endenddisp(['最小数是:',num2str(a)])disp(['最大数是:',num2str(b)])(2)A=input('请输入20个数的一个行向量:'); maxval=max(A)minval=min(A)5.s=0;for a=0:63c=2^a;s=s+c;enddisp(['2的0次方到63次方的和是:',num2str(s)])k=0:63n=2.^ks=sum(n)6.(1)sum1=0;for n=1:100x=(-1)^(n+1)*(1/n);sum1=sum1+x;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=0;for n=1:1000x=(-1)^(n+1)*(1/n);sum2=sum2+x;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=0;for n=1:10000x=(-1)^(n+1)*(1/n);sum3=sum3+x;enddisp(['当n取10000时:sum=',num2str(sum3)])(2)sum1=0;n1=0;for n=1:2:100x=(-1)^n1*(1/n);sum1=sum1+x;n1=n1+1;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=0;n2=0;for n=1:2:1000x=(-1)^n2*(1/n);sum2=sum2+x;n2=n2+1;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=0;n3=0;for n=1:2:10000x=(-1)^n3*(1/n);sum3=sum3+x;n3=n3+1;enddisp(['当n取10000时:sum=',num2str(sum3)])(3)sum1=0;for n=1:100x=1/(4^n);sum1=sum1+x;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=0;for n=1:1000x=1/(4^n);sum2=sum2+x;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=0;for n=1:10000x=1/(4^n);sum3=sum3+x;enddisp(['当n取10000时:sum=',num2str(sum3)])(4)sum1=1;for n=1:100x=4*n*n/(2*n-1)/(2*n+1);sum1=sum1*x;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=1;for n=1:1000x=4*n*n/(2*n-1)/(2*n+1);sum2=sum2*x;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=1;for n=1:10000x=4*n*n/(2*n-1)/(2*n+1);sum3=sum3*x;enddisp(['当n取10000时:sum=',num2str(sum3)])7.函数文件function f=fibnacci(n)if n==1 | n==2f=1;elsef=fibnacci(n-1)+fibnacci(n-2);end命令文件:shulie=[];for k=1:nshulie=[shulie fibnacci(k)];endshulie8.function [f1,f2]=juzhenji(x1,x2)f1=x1*x2;f2=x1.*x2;命令文件:clear alla=input('请输入一个矩阵:');b=input('请再输入一个矩阵:(注意:两矩阵要可以相乘)'); [f1,f2]=juzhenji(a,b);disp(f1)disp(f2)9.function sum=qiuhe(n,m)if n<=1sum=0;elsesum=n^m+qiuhe(n-1,m);end命令文件:clear ally=qiuhe(100,1)+qiuhe(50,2)+qiuhe(10,-1);disp(y)10.s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];for k=afor j=1:4if rem(k(j),2)~=0 s=s+k(j);endendendss =108(2)global xx=1:2:5;y=2:2:6;sub(y);xyfunction fun=sub(z) global xz=3*x;x=x+z;x =4 12 20 y =2 4 6。
第四章MATLAB程序设计
……
if <条件2>
break
end
……
end
2.continue语句
continue语句用于提前结束循环,可用于while和for语句结构中。
while <条件1>
……
if <条件2>
continue;
end
……
end
3.try
4.return
5.keyboard
6.pause
图4-2
在MATLAB中,选择语句结构由两种语句结构实现。
1.if语句
if语句是实现MATLAB选择结构的最主要形式,其基本格式为:
if表达式
程序模块1
else
程序模块2
end
在这里,如果表达式的值为真(非零值),则执行程序模块1,然后跳过程序模块2,向下执行后续语句;如果表达式的值为假(零值),则执行程序模块2,然后向下执行。
程序end
2.switch语句
虽然多分支if语句可以实现多重选择,但如果分支过多,则嵌套的if语句的层次就会很多,使程序可读性差,而使用swith语句就比较简洁明了,其格式为:
switch表达式
case数值1
程序模块1
case数值2
程序模块2
。。。
otherwise
程序模块n
其格式为:
for循环变量=起始值:步长:终止值
循环体
end
其中步长值可以在正实数和负实数范围内任意指定,默认值为1.对于正数,当循环变量的值大于终止值时,循环结束;对于负数,当循环变量的值小于终止值时,循环结束。
2.while语句循环结构
matlab第四章课件
4.1.1 M文件的分类
M文件是由若干 Matlab 命令组合在一起构成的,它可 以完成某些操作,也可以实现某种算法
事实上,Matlab 提供的内部函数以及各种工具箱,都是利用 Matlab 语言编写的 M文件 用户也可以结合自己的工作需要,开发自己的程序或工具箱
M文件根据调用方式的不同可以分为两类: Script file:命令文件/脚本文件 Function file:函数文件
例2 输入x,y的值,并将它们的值互换后输出(swap.m)。 x=input('Input x please.'); y=input('Input y please.'); z=x; x=y; y=z; disp(x); disp(y); 例3 求一元二次方程ax2 +bx+c=0的根(root.m)。 a=input('a=?'); b=input('b=?'); c=input('c=?'); d=b*b-4*a*c; x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)]; disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);
例如:
s=0; a=[12 13 14;15 16 17;18 19 20;21 22 23] for k=a s=s+k; end disp(s); 该程序的功能是求矩阵各行元素之和,执行结果是: 39 48 57 66
while语句
while expr (条件) statement(循环体语句) end 若expr成立,则执行循环体的内容,执行后 再判断条件是否为真,如果不成立则跳出循环体。
第4章MATLAB程序设计
例4-12 求[100,200]之间第一个能被21整除的整数。 程序如下:
for n=100:200 if rem(n,21)~=0
continue end break end n
28
4.循环的嵌套 如果一个循环结构的循环体又包括一个循环结构,就
称为循环的嵌套,或称为多重循环结构。实现多重循环 结构仍用前面介绍的3种循环语句。因为任一循环语句 的循环体部分都可以包含另一个循环语句。
1.for语句 for语句的格式为:
for 循环变量=表达式1:表达式2:表达式3 循环体语句
end 其中表达式1的值为循环变量的初值,表达式2的值 为步长,表达式3的值为循环变量的终值。步长为1 时,表达式2可以省略。
21
例4-8 一个三位整数各位数字的立方和等于该数本 身则称该数为水仙花数。输出全部水仙花数。
end 执行过程是依次将矩阵的各列元素赋给循环变量,
然后执行循环体语句,直至各列元素处理完毕。 例3-10 写出下列程序的执行结果。
s=0;
a=[12,13,14;15,16,17;18,19,20;21,22,23];
for k=a
s=s+k;
end
disp(s');
24
2.while语句 while语句的一般格式为: while (条件) 循环体语句 end 其执行过程为:若条件成立,则执行循环体语句,执 行后再判断条件是否成立,如果不成立则跳出循环。
2500≤price<5000 10%折扣
5000≤price 14%折扣
输入所售商品的价格,求其实际销售价格。
17
程序如下:
price=input('请输入商品价格');
《MATLAB_程序设计与应用》刘卫国高等教育出版社-第4章课后答案
第四章1.a=input('请输入一个4位数:');while (a<1000|a>9999)a=input('输入错误,请重新输入一个4位数:'); endb=fix(a/1000);c=rem(fix(a/100),10);d=rem(fix(a/10),10);e=rem(a,10);b=b+7;c=c+7;d=d+7;e=e+7;b=rem(b,10);c=rem(c,10);d=rem(c,10);e=rem(e,10);g=b;b=d;d=g;g=c;c=e;e=g;a=1000*b+100*c+10*d+e;disp(['加密后:',num2str(a)])2.逻辑表达式法:a=input('请输入a: ');b=input('请输入b: ');c=input('请输入c: ');x=0.5:1:5.5;x1=(x>=0.5&x<1.5);x2=(x>=1.5&x<3.5);x3=(x>=3.5&x<=5.5);y1=a.*(x.^2)+b.*x+c;y2=a*(sin(b)^c)+x;y3=log(abs(b+c./x));y=y1.*x1+y1.*x2+y3.*x3; disp(y)if语句法:a=input('请输入a: ');b=input('请输入b: ');c=input('请输入c: ');for x=0.5:1:5.5if x>=0.5 & x<1.5y=a.*(x.^2)+b.*x+celseif x>=1.5 & x<3.5y=a*(sin(b)^c)+xelseif x>=3.5 & x<5.5y=log(abs(b+c./x))endendswitch语句法:a=input('请输入a: ');b=input('请输入b: ');c=input('请输入c: ');for x=0.5:1:5.5switch floor(x/0.5)case {1,2}y=a.*(x.^2)+b.*x+c;case {3,4,5,6}y=a*(sin(b)^c)+x;case {7,8,9,10}y=log(abs(b+c./x)); enddisp(y)end3.x=fix(rand(1,20)*89)+10;x1=mean(x);n=find(rem(x,2)==0 & x<x1);disp(['小于平均数的偶数是:',num2str(x(n))]);4.(1)A=input('请输入20个数的一个行向量:');a=A(1);b=A(1);for m=Aif a>=ma=m;elseif b<=mb=m;endenddisp(['最小数是:',num2str(a)])disp(['最大数是:',num2str(b)])(2)A=input('请输入20个数的一个行向量:'); maxval=max(A)minval=min(A)5.s=0;for a=0:63c=2^a;s=s+c;enddisp(['2的0次方到63次方的和是:',num2str(s)])k=0:63n=2.^ks=sum(n)6.(1)sum1=0;for n=1:100x=(-1)^(n+1)*(1/n);sum1=sum1+x;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=0;for n=1:1000x=(-1)^(n+1)*(1/n);sum2=sum2+x;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=0;for n=1:10000x=(-1)^(n+1)*(1/n);sum3=sum3+x;enddisp(['当n取10000时:sum=',num2str(sum3)])(2)sum1=0;n1=0;for n=1:2:100x=(-1)^n1*(1/n);sum1=sum1+x;n1=n1+1;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=0;n2=0;for n=1:2:1000x=(-1)^n2*(1/n);sum2=sum2+x;n2=n2+1;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=0;n3=0;for n=1:2:10000x=(-1)^n3*(1/n);sum3=sum3+x;n3=n3+1;enddisp(['当n取10000时:sum=',num2str(sum3)])(3)sum1=0;for n=1:100x=1/(4^n);sum1=sum1+x;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=0;for n=1:1000x=1/(4^n);sum2=sum2+x;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=0;for n=1:10000x=1/(4^n);sum3=sum3+x;enddisp(['当n取10000时:sum=',num2str(sum3)])(4)sum1=1;for n=1:100x=4*n*n/(2*n-1)/(2*n+1);sum1=sum1*x;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=1;for n=1:1000x=4*n*n/(2*n-1)/(2*n+1);sum2=sum2*x;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=1;for n=1:10000x=4*n*n/(2*n-1)/(2*n+1);sum3=sum3*x;enddisp(['当n取10000时:sum=',num2str(sum3)])7.函数文件function f=fibnacci(n)if n==1 | n==2f=1;elsef=fibnacci(n-1)+fibnacci(n-2);end命令文件:shulie=[];for k=1:nshulie=[shulie fibnacci(k)];endshulie8.function [f1,f2]=juzhenji(x1,x2)f1=x1*x2;f2=x1.*x2;命令文件:clear alla=input('请输入一个矩阵:');b=input('请再输入一个矩阵:(注意:两矩阵要可以相乘)'); [f1,f2]=juzhenji(a,b);disp(f1)disp(f2)9.function sum=qiuhe(n,m)if n<=1sum=0;elsesum=n^m+qiuhe(n-1,m);end命令文件:clear ally=qiuhe(100,1)+qiuhe(50,2)+qiuhe(10,-1);disp(y)10.s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];for k=afor j=1:4if rem(k(j),2)~=0 s=s+k(j);endendendss =108(2)global xx=1:2:5;y=2:2:6;sub(y);xyfunction fun=sub(z) global xz=3*x;x=x+z;x =4 12 20 y =2 4 6。
第4章 MATLAB程序流程控制_习题答案
第4章 MATLAB程序流程控制习题4一、选择题1.下列关于脚本文件和函数文件的描述中不正确的是()。
A A.函数文件可以在命令行窗口直接运行B.去掉函数文件第一行的定义行可转变成脚本文件C.脚本文件可以调用函数文件D.函数文件中的第一行必须以function开始2.下列程序的输出结果是( )。
Dy=10;if y==10y=20;elseif y>0y=30enddisp(y)A.1 B.30 C.10 D.203.有以下语句:a=eye(5);for n=a(2:end,:)for循环的循环次数是()。
CA.3 B.4 C.5 D.104.设有程序段k=10;whilekk=k—1end则下面描述中正确的是()。
AA.while循环执行10次B.循环是无限循环C.循环体语句一次也不执行D.循环体语句执行一次5.有以下程序段:x=reshape(1:12,3,4);m=0;n=0;for k=1:4if x(:,k)<=6m=m+1;elsen=n+1;endend则m和n的值分别是()。
CA.6 6 B.2 1 C.2 2 D.1 26.调用函数时,如果函数文件名与函数名不一致,则使用()。
A A.函数文件名B.函数名C.函数文件名或函数名均可D.@函数名7.如果有函数声明行为“function [x,y,z]=f1(a,b,c)”,则下述函数调用格式中错误的是()。
BA.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是()。
AA.匿名函数B.函数句柄C.字符串D.普通函数9.执行下列语句后,变量A的值是( )。
D>> f=@(x,y) log(exp(x+y));〉〉 A=f(22,3);A.22,3B.22 C.3 D.2510.程序调试时用于设置断点的函数是()。
matlabch04matlab程序设计基础知识
MATLAB数组操作
单击此处添加副标题
数组创建与访问
创建数组
使用方括号`[]`创建数组,元素之间用空格或 逗号分隔。例如,`A = [1 2 3; 4 5 6]`创建一 个2x3的数组。
访问数组元素
通过下标访问数组元素,下标从1开始。例如, `A(1,2)`访问数组A的第1行第2列元素。
访问数组子集
matlabch04matlab 程序设计基础知识
添加副标题
汇报人姓名
目
录
单击添加文本
单击添加文本
MATLAB程序设计概述
单击此处添加副标题
MATLAB简介
23% Option 1
M AT L A B 定 义
MATLAB是Matrix Laboratory (矩阵实验室)的缩写,是一款由 MathWorks公司开发的商业数学 软件。
工程和科学计算 MATLAB被广泛应用于工程和科学计算 领域,如信号处理、图像处理、控制系
统设计等。 算法开发与仿真 MATLAB支持算法开发和仿真,可用 于机器学习、深度学习、优化算法等
领域。
数据分析与可视化
MATLAB提供了丰富的数据分析和可 视化工具,可用于数据挖掘、统计分 析、数据可视化等方面。
数据类型 MATLAB支持多种数据类型,包括数值型(整数 和浮点数)、字符型、逻辑型、结构体和单元数 组等。
变量赋值 使用等号(=)进行赋值,例如`x = 5;`将数值5 赋给变量x。
运算符与表达式
用于比较两个值的大小关系,如等于 (==)、不等于(~=)、大于 (>)、小于(<)等。
MATLAB按照运算符优先级和结合性 规则对表达式进行求值。
02
01
MATLAB程序设计基础教程(刘国良)-第4章
函数
体
第4章 M脚本与M函数
2.脚本M文件 脚本文件也叫命令文件,是独立执行的文件,它不接受输 入参数,不返回任何值,而是代码的结合,该方法允许用户将 一系列MATLAB命令输入到一个简单的脚本“.m”文件中,只 要在MATLAB命令窗口中执行该文件,则会依次执行该文件中 的命令。 脚本M文件中包含一族由MATLAB语言所支持的语句,它类 似于DOS下的批处理文件,它的执行方式很简单,用户只需在 MATLAB 的提示符“>>”下键入该M文件的文件名,这样 MATLAB就会自动执行该M文件中的各条语句,并将结果直接返 回到MATLAB 的工作空间。
第4章 M脚本与M函数
3.块注释 在 MATLAB 5以前的版本中,注释是逐行进行的,采用百 分号(%)进行标记。逐行注释不利于用户增加和修改注释内容。 在MATLAB 5及以后的版本中,用户可以使用“%{”和“%}” 符号进行块注释,“%{”和“%}”分别代表注释块的起始和 结束。
第4章 M脚本与M函数
第4章 M脚本与M函数
在使用脚本文件时需要注意一点:如果当前工作区中存在 与该脚本同名的变量,则当输入该文件名时,系统将其作为变 量名执行。
MATLAB中有一个专门用于寻找“.m”文件的路径搜索器。 “.m”文件是以目录和文件夹的方式分布于文件系统中的,一 部分“.m”文件的目录是MATLAB的子目录,由于MATLAB的一 切操作都是在它的搜索路径,包括当前路径中进行的,因此如 果调用的函数在搜索路径之外,MATLAB就会认为此函数不存 在。
第4章 M脚本与M函数
4.1.2 M文件的建立、运行与命名规则 M文件的语法类似于一般高级语言,是一种程序化的编程
语言,但是与传统的高级语言相比,M文件又有其特点。它只 是一个简单的ASCII码型文本文件,因此,它的语法比一般的 高级语言要简单,程序也容易调试,并具有很好的交互性。
第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程序设计》第4章数组及应用
0x0012FF68 a[0] 0x0012FF6C a[1] 0x0012FF70 a[2] 0x0012FF74 a[3]
数组元素
0x0012FF78 a[4]
0x0012FF7C a[5]
8
一维数组在内存中的存储形式
说明:
(1)数组名a表示内存首地址,是地址常量。
(2)数组a中每个数组元素占的内存空间根据 数组类型确定,整个数组占的内存为:数组元 素个数乘以每个元素所占内存空间如: int a[10]; 4×10=40 float b[20]; 4×20=80 double c[5]; 8×5=40 char d[8]; 1×8=8
第4章 数组
教学内容
数组的定义及应用
字符串处理函数
几个常用算法:排序算法(选择排序、
冒泡排序)
1
第4章 数组
重点、难点
数组的定义及应用
常用算法的设计(选择排序、
冒泡排序)
2
第4章 数组
教学目标
熟练掌握数组的定义及应用
掌握字符数组的定义及应用
掌握常用的字符串处理函数
熟练掌握几个常用算法:排序
算法(选择排序、冒泡排序)
分析:所谓转置就是将矩阵的行列互换,即将 a矩阵 的a[i][j]元素变成b矩阵的b[j][i]。
24
#include <iostream> using namespace std; int main() { int a[3][4] ={{1,2,3,4},{3,4,5,6},{5,6,7,8}}; int b[4][3],i,j; for(i=0;i<3;i++) //输出二维数组a[3][4] { for(j=0;j<4;j++) cout<<a[i][j]<<" "; cout<<endl; } for(i=0;i<4;i++) //将矩阵a转置给矩阵b for(j=0;j<3;j++) b[i][j]=a[j][i]; for(i=0;i<4;i++) //输出二维数组b[4][3] { for(j=0;j<3;j++) cout<<b[i][j]<<" "; cout<<endl; } return 0;}
MATLAB程序设计教程
MATLAB程序设计教程第一章:MATLAB简介1.1 MATLAB的定义和特点1.2 MATLAB的应用领域1.3 MATLAB的优势和劣势第二章:MATLAB基础知识2.1 MATLAB的安装和启动2.2 MATLAB界面介绍和常用功能2.3 MATLAB的数据类型和变量2.4 MATLAB的基本运算符和表达式2.5 MATLAB的控制流程语句第三章:MATLAB函数与脚本文件3.1 MATLAB函数的定义和调用3.2 MATLAB脚本文件的创建和运行3.3 MATLAB函数和脚本文件的参数传递3.4 MATLAB函数和脚本文件的调试技巧第四章:MATLAB图形绘制4.1 MATLAB图形绘制的基本函数4.2 MATLAB图形绘制的详细参数设置4.3 MATLAB图形的保存和导出第五章:MATLAB矩阵运算5.1 MATLAB中矩阵的创建和索引5.2 MATLAB中矩阵的运算和操作5.3 MATLAB中常用的矩阵函数第六章:MATLAB数值计算6.1 MATLAB中数值计算的基本函数6.2 MATLAB中数值计算的高级功能6.3 MATLAB中数值计算的常见问题和解决方法第七章:MATLAB符号计算7.1 MATLAB中符号计算的基本概念7.2 MATLAB中符号计算的基本函数7.3 MATLAB中符号计算的应用领域第八章:MATLAB应用案例8.1 MATLAB在工程学科中的应用案例8.2 MATLAB在科学研究中的应用案例8.3 MATLAB在数据分析中的应用案例第九章:MATLAB拓展与应用9.1 MATLAB与其他编程语言的结合9.2 MATLAB的工具箱和函数库9.3 MATLAB的二次开发和应用扩展结语:MATLAB作为一种强大的科学计算软件,具备广泛的应用领域和丰富的功能模块,通过本教程的学习,读者可以系统地掌握MATLAB的基本知识和应用技巧,并能够利用MATLAB解决实际问题。
第4章MATLAB程序设计
例 求一个值n,使n!最大但小于1050。 MATLAB程序如下: %初始化 r=1;k=1; 执行后结果如下: %做循环 The 41!Is while r<1e50 3.345253e+049 r=r*k; k=k+1; end k=k-1;r=r/k;k=k-1; % 输出结果 disp(['The',num2str(k),'!is',num2str(r)])
4.2.3 循环结构 for 循环:可完成指定次重复的循环,且在循环开 始之前,就知道代码重复的次数。
while 循环:while语句可完成不定次重复的循 环,与for语句不同,每次循环前要先判断条件 是否满足,再决定循环是否进行。
例 利用rand函数产生10个随机数,然后利用嵌套 for循环进行从小到大排序。
2 1.5 1 0.5 0 150 100 50
然后通过调用函数fun计算出z, 并利用mesh绘制出网格线。 编写的脚本文件如下: % 坐标系准备 x=[0:.02:2]; y=[-2:.02:0]; % 调用函数计算函数值 z=fun(x,y); % 绘图 figure mesh(z)
150 100 50
4.3.2 函数的调用 函数调用的一般格式如下: [输出实参表] = 函数名(输入实参表) 要注意的是,函数调用时各实参出现的顺 序、个数,应与函数定义时形参的顺序、 个数一致,否则会出错。函数调用时,先 将实参传递给相应的形参,从而实现参数 传递,然后再执行函数的功能。
例 对于函数
z ( x 1)2 ( y 1)2
fprintf函数中,format字符中常常会使用到一些特 殊字符来灵活的实现一些显示功能 format string 结果 %d %e %f %g 把值作为整数来处理 用科学记数法来显示数据 用于格式化浮点数,并显示这个 数 用科学记数格式,或浮点数格式, 根据那个表示的数位短,显示那 个 转到新的一行
第4章-MATLAB程序设计
第四章 MATLAB程序设计
例如,编写一个测试函数,要求当输入为一个变量时, 计算出这一变量的平方;当输入为两个变量时,求出这两个 变量的乘积。我们可编写以下函数文件:
function c=testargl(a,b) if (nargin==1)
c=a.^2; elseif (nargin==2)
m=n; end s1=sum(x); s2=sum(x.^2);
第四章 MATLAB程序设计
mean1=s1/m; stdev=sqrt(s2/m-mean1.^2); 函数文件stat2.m function [mean1,stdev]=stat2(x) % 求阵列x的平均值和标准差 % 调用格式为 % [mean,stdev]=stat2(x) % [m,n]=size(x); if m==1
第四章 MATLAB程序设计
所有在函数中使用和生成的变量都为局部变量(除非利用 global语句定义),这些变量值只能通过输入和输出变量进行 传递。因此,在调用函数时应通过输入变量将参数传递给函 数;函数调用返回时也应通过输出变量将运算结果传递给函 数调用者;在函数中产生的其它变量在返回时被全部清除。
这些问题在函数文件中不复存在,MATLAB通过实参与 形参一一对应的方式来实现函数的调用,这极大地方便了程 序设计。
第四章 MATLAB程序设计
例如,编写出求取平均值的脚本文件stat1.m,再编写出求 取标准差的函数文件stat2.m。程序如下:
脚本文件stat1.m % 脚本文件 % 求阵列x的平均值和标准差 % [m,n]=size(x); if m==1
第四章 MATLAB程序设计
第四章 MATLAB程序设计
4.1 MATLAB程序设计初步 4.2 流程控制 4.3 用户参数交互输入 4.4 程序设计技术 4.5 MATLAB程序调试 4.6 语言结构与调试函数 习题
第04章_MATLAB程序设计_参考解答
第 4 章:MATLAB 程序设计
第4章
教材 P81 习题四
MATLAB 程序设计
1. 从键盘上输入一个 4 位整数, 按如下规则加密后输出。 加密规则: 每位数字都加上 7, 然后用和除以 10 的余数取代该数字;再把第一位与第三位交换,第二位与第四位交换。 答:程序设计: clear all; close all; clc; a=input('请输入一个 4 位整数:'); while (a<1000|a>9999) a=input('输入错误,不是一个 4 位整数,请输入一个 4 位整数:'); end b=fix(a/1000); %千位数字(第四位数字) c=rem(fix(a/100),10); %百位数字(第三位数字) d=rem(fix(a/10),10); %十位数字(第二位数字) e=rem(a,10); %个位数字(第一位数字) b=rem(b+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 c=rem(c+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 d=rem(d+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 e=rem(e+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 g=c;c=e;e=g; %将第一位和第三位交换 g=b;b=d;d=g; %将第二位和第四位交换 a=1000*b+100*c+10*d+e; %a 为加密后的整数 disp(['加密后:', num2str(a)]) 2. 分别用 if 语句和 switch 语句实现以下计算,其中 a,b,c 的值从键盘输入。 ⎧ ⎪ax 2 + bx + c, 0.5 ≤ x < 1.5 ⎪ ⎪ y = ⎨a sin c b + x, 1.5 ≤ x < 3.5 ⎪ c ⎪ln b + , 3.5 ≤ x < 5.5 x ⎪ ⎩ 答:程序设计: (1) 用 if 语句来实现: clear all; close all; clc; a=input('请输入 a: '); b=input('请输入 b: '); c=input('请输入 c: '); for x=0.5:1:5.5 if x>=0.5 & x<1.5 y=a.*(x.^2)+b.*x+c elseif x>=1.5 & x<3.5 y=a*(sin(b)^c)+x elseif x>=3.5 & x<5.5
MATLAB程序设计教程
MATLAB程序设计教程MATLAB程序设计教程本文档旨在向初学者介绍MATLAB程序设计的基础知识和技巧。
从安装MATLAB开始,到编写简单的程序和函数,再到更高级的数据处理和图形绘制技巧,我们会逐步深入讲解,以帮助读者掌握MATLAB编程的基本概念和技术。
第一章安装MATLAB- MATLAB的和安装步骤- 注册MATLAB账号- 软件环境需求第二章 MATLAB基础知识- MATLAB界面概览- 基本操作和快捷键- 变量和数据类型- 向量和矩阵运算- 控制流程语句第三章编写简单的程序- 编辑和运行脚本文件- 使用注释和帮助文档- 变量和运算符- 用户输入和输出- 错误处理第四章 MATLAB函数- 函数的定义和调用- 函数输入和输出- 匿名函数- 递归函数第五章数据处理和分析- 数据加载和保存- 矩阵操作和线性代数- 统计和概率分析- 插值与拟合- 数据可视化第六章图形绘制- 2D和3D绘图函数- 坐标轴设置和标签- 图例和颜色设置- 动态图形第七章高级技巧与应用- 调试和优化MATLAB代码- 编写自定义工具箱- 与其他编程语言的交互- 并行计算和分布式计算- MATLAB的工程应用本文档涉及附件:附件1、示例程序代码附件2、数据集样本本文所涉及的法律名词及注释:1.版权:指文学、艺术、音乐、电影、软件等创造性作品的独占权。
2.许可证:指授权他人使用自己拥有的知识产权的合法证明文件。
3.商标:指为区别同一种类商品和服务的商家而使用的标志、名称或字词等。
第四章 MATLAB程序设计
第二节 选择结构
2.1 if 语句
在MATLAB中,if 语句有三种格式
1、单分支if 语句
语句格式为: if 条件 语句组 end 当逻辑表达式的值为真时,执行该结 构中的执行语句,执行完之后继续向 下进行;若为假,则跳过结构中的内 容,向下执行。
实例分析
例4.4 当x是整数矩阵时,输出x的值。
程序3:
x=input('输入x='); y=cos(x+1)+sqrt(x*x+1);
u=cos(x+1);
v= sqrt(x*x+1); y=u+v end if x~=10
if x~=10
y=x*sqrt(x+sqrt(x));
end
y
y=x*sqrt(x+sqrt(x))
end
第二节 选择结构
if 条件1 语句组1 elseif 条件2 语句组2 …… elseif 条件m 语句组m else if-elseif的执行方式为:如果逻辑表达式1 的值为真,则执行语句1;如果为假,则判 语句组m+1 断逻辑表达式2,如果为真,则执行语句2, end 否则向下执行。
3、多分支if语句
实例分析
y
实例分析
例4.11 求
ye
0.5 x
sin( x
6
)
定积分。
a=0;b=3*pi;n=1000; h=(b-a)/n; x=a:h:b; f=exp(-0.5*x).*sin(x+pi/6);
for i=1:n
s(i)= (f(i)+f(i+1))*h/2; end s=sum(s)
第4章MATLAB程序设计
第4章MATLAB程序设计在当今科技飞速发展的时代,计算机编程成为了许多领域中不可或缺的工具。
而 MATLAB 作为一款功能强大的数学计算和编程软件,在科学研究、工程设计、数据分析等众多领域都发挥着重要的作用。
MATLAB 具有丰富的函数库和简洁易懂的语法,这使得它对于初学者来说相对容易上手。
它提供了直观的操作界面,让用户能够轻松地进行各种复杂的计算和绘图。
在 MATLAB 程序设计中,变量的定义和使用是基础。
变量可以存储各种类型的数据,如数值、字符串、数组等。
与其他编程语言类似,变量的命名需要遵循一定的规则,通常使用有意义的名称能够提高程序的可读性。
比如,我们要计算一个圆形的面积,就可以定义半径变量`r` ,然后通过公式`S = pi r^2` 来计算面积。
在这个简单的例子中,清晰的变量名`r` 让人一眼就能明白它代表的是半径。
数组是 MATLAB 中常用的数据结构之一。
它可以是一维的、二维的甚至多维的。
通过数组,我们能够方便地处理大量相关的数据。
例如,要存储一个班级学生的成绩,我们可以创建一个一维数组来存放每个学生的分数。
而如果要表示一个矩阵,比如一个图像的像素值,就可以使用二维数组。
控制流语句在 MATLAB 程序中也非常重要。
像`ifelse` 语句用于条件判断,根据不同的条件执行不同的代码块。
假设我们要判断一个数是奇数还是偶数,就可以使用以下代码:```matlabnum = 5;if mod(num, 2) == 0disp('偶数');elsedisp('奇数');end````for` 循环用于重复执行一段代码特定的次数,而`while` 循环则在条件为真时持续执行。
函数的定义和调用是 MATLAB 程序设计中的重要环节。
通过将一段具有特定功能的代码封装成函数,可以提高代码的复用性和可读性。
例如,我们定义一个计算阶乘的函数:```matlabfunction result = factorial(n)if n == 0 || n == 1result = 1;elseresult = n factorial(n 1);endend```在需要计算阶乘的时候,直接调用这个函数就可以得到结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常退出,并返回调用它的代码段继 续运行,它也可强制结束该函数的
执行。如det1.
(4)echo
执行 M 文件时,通常在命令窗 口是看不到执行过程的,但在特殊 情况下(比如演示)要求M文件的 每条命令都要显示出来。这时可以
用echo命令实现这样的功能。
对于脚本, echo 命令可以用以 下方式来实现:
之间的第一个注释行组(之间无空行)
是帮助文本。
(7)在函数中调用脚本文件,等价于在函数 中将脚本文件的内容粘贴在调用的位置。 ( 8 )运行函数和脚本时一定要保证它们在 当前工作目录下。
4.1.3 子函数与主函数
一个 M 文件可以包含多个函数,其中,一个 是主函数,其他是子函数。
主函数必须出现在最上方,其后可有若干子
4.其他控制结构
在程序设计中经常遇到提前终止循环、 跳出子程序、显示出错信息等情况,主要 有 continue 、 break 、 return 、 echo 、 error 、try…catch 等。下面分别对各结构 进行介绍。
(1)continue
其作用是结束本次循环,即 跳过循环体中尚未执行的代码, 接着进行下一次是否执行循环 的判断。
(4)函数被调用时,MATLAB会为它开辟一
函数工作空间(Function
workspace),用来存放中间变量,
当执行完函数文件的最后一条命令或 者遇到return命令时就结束该函数的 运行,返回函数的输出,同时将临时 工作空间清空。
(5)脚本中的变量都是全局变量
(6)在M文件中,从开头到第一个非注释行
下列表示可以作为MATLAB的变量 的是()
A.abcd- 2 B.xyz_2# C.@h D.X_1_a
除了上述命名规则外, MATLAB 还提 供一些特殊的变量,如下表所示。
除命名规则外,变量命名时还需要注 意以下两个方面: (1)变量名不能与已有函数名相同,否则在
内存中有该变量时将不能调用同名函
数;
(2)变量名不能与MATLAB预留的关键字和
特殊变量名相同,否则系统会显示错误
信息。
变量按照作用范围分为局部变量和全 局变量。在 MATLAB 中使用命令 global 声 明全局变量,如下所示: 需要使用指定全局变量的M文件,都必 须在各自的代码中声明此全局变量。只要 存在声明某全局变量的M文件,则全局变量 存在。
price=input('请输入商品价格'); switch fix(price/100) case {0,1} %价格小于200 rate=0; case {2,3,4} %价格大于等于200但小于500 rate=3/100; case num2cell(5:9) %价格大于等于500但小1000 rate=5/100; case num2cell(10:24) %价格大于等于1000但小2500 rate=8/100; case num2cell(25:49) %价格大于等于2500但小5000 rate=10/100; otherwise %价格大于等于5000 rate=14/100; end price=price*(1-rate) %输出商品实际销售价格
MATLAB 提供了调试程序的 工具,利用这些工具可以提高 编程的效率,包括命令行的调 试函数和图形界面的菜单命令。
1.以命令行为主的程序调试
以命令行为主的程序调试手段具有
通用性,可以适用于各种平台,它主 要是应用MATLAB提供的调试命令。 在命令窗口输入help debug可以 看到对于这些命令的简单描述,下面 分别进行介绍。
脚本也是扩展名为 .m 的文件,类 似于 DOS 系统中批处理文件,可包含 MATLAB的各种命令。如例4.4 如果要运行脚本,也需要将脚本所
在目录设置为当前工作目录。
可通过如下方法运行脚本: 在命令窗口中直接键入此文件的文件名,
MATLAB可逐一执行文件内的所有命令。
单击【Debug】菜单下的【Run】;
(3)在程序中的适当位置添加输出变量值的 代码。 ( 4 )在程序中的适当位置添加 keyboard 命令。 复杂的程序,必须采用工具调试法, 即 借 助 MATLAB 提 供 的 工 具 调 试 器 (Debugger)进行调试。
4.3.2 工具调试法
1.以命令行为主的程序调试
2.以图形界面为主的程序调试
单击快捷键F5;
单击工具条上的图标 。
脚本运行过程所产生的变量都是全局变量, 都驻留在MATLAB工作空间内。
结合上例,对函数和脚本进行总结如下。 (1)函数名必须与文件名相同。 (2)脚本没有输入参数和返回值。 (3)函数可以包括零个或多个输入参数和返 回值,如函数nargin和nargout包含输 入参数和返回值的个数。
(2)switch-case-otherwise结构
某商场对顾客所购买的商品实行打折 销售,标准如下(商品价格用price来表 示): price<200 没有折扣 200≤price<500 3%折扣 500≤price<1000 5%折扣 1000≤price<2500 8%折扣 2500≤price<5000 10%折扣 5000≤price 14%折扣 输入所售商品的价格,求其实际销售价 格。
(1)for循环
脚本 for
运行如下程序后, 命令窗口(command windows)显示的结果为( ) s=0; a=[12,13,14;15,16,17;18,19,20]; for k=a s=s+k; end disp(s) A. 144 B. 39 48 57 C.145 D. 45 48 51
Step Response 0.7
0.6
0.5
Amplitude
0.4
0.3
0.2
0.1
0
0
1
2
3
4
5 Time (sec)
6
7
8
9
10
2.循环结构
循环结构是按照给定的条件,重复执 行指定的代码。该结构一般用于有规律的 重 复 运 算 。 在 MATLAB 中 包 括 for 循 环 和 while循环。
在文件名为 mfile 的 M 文件的第 lineno 行设置断点。如果第 lineno 行为非执行语 句,则在其后的第一个可执行语句前设置 断点。
dbstop in mfile at subfun
ቤተ መጻሕፍቲ ባይዱ
在 文 件 名 为 mfile 的 M 文 件 的 子 程 序 subfun的第一个可执行语句前设置断点。 dbstop if error
在使用全局变量中需要注意以下几个方面。
在使用之前必须首先定义,建议将定义放在函
数体的首行位置。
虽然对全局变量的名称并没有特别的限制,但
是为了提高程序的可读性,建议采用大写字符
命名全局变量。 全局变量会损坏函数的独立性,使程序的书写 和维护变得困难,尤其是在大型程序中,不利 于模块化,不推荐使用。
(2)while循环
读程序写结果。 mysum=0;i=1; while i<=100 mysum=mysum+i; i=i+1; end mysum
试问下面程序实现的是什么功能。 sum1=0 for i=0:15 sum1=sum1+2^i; end sum1
3.选择结构
选择结构是根据给定的条件来
函数,子函数的次序可随意调整。主函数和各子
函数的工作空间都是彼此独立的。
MATLAB 的主要功能虽然是数值运算,
但是它也是一个完整的程序语言,包括各 种语句格式和语法规则。
4.2 变量和语句
4.2.1 变量类型 4.2.2 程序控制结构
4.2.1 变量类型
变量命名规则
在 MATLAB 中,变量名必须以字母开 头,之后可以是任意字母、数字或下划线, 但之间不能有空格;区分大小写;第 63 个 字符之后的部分将被忽略。 与C语言不同的是,MATLAB中的变量是不 需要事先定义的,如前3章的例子。
(1)设置断点
这是最重要的部分,可以利用它
来指定程序代码的断点,使得程序在 断点前停止执行,并进入调试模式, 从而可以检查当前各个变量的值。
dbstop in mfile
在文件名为 mfile 的 M 文件的第一个可 执行语句前设置断点。 dbstop in mfile at lineno
(9)pause
此命令用于暂时中止程序的运
行。该命令对程序的调试和查询中 间变量值时很方便。该命令的语法
规则如下:
在编译和运行程序时出现错 误(警告)无法避免,因此掌握 程序调试的方法和技巧对提高工 作效率很重要。
4.3 程 序 调 试
4.3.1 直接调试法
4.3.2 工具调试法
下面针对语法错误和逻辑错 误推荐两种调试方法,即直接
当需要打开一个 M 文件时,可以通过 【File】|【Open】菜单进入文件选择的目 录界面。 本章将着重介绍 M 文件编程的规则和 注意事项。
4.1 M文件基础
4.1.1 函数 4.1.2 脚本 4.1.3 子函数与私有函数 4.1.4 伪代码
M 文件有函数( Functions )和脚本 (Scripts)两种格式。两者的相同之处是 都以 .M 作为扩展名,但二者在语法和使用 上有点区别。 M 文件可以在任意的文本编辑器中进 行创建和编辑,但推荐和默认使用 MATLAB自带的文本编辑器和Notebook。
4.1.1 函数
函数被调用时,通过获取外部参数进行运算, 并向外部返回运算结果。 函数内部的变量都是隐含的,即为局部变量 (除非特别声明),存放在函数本身的工作空间
内,这些变量不能被外部使用,也不会与外部变