当前位置:文档之家› 实验三MATLAB程序设计

实验三MATLAB程序设计

2014秋2012级《MATLAB程序设计》实验报告班级:软件C121姓名:冯杨腾学号:125692实验三 MATLAB程序设计一、实验目的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 编辑器在编辑器中输入如下命令程序:%求小于2000且为2的整数次幂的正整数。

f(1)=2;k=1;while f(k)<1000f(k+1)=f(k)*2;k=k+1;endf,k调试后,将其以形式保存在D:\MATLAB中。

(3)命令行程序运行。

进入命令窗口,键入test1,观察运行结果:f =Columns 1 through 92 4 8 16 32 64 128 256512Column 101024k =10(4)按上述步骤,在在编辑器中输入如下函数文件:function f=tt(n)%求小于任何正整数且为2的整数次幂的正整数。

%c=n(n)%n 可取任意正整数。

%2004年8月。

f(1)=2; k=1;while f(k)<ceil(n/2) %ceil 函数取最近的正整数 f(k+1)=f(k)*2; k=k+1; end f调试后,将其以形式保存在D:\MATLAB 中。

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

>> test2(9) f =2 4 8 ans =2 4 82、编写一个函数M 文件,计算下面函数的值,给出标量x 的值,调用该函数后,返回y 的值。

sin ,(),036,3x x y x x x x x ≤⎧⎪=<≤⎨⎪-+>⎩选择一些数据测试编写的函数。

源程序 :function [y]=myfun(x)if x<=0y=sin(x);elseif x>3y=-x+6;elsey=x;end运行结果:>> test(0)ans =>> test(2)ans =2>> test(5)ans =13、编写一个函数M文件,返回向量x中元素的和、平均值、最大值、最小值、均方根值。

其中方均根值(Root Mean Square)的计算公式为:rms=并用下面数据测试你写的函数:(1)x=sin(0::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;for k=a;sum_x=sum_x+k;n=length(x);for i=1:nm_x=sum_x/n;endendmin_x=x(1);for t=1:nif min_x>x(t)min_x=x(t);endendmax_x=x(1);for t=1:nif max_x<x(t)max_x=x(t);endendsum_x1=0;for t=1:nsum_x1=sum_x1+x(t).^2; rms_x=sqrt(sum_x1/n); endsum_xm_xmax_xmin_xrms_x运行结果:(1)>> x=sin(0::6*pi);>> myfun7(x)sum_x =m_x =max_x =min_x =rms_x =2)>> x=rand(1,200);>> myfun7(x)sum_x = m_x = max_x = min_x = rms_x =4、编写一个函数M 文件,若给出一个向量12[,,]n x x x x =,函数返回如下范德蒙矩阵。

122221211112111n nn n n n x x x x x x x x x ---⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦例如在命令窗口输入>>v =myvander([2 3 4 5]),得1111234549162582764125v ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦,同时生成一些数据测函数。

源程序:function[v]=myvander(x) n=length(x); v=ones(n,n); for j=1:n for i=1:nv(i,j)=x(j)^(i-1); end end运行结果:x=([2 3 4 5]); >> test(x) ans =1 1 1 12345 4 9 16 25 8 27 64 125 >> x=([1 2 3 ]); >> test(x) ans =1 1 1 123 14 95、分别使用while 和for 编写命令文件,用循环语句编程计算s 值:10322()n s n n ==-∑同时对编写的文件设置断点,观察变量取值的变化情况。

(1)For 循环:function[]=test() s=0;for n=2:1:10s=s+(n^3-n^2); enddisp(s) end运行结果:>> test() 2640(2)While 循环:function[]=test() s=0; n=2;while n<=10s=s+(n^3-n^2); n=n+1; enddisp(s) end运行结果:>> test()26406、数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。

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

如:2?13?10?5?16?8?4?2?16?3?10?5?16?8?4?2?1建立命令M文件,完成上述功能,要求显示数字处理过程。

源程序:function X = test()n=input('请输入一个正整数');X(1)=n;i=2;while n~=1if rem(n,2)==0n=n/2;elseif rem(n,2)==1n=n*3+1;endX(i)=n;i=i+1;endend运行结果:请输入一个正整数2ans =2 1请输入一个正整数3ans =3 10 5 16 84 2 1请输入一个正整数12ans =12 6 3 10 5 16 8 4 2 17、设计一个学生身高的管理系统,输出身高的基本分为5等:很高、较高、中等、较矮、矮,其中190cm以上为“很高”,[180cm,190cm)区间为“较高”,[170cm,180cm)为“中等”,[1160cm,170cm)为“较矮”,160cm以下为“矮”,要求分别用if 语句和switch语句实现(1)for语句:n=100;for i =1:na=input('请输入身高');if a >disp('很高')elseif a>=&&a<disp('较高')elseif a>=&&a<disp('中等')elseif a>=&&a<disp('较矮')elseif a<disp('矮')endend运行结果:请输入身高很高请输入身高较高请输入身高中等请输入身高较矮请输入身高矮switch语句:x=input('身高为:');n=(x-100)/10;switch floor(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规则:a k+2=a k+a k+1,(k=1,2,3,…);且a1= a2=1。

请设计一段程序,求出该数组中第一个大于10000的元素要求显示的结果为:i=21a(i)=10946或者a(21)=10946源程序:a(1)=1;a(2)=1;i=2;while a(i)<=10000a(i+1)=a(i-1)+a(i);i=i+1;end;i,a(i)运行结果:i =21ans =10946源程序:n=100;a(1)=1;a(2)=1for i=3:na(i)=a(i-1)+a(i-2);if a(i)>=10000a(i),break;end;end;i运行结果:a =Columns 1 through 121 123 5 8 13 21 34 55 89 144Columns 13 through 21233 377 610 987 1597 2584 4181 6765 10946ans =10946i =219、编写一个函数文件,用于求两个输入矩阵的乘积和点乘,然后在命令行窗口中调用该函数,要求:(1)当两矩阵是尺寸相同的方阵时,返回它们的乘积和点乘。

(2)当两矩阵不是尺寸相同的方阵时,则根据它们的尺寸,分别进行乘积或点乘(3)当两矩阵的尺寸不能满足乘积或点乘的要求时,则提示“这两个矩阵不能乘”源程序:function [] = test(x,y)[m,n]=size(x);[i,j]=size(y);if m==n&&i==j&&m==iz1=x*y;z2=x.*y;disp(z1);disp(z2);elseif n==iz1=x*y;disp(z1);elseif m==i&&n==jz2=x.*y;disp(z2);elseif n~=idisp('这两个矩阵不能相乘');endend运行结果:1)>> x=[1 2 3; 4 5 6;7 8 9];>> y=[1 2 3; 4 5 6;7 8 9];>> test(x,y)30 36 4266 81 96102 126 1501 4 916 25 3649 64 812)>> y=[1 2 3; 4 5 6];>> x=[1 2 3; 4 5 6];>> test(x,y)1 4 916 25 363)>> x=[1 2 2; 2 3 3;3 4 4];>> y=[1 2 3; 4 5 6];>> test(x,y)这两个矩阵不能相乘10、编写一个阶乘函数,然后在如下程序中调用该函数,“分别使用for和while语句找出最小的n值,使得n!>10100,并求出n!”(1)For语句:Function[]=factorial()n=1;s=1;for n=1:10000s=s*n;if(s>10100)break;enddisp(n);end运行结果:1234567(2)While语句:function[]=factorial()n=1;s=1;while s<=10100n=n+1;s=s*n;enddisp(n);end运行结果:>> factorial()811、下列程序用来判断一个人的体温是否处于危险状态。

相关主题