实验三MATLAB程序设计.docx

上传人:b****5 文档编号:28320453 上传时间:2023-07-10 格式:DOCX 页数:20 大小:95.39KB
下载 相关 举报
实验三MATLAB程序设计.docx_第1页
第1页 / 共20页
实验三MATLAB程序设计.docx_第2页
第2页 / 共20页
实验三MATLAB程序设计.docx_第3页
第3页 / 共20页
实验三MATLAB程序设计.docx_第4页
第4页 / 共20页
实验三MATLAB程序设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

实验三MATLAB程序设计.docx

《实验三MATLAB程序设计.docx》由会员分享,可在线阅读,更多相关《实验三MATLAB程序设计.docx(20页珍藏版)》请在冰豆网上搜索。

实验三MATLAB程序设计.docx

实验三MATLAB程序设计

2014秋2012级《MATLAB程序设计》实验报告

班级:

软件C121姓名:

冯杨腾学号:

125692

实验三MATLAB程序设计

一、实验目的

1、掌握建立和执行M文件的方法。

2、掌握选择结构、多分支选择结构程序的编程方法。

3、掌握多种循环结构程序的编程方法。

4、掌握定义函数文件和调用函数文件的方法。

二、实验内容

1、MATLABM文件的创建与使用。

(1)建立自己工作目录,如D:

\MATLAB。

在File菜单中,单击SetPath菜单项,在弹出对话框中建立目标文件夹,:

单击AddFolder按钮,将自己的工作目录D:

\MATLAB添加到搜索目录之中,按Save按钮保存,如图1。

图1工作目录设置

(2)在M文件编辑器中编制命令行文件。

在File菜单中,单击New—>M-File,弹出M文件编辑器,如图2:

图2编辑器

在编辑器中输入如下命令程序:

%求小于2000且为2的整数次幂的正整数。

f

(1)=2;

k=1;

whilef(k)<1000

f(k+1)=f(k)*2;

k=k+1;

end

f,k

调试后,将其以test1.m形式保存在D:

\MATLAB中。

(3)命令行程序运行。

进入命令窗口,键入test1,观察运行结果:

f=

Columns1through9

248163264128256512

Column10

1024

k=

10

(4)按上述步骤,在在编辑器中输入如下函数文件:

functionf=tt(n)

%求小于任何正整数且为2的整数次幂的正整数。

%c=n(n)

%n可取任意正整数。

%2004年8月。

f

(1)=2;

k=1;

whilef(k)

f(k+1)=f(k)*2;

k=k+1;

end

f

调试后,将其以test2.m形式保存在D:

\MATLAB中。

(5)进入命令窗口,键入test2(9),观察程序运行结果。

>>test2(9)

f=

248

ans=

248

2、编写一个函数M文件,计算下面函数的值,给出标量x的值,调用该函数后,返回y的值。

选择一些数据测试编写的函数。

源程序:

function[y]=myfun(x)

ifx<=0

y=sin(x);

elseifx>3

y=-x+6;

else

y=x;

end

运行结果:

>>test(0)

ans=

0

>>test

(2)

ans=

2

>>test(5)

ans=

1

3、编写一个函数M文件,返回向量x中元素的和、平均值、最大值、最小值、均方根值。

其中方均根值(RootMeanSquare)的计算公式为:

并用下面数据测试你写的函数:

(1)x=sin(0:

0.01:

6*pi)

(2)x=rand(1,200),得到的x为200个(0,1)之间均匀分布的随机数。

源程序:

function[sum_x,m_x,max_x,min_x,rsm_x]=myfun7(x)

sum_x=0;

a=x;

fork=a;

sum_x=sum_x+k;

n=length(x);

fori=1:

n

m_x=sum_x/n;

end

end

min_x=x

(1);

fort=1:

n

ifmin_x>x(t)

min_x=x(t);

end

end

max_x=x

(1);

fort=1:

n

ifmax_x

max_x=x(t);

end

end

sum_x1=0;

fort=1:

n

sum_x1=sum_x1+x(t).^2;

rms_x=sqrt(sum_x1/n);

end

sum_x

m_x

max_x

min_x

rms_x

运行结果:

(1)

>>x=sin(0:

0.01:

6*pi);

>>myfun7(x)

sum_x=

-2.1218e-004

m_x=

-1.1256e-007

max_x=

1.0000

min_x=

-1.0000

rms_x=

0.7071

2)

>>x=rand(1,200);

>>myfun7(x)

sum_x=

99.5448

m_x=

0.4977

max_x=

0.9961

min_x=

0.0046

rms_x=

0.5778

4、编写一个函数M文件,若给出一个向量

,函数返回如下范德蒙矩阵。

例如在命令窗口输入>>v=myvander([2345]),得

,同时生成一些数据测函数。

源程序:

function[v]=myvander(x)

n=length(x);

v=ones(n,n);

forj=1:

n

fori=1:

n

v(i,j)=x(j)^(i-1);

end

end

运行结果:

x=([2345]);

>>test(x)

ans=

1111

2345

491625

82764125

>>x=([123]);

>>test(x)

ans=

111

123

149

5、分别使用while和for编写命令文件,用循环语句编程计算s值:

同时对编写的文件设置断点,观察变量取值的变化情况。

(1)For循环:

function[]=test()

s=0;

forn=2:

1:

10

s=s+(n^3-n^2);

end

disp(s)

end

运行结果:

>>test()

2640

(2)While循环:

function[]=test()

s=0;

n=2;

whilen<=10

s=s+(n^3-n^2);

n=n+1;

end

disp(s)

end

运行结果:

>>test()

2640

6、数论中一个有趣的题目:

任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。

重复此过程,最终得到的结果为1。

如:

2→1

3→10→5→16→8→4→2→1

