实验三 MATLAB7.0基本编程
实验目的:
① 掌握脚本和函数;
② 掌握matlab中的变量和M文件的流控制语句; ③ 掌握函数的设计和实现。
实验要求:给出程序和实验结果。 实验内容:
一、一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。
二、从键盘输入若干个数,当输入10时结束输入,求这些数的平均值和它们之和。
三、求[1000,2000]之间第一个能被17整除的整数。
四、若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,10000]之间的全部完数。
五、Fibonacci数列定义如下:
f1=1 f2=1 fnfn1fn2,(n2)
求Fibonacci数列的第20项。
六、设计一个猜数游戏。首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“You won”,同时退出游戏。用户最多可以猜7次。 实验结果:
一、一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。
程序如下: for m=100:999 m1=fix(m/100); %求m的百位数字 m2=rem(fix(m/10),10); %求m的十位数字 m3=rem(m,10); %求m的个位数字
1 if m==m1*m1*m1+m2*m2*m2+m3*m3*m3 disp(m) end end 153 370 371 407
二、从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。 程序如下: sum=0; cnt=0; val=input(\'Enter a number (end in 0):\'); while (val~=0) sum=sum+val; cnt=cnt+1; val=input(\'Enter a number (end in 0):\'); end if (cnt > 0) sum mean=sum/cnt end Enter a number (end in 0):45 Enter a number (end in 0):65 Enter a number (end in 0):342 Enter a number (end in 0):45
2 Enter a number (end in 0):67 Enter a number (end in 0):12 Enter a number (end in 0):0 sum = 576
mean =
96
三、求[100,200]之间第一个能被21整除的整数。 程序如下: for n=100:200 if rem(n,21)~=0 continue end break end n n = 105
四、若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数。 for m=1:500 s=0;
3 for k=1:m/2 if rem(m,k)==0 s=s+k; end end if m==s disp(m); end end 6 28 496
五、Fibonacci数列定义如下:
f1=1 f2=1 fnfn1fn2,(n2)
求Fibonacci数列的第20项。 编写程序为: for i=3:20;
f(1)=1;
f(2)=1;
f(i)=f(i-1)+f(i-2); end >> f f =
Columns 1 through 7
1 8
13
2 3 5 4
Columns 8 through 14
21
34
55
89
144
233
377
Columns 15 through 20
610
987
1597
2584
4181
6765
六、设计一个猜数游戏。首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“You won”,同时退出游戏。用户最多可以猜7次。
命令如下:
a=fix(rand(1)*100+1); k=1; for k=1:7 n=input(\'输入一个1-100的整数:n=\'); if n>a disp(\'High\'); elseif n
补充:
例3-1 分别建立命令文件和函数文件,将华氏温度f转换为摄氏温度c。 程序1:
5 首先建立命令文件并以文件名f2c.m存盘。 M文件建立如下:
clear; %清除工作空间中的变量 f=input(\'Input Fahrenheit temperature:\'); c=5*(f-32)/9 然后在MATLAB的命令窗口中输入f2c,将会执行该命令文件,执行情况为: Input Fahrenheit temperature:73 c = 22.7778 程序2:
首先建立函数文件f2c.m。 function c=f2c(f) c=5*(f-32)/9 然后在MATLAB的命令窗口调用该函数文件。 >> clear; y=input(\'Input Fahrenheit temperature:\'); x=f2c(y) Input Fahrenheit temperature:70 c =
21.1111
x =
21.1111 例3-2 输入x,y的值,并将它们的值互换后输出。 程序如下:
x=input(\'Input x please.\');
y=input(\'Input y please.\'); z=x; x=y; y=z; disp(x); disp(y); Input x please.34 Input y please.54 54 34 例3-3 求一元二次方程ax2 +bx+c=0的根。 程序如下: 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))]); a=?1 b=?7 c=?9 x1=-1.6972,x2=-5.3028 例3-4 计算分段函数的值。
程序如下:
x=input(\'请输入x的值:\'); if x
7 end y 请输入x的值:5 y =
1.1562 例3-5 输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应的数值,若为其他字符则原样输出。
c=input(\'请输入一个字符\',\'s\'); if c>=\'A\' & c=\'a\'& c=\'0\'& c
price
输入所售商品的价格,求其实际销售价格
8 建立m文件且以eg.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) % rate=5/100; case num2cell(10:24) % rate=8/100; case num2cell(25:49) % rate=10/100; otherwise % rate=14/100; end price=price*(1-rate) % eg 请输入商品价格390 price =
378.3000 >> eg 请输入商品价格23090 price =
价格大于等于500但小于1000 价格大于等于1000但小于2500 价格大于等于2500但小于5000 价格大于等于5000 输出商品实际销售价格 9 1.9857e+004 例3-7 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。 程序如下:
A=[1,2,3;4,5,6]; B=[7,8,9;10,11,12]; try C=A*B; catch C=A.*B; end C lasterr %显示出错原因 C =
7 16 27 40 55 72
ans =
Error using ==> mtimes Inner matrix dimensions must agree.
n已知 y12i1 ,当n=100时,求y的值。 i1 程序如下: y=0; n=100; for i=1:n y=y+1/(2*i-1); 10 end y y =
3.2843
例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\'); 39 48 57 66 例3-14 编写函数文件求半径为r的圆的面积和周长。
编写m文件并命名为fcircle.m如下: function [s,p]=fcircle(r) %FCIRCLE calculate the area and perimeter of a circle of radii r %r 圆半径 %s 圆面积 %p 圆周长 s=pi*r*r; p=2*pi*r; circle(2) ans =
12.5664
11 例3-15 利用函数文件,实现直角坐标(x,y)与极坐标(ρ,θ)之间的转换。
函数文件tran.m:
function [rho,theta]=tran(x,y) rho=sqrt(x*x+y*y); theta=atan(y/x); 在命令窗体输入命令: x=input(\'Please input x=:\'); y=input(\'Please input y=:\'); [rho,the]=tran(x,y); rho the Please input x=:5 Please input y=:7 rho =
8.6023
the =
0.9505 例3-16 利用函数的递归调用,求n!。 n!本身就是以递归的形式定义的:
显然,求n!需要求(n-1)!,这时可采用递归调用。递归调用函数文件factor.m如下:
function f=factor(n) if n
12 f=factor(n-1)*n; %递归调用求(n-1)! end 在命令窗体输入: factor(9) ans =
362880
>> factor(67) ans =
3.6471e+094
例3-17 nargin用法示例。
函数文件charray.m: function fout=charray(a,b,c) if nargin==1 fout=a; elseif nargin==2 fout=a+b; elseif nargin==3 fout=(a*b*c)/2; end 在命令窗体中输入: x=[1:3]; >> y=[1;2;3]; >> charray(x)
13 ans =
1 2 3
>> charray(x,y\') ans =
2 4 6
>> charray(x,y,3) ans = 21 例3-18 全局变量应用示例。
先建立函数文件wadd.m,该函数将输入的参数加权相加。function f=wadd(x,y) global ALPHA BETA f=ALPHA*x+BETA*y; 在命令窗口中输入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2) s = 5 14