matlab实验报告书

实验课程名称:___数学实验____________               

 

第二篇:Matlab实验三

20##20##级《MATLAB程序设计》实验报告

实验三  班级:软件122    姓名:张丽静    学号:122489

一、实验目的

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

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

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

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

二、实验内容

1、MATLAB M文件的创建与使用。

(1)   建立自己工作目录,如D:\MATLAB。在File菜单中,单击Set Path菜单项,在弹出对话框中建立目标文件夹,:单击Add Folder按钮,将自己的工作目录D:\MATLAB添加到搜索目录之中,按Save按钮保存,如图1。

图1 工作目录设置

(2)   在M文件编辑器中编制命令行文件。在File菜单中,单击New—>M-File,弹出M文件编辑器,如图2:

图2 编辑器

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

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

        f(1)=2;

        k=1;

        while f(k)<1000

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

        k=k+1;

        end

        f,k

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

(3)     命令行程序运行。进入命令窗口,键入test1,观察运行结果:

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

function f=tt(n)

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

     %c=n(n)

     %n可取任意正整数。

     %

     %20##年8月。

     f(1)=2;

     k=1;

     while f(k)<ceil(n/2)  %ceil函数取最近的正整数

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

     k=k+1;

     end

     f

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

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

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

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

3、编写一个函数M文件,返回向量x中元素的和、平均值、最大值、最小值、均方根值。其中方均根值(Root Mean Square)的计算公式为:

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

(1)     x=sin(0:0.01:6*pi)

>> x=sin(0:0.01:6*pi);

>> y=text4(x)

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

 >> x=rand(1,200);

>> y=text4(x)

4、编写一个函数M文件,若给出一个向量,函数返回如下范德蒙矩阵。

例如在命令窗口输入>>v=myvander([2 3 4 5]),得,同时生成一些数据测函数。

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

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

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文件,完成上述功能,要求显示数字处理过程。

7、设计一个学生身高的管理系统,输出身高的基本分为5等:很高、较高、中等、较矮、矮,其中190cm以上为“很高”,[180cm,190cm)区间为“较高”,[170cm,180cm)为“中等”,[1160cm,170cm)为“较矮”,160cm以下为“矮”,要求分别用if语句和switch语句实现

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

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

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

要求显示的结果为:

i=21

a(i)=10946

或者

a(21)=10946

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

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

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

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

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

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

11、下列程序用来判断一个人的体温是否处于危险状态。调试程序是否正确,如果程序错误指出错误在哪里?并写出正确答案。

temp=input(‘请输入体温: temp = ’);

if temp < 36.5

disp(‘体温偏低’);

elseif temp > 36.5

      disp(‘体温正常’);

elseif temp > 38.0

      disp(‘体温偏高!’);

elseif temp > 39

      disp(‘体温高!!’);

end

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

>> text12();

     5     1     0     0     0

     1     5     1     0     0

     0     1     5     1     0

     0     0     1     5     1

     0     0     0     1     5

三、源程序和实验结果

1、运行结果如下:

>> test1();

f =

           2           4           8          16          32          64         128         256         512        1024

k =

10

>> test2(9);

f =

 2     4     8

2、源代码:

function y = text3(x)

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

if x<=0

    y = sin(x);

elseif x>0&x<=3

    y=x;

else y=-x+6;

end

end

运行结果如下:

>> y=text3(5)

y =

     1

>> y=text3(3.14/2)

y =

    1.5700

>> y=text3(-1)

y =

   -0.8415

3、源代码:

function y = text4(x)

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

y(1)=sum(x);

y(2)=mean(x);

y(3)=max(x);

y(4)=min(x);

y(5)=sqrt(mean(x.^2));

end

 运行结果如下:

1x=sin(0:0.01:6*pi)

>> x=sin(0:0.01:6*pi);

>> y=text4(x)

y =

   -0.0002   -0.0000    1.0000   -1.0000    0.7071

(2)x=rand(1,200),

 >> x=rand(1,200);

>> y=text4(x)

y =

   99.3810    0.4969    0.9943    0.0099    0.5707

4、源代码:

function y = myvander(x)

%编写一个函数M文件,若给出一个向量 ,函数返回如下范德蒙矩阵

n=length(x);

y = ones(n);

for i = 2:n

    y(i,:)=x.^(i-1);

end

end

运行结果如下:

>> v=myvander([2 3 4 5])

v =

     1     1     1     1

     2     3     4     5

     4     9    16    25

     8    27    64   125

5、源代码

(1)for循环

function s = text5()

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

s=0;

for n = 2:1:10

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

end