6→3→10→5→16→8→4→2→1

建立命令M文件,完成上述功能,要求显示数字处理过程。

源程序:

functionX=test()

n=input('请输入一个正整数');

X

(1)=n;

i=2;

whilen~=1

ifrem(n,2)==0

n=n/2;

elseifrem(n,2)==1

n=n*3+1;

end

X(i)=n;

i=i+1;

end

end

运行结果:

请输入一个正整数2

ans=

21

请输入一个正整数3

ans=

3105168421

请输入一个正整数12

ans=

1263105168421

7、设计一个学生身高的管理系统,输出身高的基本分为5等:

很高、较高、中等、较矮、矮,其中190cm以上为“很高”,[180cm,190cm)区间为“较高”,[170cm,180cm)为“中等”,[1160cm,170cm)为“较矮”,160cm以下为“矮”,要求分别用if语句和switch语句实现

(1)for语句:

n=100;

fori=1:

n

a=input('请输入身高');

ifa>1.90

disp('很高')

elseifa>=1.80&&a<1.90

disp('较高')

elseifa>=1.70&&a<1.80

disp('中等')

elseifa>=1.60&&a<1.70

disp('较矮')

elseifa<1.60

disp('矮')

end

end

运行结果:

请输入身高1.95

很高

请输入身高1.85

较高

请输入身高1.75

中等

请输入身高1.65

较矮

请输入身高1.55

switch语句:

x=input('身高为:

');

n=(x-100)/10;

switchfloor(n)

case{10,9}

disp('很高');

case{8}

disp('较高');

case{7}

disp('中等');

case{6}

disp('较矮');

case{5,4,3,2,1,0}

disp('矮')

end

运行结果:

身高为:

195

很高

身高为:

185

较高

身高为:

175

中等

身高为:

165

较矮

身高为:

155

8、Fibonacci数组的元素满足Fibonacci规则:

ak+2=ak+ak+1,(k=1,2,3,…);且a1=a2=1。

请设计一段程序,求出该数组中第一个大于10000的元素

要求显示的结果为:

i=21

a(i)=10946

或者

a(21)=10946

源程序:

a

(1)=1;

a

(2)=1;

i=2;

whilea(i)<=10000

a(i+1)=a(i-1)+a(i);

i=i+1;

end;

i,a(i)

运行结果:

i=

21

ans=

10946

源程序:

n=100;

a

(1)=1;

a

(2)=1

fori=3:

n

a(i)=a(i-1)+a(i-2);

ifa(i)>=10000

a(i),

break;

end;

end;

i

运行结果:

a=

Columns1through12

1123581321345589144

Columns13through21

233377610987159725844181676510946

ans=

10946

i=

21

9、编写一个函数文件and.m,用于求两个输入矩阵的乘积和点乘,然后在命令行窗口中调用该函数,要求:

(1)当两矩阵是尺寸相同的方阵时,返回它们的乘积和点乘。

(2)当两矩阵不是尺寸相同的方阵时,则根据它们的尺寸,分别进行乘积或点乘

(3)当两矩阵的尺寸不能满足乘积或点乘的要求时,则提示“这两个矩阵不能乘”

源程序:

function[]=test(x,y)

[m,n]=size(x);

[i,j]=size(y);

ifm==n&&i==j&&m==i

z1=x*y;

z2=x.*y;

disp(z1);

disp(z2);

elseifn==i

z1=x*y;

disp(z1);

elseifm==i&&n==j

z2=x.*y;

disp(z2);

elseifn~=i

disp('这两个矩阵不能相乘');

end

end

运行结果:

1)

>>x=[123;456;789];

>>y=[123;456;789];

>>test(x,y)

303642

668196

102126150

149

162536

496481

2)

>>y=[123;456];

>>x=[123;456];

>>test(x,y)

149

162536

3)

>>x=[122;233;344];

>>y=[123;456];

>>test(x,y)

这两个矩阵不能相乘

10、编写一个阶乘函数factorial.m,然后在如下程序中调用该函数,

“分别使用for和while语句找出最小的n值,使得n!

>10100,并求出n!

(1)For语句:

Function[]=factorial()

n=1;

s=1;

forn=1:

10000

s=s*n;

if(s>10100)

break;

end

disp(n);

end

运行结果:

1

2

3

4

5

6

7

(2)While语句:

function[]=factorial()

n=1;

s=1;

whiles<=10100

n=n+1;

s=s*n;

end

disp(n);

end

运行结果:

>>factorial()

8

11、下列程序用来判断一个人的体温是否处于危险状态。

调试程序是否正确,如果程序错误指出错误在哪里?

并写出正确答案。

temp=input(‘请输入体温:

temp=’);

iftemp<36.5

disp(‘体温偏低’);

elseiftemp>36.5

disp(‘体温正常’);

elseiftemp>38.0

disp(‘偏高!

’;

elseiftemp>39

disp(‘温高!

’)

end

错误:

没有范围

源程序:

temp=input('请输入体温:

temp=');

iftemp<36.5

disp('体温偏低');

elseiftemp>=36.5&&temp<=38

disp('体温正常');

elseiftemp>38.0&&temp<=39

disp('偏高!

');

elseiftemp>39

disp('温高!

')

end

运行结果:

请输入体温:

temp=35

体温偏低

请输入体温:

temp=37

体温正常

请输入体温:

temp=38.5

偏高!

请输入体温:

temp=40

温高!

12、使用嵌套for循环命令创建下列矩阵:

源程序:

function[]=test()

a=zeros(5);

fori=1:

5

a(i,i)=5;

forj=1:

5

ifi==j+1||j==i+1

a(i,j)=1;

end

end

end

disp(a);

end

运行结果:

>>test()

51000

15100

01510

00151

00015

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1