实验4.docx
《实验4.docx》由会员分享,可在线阅读,更多相关《实验4.docx(12页珍藏版)》请在冰豆网上搜索。
实验4
实验四
第3章MATLAB程序设计
Matlab作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算能力、丰富的绘图功能及可以以人机交互式的命令行的方式工作;作为一种高级语言,同时也可以与C、FORTRAN等高级语言一样进行程序设计.而且,由于MATLAB所具有的强大功能,与上述几种高级语言比较,程序文件的编制有许多无法比拟的优点.
利用Matlab的程序控制功能,将相关Matlab命令编成程序存储在一个文件中(M文件),然后在命令窗口中运行该文件,Matlab就会自动依次执行文件中的命令,直到全部命令执行完毕.
■例1用mesh绘制半径为3的球(注意两种方式的区别)
命令行方式:
在命令窗口,编程方式:
一行一行执行.新建一个M文件qiu.m如下:
>>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);
>>axisequal;
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);
axisequal;
保存后,在命令窗口输入qiu,即可执行该M文件.
第一节M文件
一、M文件介绍
●用Matlab语言编写的程序称为M文件.
●M文件以.m为扩展名.
●M文件是由若干Matlab命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法.(如例1)
●文件的命名规则与变量相同!
文件名应尽量与程序要表达的意义相符合,以方便今后调用.(如例1)
二、M文件的建立、打开与保存
M文件是文本文件,可以用任何文本编辑器来建立和编辑,通常使用Matlab自带的M文件编辑器.
①新建一个M文件
●菜单操作(File→New→M-File)
●命令操作(editM文件名)
●
命令按钮(快捷键)
②打开已有的M文件
●菜单操作(File→Open)
●
命令操作(editM文件名)
●命令按钮(快捷键)
●双击M文件(在当前目录窗口)
③保存M文件
●菜单操作(File→Save)
●命令按钮(快捷键)
三、M文件分类(根据调用方式的不同)
●Script:
脚本文件/命令文件(可以直接运行的M文件)
命令文件就是命令行的简单叠加,matlab会自动按顺序执行文件中的命令.这样就解决了用户在命令窗口中运行许多命令的麻烦,还可以避免用户做许多重复性的工作.(如例1)
●Function:
函数文件
函数文件主要用以解决参数传递和函数调用的问题.
(1)第一行必须指定函数名、输入变量(参数)和输出变量(参数).输入参数是从MATLAB的工作空间复制到函数工作空间的变量.第一行举例如下:
function[输出形参表]=name(输入形参表)
(2)一个函数可以有0个、一个或几个输入参数和返回值.
当输出形参表的参数个数大于2时,[]不可缺省!
两个输出(或输入)参数之间用“,”分割.
(3)建议函数名和文件名一样.调用时所用的变量并不需要与函数文件中定义的变量有相同的名字.
■例2比较下列两个程序,注意命令文件(以dd1命名)与函数文件(以dd2命名)的区别与联系.
functiony=dd2(x,n)
y
(1)=x;
fork=1:
n
x=1/(x+1);y(k)=x;
end
x=input(‘输入初值x=’);
n=input(‘输入迭代次数=’);
y
(1)=x;
fork=1:
n
x=1/(x+1);y(k)=x;
end
y
四、两类文件的区别
●函数文件的第一行必须包含字function,命令文件没有这种要求.因此,没有这样第一行的M文件是命令文件.
●命令文件没有输入参数,也不返回输出参数,而函数文件可以带输入参数,也可以返回输出参数;
●命令文件对matlab工作空间中的变量进行操作,文件中所有命令的执行结果也完全返回到工作空间中,而函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量被清除.
●命令文件可以直接运行.在MATLAB命令窗口输入命令文件的名字,就会顺序执行命令文件中的命令,而函数文件通常不能直接运行,而要以函数调用的方式运行.
●函数文件可以建立函数,以方便其他函数调用.
■例3建立函数
解:
程序如下:
functiony=f(x)
;
以文件名f.m保存.
五、M文件的调用
对已存在的M文件
●命令文件用F5运行(必须先打开要运行的m文件)或在命令窗口直接输入该文件名即可;如例1
>>qiu
●函数文件调用的一般格式
[输出实参数表]=函数名(输入实参数表)
①函数调用时各实参数出现的顺序、个数应与函数定义时形式参数的顺序、个数一致,否则出错;
②函数调用时,先将实参数传递给形式参数,从而实现参数的传递,然后再执行函数的功能.如例2,例3
>>y=dd2(1,10),>>y=f
(1)
③当输出实参数表的参数个数大于2时,[]不可缺省!
④有输入参数时,不可用F5调用.
练习将例1、例2和例3的程序在matlab中建立、保存、运行.ling_______________________________________________________________________________________________________________________
第二节程序控制结构
程序控制结构有三种:
顺序结构、选择结构、循环结构.任何复杂的程序都可以由这三种基本结构构成.Matlab提供了实现控制结构的语句,利用这些语句可以编写解决实际问题的程序.
一、顺序结构
顺序结构是指按照程序中语句的排列顺序从上到下依次执行,直到程序的最后一个语句如例1的qiu文件.这是最简单的一种程序结构.一般涉及数据的输入、计算或处理、数据的输出等内容.
1.数据的输入
通过input命令来接收从终端输入的内容,它也可以显示文本和提示.
命令集14输入命令
input(out,in)在屏幕上显示出字符串out的文本并等待终端的输入(在命令窗口从键盘输入).如果变量in是's',则输入的内容以字符串的形式进行保存;若输入的是数、数学表达式,则in不能出现.其格式如下
变量名=input('提示信息')
变量名=input('提示信息','s')
如
>>x=input('输入初值x=')
此时从键盘输入x的值即可.若输入的是无效信息,matlab将显示错误信息,并等待再次输入,直到输入正确为止;若没有任何输入,而是直接回车,x将取得一个空矩阵.
■例4注意in的输入方式
>>xm=input('What''syourname?
','s')
What'syourname?
syx
xm=
syx
>>xm=input('What''syourname?
')
What'syourname?
syx
?
?
?
Errorusing==>input
Undefinedfunctionorvariable'syx'.
What'syourname?
'syx'
xm=
syx
2.数据的输出
可以通过简单地输入变量的名字来显示数字矩阵或者字符串向量的内容,结果将显示出变量的名字和内容.
另一种显示变量的值就是使用命令disp.使用它只显示出变量的内容,这是有用的,特别是在字符串的应用中.
命令集15显示命令
disp(A)显示矩阵A的内容,如果A是字符串,则显示出它的文本.
■例5比较不同的输出方法及输出结果的表达方式
>>A=magic(3);disp(A);>>disp(ones(3))
816111
357111
492111
>>A>>A='Goodmorning';disp(A)
A=Goodmorning
816>>disp('Hi,Tom')
357Hi,Tom
492
习题1编写M文件,对任意的a,b,c求方程
的根.
二、循环结构
循环结构是按照给定的条件,重复执行指定的语句.Matlab用于实现循环结构的语句有for—end语句和while—end语句.
1.for—end语句
for语句的格式为:
for循环变量=表达式1:
表达式2:
表达式3
循环体语句
end
其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值.步长为1时,表达式2可以省略.
■例61.求1+2+…+100;2.求1+2+…+n.
1.解:
2.解
functions=mysum(n)
s=0;
fori=1:
n
s=s+i;
end
s=0;
fori=1:
100
s=s+i;
end
s
■例71.求初始值为1,任意等差数列的和?
2.求初始值任意,任意等差数列的和?
1.解:
2.解
%c为首项,d为公差,
%n为求和项数
functions=mysumdc(c,n,d)
s=0;
fori=c:
d:
c+(n-1)*d
s=s+i;
end
%d为公差,n为求和项数
functions=dc(n,d)
s=0;
fori=1:
d:
1+(n-1)*d
s=s+i;
end
■例8已知
,求y的值.
n=input(‘n=’);i=1:
n;
y=sum(1./i.^2);
y
n=input(‘n=’);y=0;
fori=1:
n
y=y+1/i/i;
end
y
解:
程序如下:
运行并比较两程序.
循环语句应用时应注意:
●循环语句可以嵌套使用;
●不能在for—end循环体内改变循环变量的值;
●为了提高代码的运行效率,应尽可能提高代码的向量化程度,避免for—end循环的使用,如例8;
●如果预先就知道循环的次数,则可以采用for—end循环;否则,如果预先无法确定循环的次数,则可以使用while—end循环.
2.while—end语句
while-end语句的一般格式为:
while(条件)
循环体语句
end
其执行过程为:
若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环.
■例9使用while-end结构计算1+2+3+…+100.
s=0;
fori=1:
100
s=s+i;
end
s
s=0;
i=1;
whilei<=100
s=s+i;
i=i+1;
end
s
解:
注意比较两程序的异同点!
■例10计算Matlab中eps值(exp1.m)
num=0;EPS=1;
while(1+EPS)>1
EPS=EPS/2;
num=num+1;
end
EPS,num
解:
习题2阅读下列程序,写出结果;并在计算机上运行验证.
(1)bljh.m
x=input(‘Inputxplease:
’);
y=input(‘Inputyplease:
’);
z=x;x=y;y=z;
disp(x);disp(y);
(其中x=[12,3,3,4;43,6,3,-54],y=1:
8)
(2)xlsum1.m
n=input('n=');
k=1:
2:
2*n-1;
y=sum(1./k)
(3)xlsum2.m
n=input('n=');
y=0;
fork=1:
2:
2*n-1
y=y+1/k;
end
y
(4)Vander1.m
t=[-1;2;1;3;5];n=length(t);
A=ones(n);
forj=n-1:
-1:
1
A(:
j)=t.*A(:
j+1);
end
A
(5)Vander2.m
t=[-1;2;1;3;5];n=max(size(t));
A=ones(n);
forj=1:
n
fori=1:
n
A(i,j)=t(i)^(n-j);
end
end
A
(6)ftx.m
functions=ftx(a,b,n)
h=(b-a)/n;
x=a:
h:
b;
f=exp(-0.5*x).*sin(x+pi/6);
s=(2*sum(f)-f
(1)-f(n+1))*h/2;
习题3
(一)将习题2的
(1)~(4)题改写为函数文件并在计算机上运行.
(二)利用秦九韶算法编写M文件,实现任意的多项式
的求值.