end

 (2)while循环 

function s=text5while()

%5、使用while编写命令文件,用循环语句编程计算s

n=2;

s=0;

while n<=10

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

    n=n+1;

end

end

运行结果如下

>> text5()

ans =

        2640

>> text5while()

ans =

        2640

6、源代码:

function y = text6()

%6/任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。

i=2;

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

y(1)=n;

while n~=1

 if rem(n,2)==0

    n=n/2;

 elseif rem(n,2)==1

    n=n*3+1;

 end

 y(i)=n;

 i=i+1;

end

end

运行结果如下:

>> y=text6()

请输入一个正整数12

y =

    12     6     3    10     5    16     8     4     2     1

7、源代码:

(1)if语句

function []=text7if(x)

if x>=190

    disp('很高');

elseif x>=180&x<190

    disp('较高');

elseif x>=170&x<180

    disp('中等');

elseif x>=160&x<170

    disp('较矮');

end

end

(2)switch语句

function []=text7switch(x)

%7/用switch语句实现

switch x

    case num2cell(190:300)

        disp('很高');

    case num2cell(180:190)

        disp('较高');

    case num2cell(170:180)

        disp('中等');

    case num2cell(160:170)

        disp('较矮');

    otherwise

        disp('矮');

end

end

运行结果如下:

(1)if语句

>> text7if(175)

中等

>> text7if(190)

很高

(2)switch语句

>> text7switch(175)

中等

>> text7switch(170)

中等

>> text7switch(180)

较高

>> text7switch(160)

较矮

8、源代码:

function [  ] = text8(  )

%UNTITLED Summary of this function goes here

%   Detailed explanation goes here

a(1)=1;

a(2)=1;

i=2;

while a(i)<10000

    i=i+1;

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

end

disp(['i=',num2str(i)]);

disp(['a(i)=',num2str(a(i))]);

end

运行结果如下:

>> text8()

i=21

a(i)=10946

9、源代码:

function [] = text9( x,y )

%UNTITLED3 Summary of this function goes here

%   Detailed explanation goes here

[a,b]=size(x);

[c,d]=size(y);

if a==b&&c==d&&a==c

    z1=x*y;

    z2=x.*y;

    disp(z1);disp(z2);

elseif b==c

    z1=x*y;

  disp(z1);

elseif a==c&&b==d

  

    z2=x.*y;

    disp(z2);

elseif b~=c

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

End

end

运行结果如下:

>> x=[1 2 3];

>> y=[1 2 3 4];

>> text9(x,y)

这两个矩阵不能乘

>> x=[1 2 3;4 5 6];

>> y=[1 2 3;4 5 6];

>> text9(x,y)

     1     4     9

16    25    36

>> x=[1 2 3;4 5 6;7 8 9];

>> y=[7 8 9;1 2 3;4 5 6];

>> text9(x,y)

    21    27    33

    57    72    87

    93   117   141

     7    16    27

     4    10    18

28    40    54

10、源代码:

(1)for循环

function [  ] =factorialfor(  )

%UNTITLED4 Summary of this function goes here

%   Detailed explanation goes here

s=1;

n=1;

for n=1:1000

    s=s*n;

    if(s>10100) break;

    end

end

disp(n);

end

(2)switch循环

function [  ] = factorialwhile(  )

%UNTITLED5 Summary of this function goes here

%   Detailed explanation goes here

n=1;

s=1;

while s<=10100

    n=n+1;

    s=s*n;

end

disp(n);

 end

运行结果如下:

>> factorialfor();

     8

>> factorialwhile();

     8

11、源代码:

function [  ] = text10(  )

%UNTITLED6 Summary of this function goes here

%   Detailed explanation goes here

temp=input('请输入体温: temp =');

if temp < 36.5

disp('体温偏低');

elseif temp >= 36.5

    disp('体温正常');

elseif temp > 38.0

    disp('体温偏高!');

elseif temp > 39

    disp('体温高!!');

end

End

运行结果如下:

>> text10();

请输入体温: temp =36.5

体温正常

>> text10();

请输入体温: temp =38

体温正常

12、源代码:

function [  ] = test12(  )

%UNTITLED8 Summary of this function goes here

%   Detailed explanation goes here

a=zeros(5);

for i=1:5

    a(i,i)=5;

   for j=1:5

       if i==j+1||j==i+1

      a(i,j) = 1;

       end

   end

end

disp(a);

end

 运行结果如下:

>> text12();

         5     1     0     0     0

         1     5     1     0     0

         0     1     5     1     0

         0     0     1     5     1

         0     0     0     1     5

相关推荐