《Matlab语言》实验四

更新时间:2023-12-07 05:49:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验四、 Matlab的程序设计

(一)实验目的

1.掌握利用if语句实现选择结构的方法。

2.掌握利用switch语句实现多分支选择结构的方法。 3.掌握利用for语句实现循环结构的方法。 4.掌握利用while语句实现循环结构的方法。 5. 掌握Matlab函数的编写及调试方法。

(二)实验环境

1.计算机

2.MATLAB7.0集成环境

(三)实验内容

1、编写一个函数,计算下面函数的值,给出标量x的值,调用该函数后,返回y的值。 function y=myfun1(x)

?sinx,?y(x)??x,??x?6,?x?00?x?3x?3

选择一些数据测试你编写的函数。 function [y]=myfun1(x) if x<=0

y=sin(x); elseif x>0&x<=3 y=x; elseif x>3 y=-x+6; End 结果:

>> x=5;

>> [y]=myfun1(x) y = 1

2、编写一个函数求向量x中元素的平均值、最大值、最小值、均方根值。

function [m_x,max_x,min_x,rms_x]=myfun2(x)方均根值(Root Mean Square)的计算公式为:

rms?1NN?i?1xi2

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

function [m_x,max_x,min_x,rms_x]=myfun2(x)

%求平均值

sum_x=sum(x); %向量元素求和

[m,n]=size(x); %最好用n=length(x); m_x=sum_x/n;

%求最大值 采用逐个比较方式 if x(1)>x(2) max_x=x(1); else

max_x=x(2); end for k=3:n

if max_x

else

max_x=max_x; %可省略 end end

%求最小值

if x(1)

min_x=x(2); end

for k=3:n

if min_x>x(k)

min_x=x(k); else

min_x=min_x; %可省略 end end

%求均方根值 sum_x2=0; for k=1:n

sum_x2=sum_x2+x(k).^2; rms_x=sqrt(sum_x2/n); end m_x; max_x;

min_x;

rms_x; %按照函数值行

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

运行结果:>> x=sin(0:0.01:6*pi); >> [m_x,max_x,min_x,rms_x]=myfun2(x) m_x =

-1.1256e-007 max_x = 1.0000 min_x = -1.0000 rms_x = 0.7071

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

>> [m_x,max_x,min_x,rms_x]=myfun2(x) m_x = 0.5231 max_x = 0.9994 min_x = 0.0056 rms_x = 0.5869

3、编写求解方程ax?bx?c?0的根的函数(这个方程不一定为一元二次方程,因a、b、c的不同取值而定),这里应根据a、b、c的不同取值分别处理,有输入参数提示,当

a?0,b?0,c~?0时应提示“为恒不等式!”。并输入几组典型值加以检验。

2M文件:

disp('关于方程ax^2+bx+c=0') a=input('请输入系数a='); b=input(' b='); c=input(' c='); if a==0&&b==0 if c==0

disp('解为全体实数'); else

disp('为恒不等式!'); end else

P=[a,b,c];

x=roots(P) end

disp('关于方程ax^2+bx+c=0') a=input('请输入系数a='); b=input(' b='); c=input(' c='); if a==0&&b==0 if c==0

disp('解为全体实数'); else

disp('为恒不等式!'); end else P=[a,b,c]; x=roots(P) end

工作空间测试: 关于方程ax^2+bx+c=0 请输入系数a=2 b=4 c=6 x =

-1.0000 + 1.4142i -1.0000 - 1.4142i

4、输入一个百分制成绩,要求输出成绩等级A+、A、B、C、D、E。其中100分为A+,90分~99分为A,80分~89分为B,70分~79分为C,60分~69分为D,60分以下为E。 要求:(1)用switch语句实现。

(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。

g=input('请输入成绩'); if g<0||g>100

disp('错误,输入的成绩应为0~100间的数') else

g=fix(g/10); switch g case {10}

disp('A+'); case {9} disp('A'); case {8}

disp('B'); case {7}

disp('C'); case {6}

disp('D') otherwise

disp('E'); end

5、利用for循环语句编写计算n!的函数程序,取n分别为-89、0、3、5、10验证其正确性(输入n为负数时输出出错信息)。 n=input('请输入n=');

if n<0

disp('错误,n取值必须为正数'); else y=1; for i=1:n y=y*i; end

disp('n!='); disp(y) 测试:

请输入n=6 n!= 720

6、Fibonacci数组的元素满足Fibonacci规则:现要求该数组中第一个大于10000的元素。

a(1)=1; a(2)=1;

k=3;

a(k)=a(k-1)+a(k-2); while a(k)<10000 k=k+1;

a(k)=a(k-1)+a(k-2); 测试: >> ak=a(k) ak =

ak?2?ak?ak?1 ,(k?1,2,?);且a1?a2?1。

10946

?27、根据6?112?122?132?......?1n,求?的近似值。

2要求:(1)分别采用for循环结构以及向量法来编程实现,比较两种方法程序运行时间; (2)当n分别取100、1000、10000时,结果是多少? n=[100 1000 10000]; for j=1:3 y=0; k=n(j); for i=1:k y=y+1/i/i; end

pai=sqrt(6*y); disp('n=');

disp(n(j));

disp('π的近似值为');

disp(pai); 结果:

n=

100

π的近似值为 3.1321 n=

1000 π的近似值为 3.1406 n=

10000 π的近似值为 3.1415

(四)实验要求

1、熟练操作MATLAB7.0运行环境;

2、自主编写程序,必要时参考相关资料;

3、实验前应写出程序大致框架或完整的程序代码; 4、完成实验报告。

(五)实验报告要求

见实验一。

思考题

1、 M文件分为哪两类?这两类M文件的区别是什么? 答:分为命令文件和函数文件

1)函数文件一般都要带参数 , 都要有返回结果 , 而命令文件没有参数与返回结果 2)函数文件的变量是局部变量 , 运行期间有效 , 运行完毕就自动被清除 , 而命令文件的变量是全局变量 , 执 行完毕后仍被保存在内存中

3)函数文件要定义函数名 , 且保存该函数文件的文件名必须是函数名 .m 。M 函数文件可以有多个因变量和多 个自变量 , 当有多个因变量时用[ ] 括起来。 2、 有一分数序列:

1, 3, 5, 8, 1321 22358, 13, 编写一段程序,求前16项的和。

a=2.0; b=1.0; c=a/b; for 1:16 {b=a; a=a+b;

d=(a+b)/a; c=c+d; }

?? ?

本文来源:https://www.bwwdw.com/article/a7gt.html

Top