matlab平时作业.docx

上传人:b****6 文档编号:4562365 上传时间:2022-12-06 格式:DOCX 页数:20 大小:157.42KB
下载 相关 举报
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平时作业

《MATLAB程序设计基础》平时作业

说明:

1-17题为必做题,须分别提交纸质文档及与纸质文档对应的电子文档.doc版。

1.对于每输入的一个百分制成绩,要求输出对应的成绩等级A、B、C、D、E。

其中A的分值在区间[90,100)内;B的分值在区间[80,90)内;C的分值在区间[70,80)内;D的分值在区间[60,70)内;E的分值在区间[0,60)内;要求:

1)要有对输入成绩是否合理的判断:

①输入成绩如果含有小数,只能是“x.5”的形式,其实x为合理的整数。

②成绩必须在百分制范围内。

③如果输入的成绩不合理,应向命令窗口输出报错信息“输入的成绩不合理”

2)用if语句实现题目要求

x=input('输入一个数值:

');%输入

ifmod(x,0.5)==0&&x>=0&&x<100;%mod(x,0.5)表示x除以0.5的余数,用以判断成绩含小数是否为x.5

ifx<0&x>=100%不合理成绩

disp('输入的成绩不合理')

elseifx<100&x>=90%成绩[90100)

disp('成绩等级为:

A')

elseifx<90&x>=80%成绩[8090)

disp('成绩等级为:

B')

elseifx<80&x>=70%成绩[7080)

disp('成绩等级为:

C')

elseifx<70&x>=60%成绩[6070)

disp('成绩等级为:

D')

else

disp('成绩等级为:

E')%成绩[060)

end

else

disp('输入的成绩不合理')

end

运行结果:

输入一个数值:

57

成绩等级为:

E

输入一个数值:

93.3

输入的成绩不合理

3)用switch语句实现题目要求

x=input('请输入一个成绩:

');%输入

ifmod(x,0.5)==0&&x>=0&&x<100%mod(x,0.5)表示x除以0.5的余数,用以判断成绩含小数是否为x.5

switchfloor(x/10)%x除以10向下取整

case9

disp('成绩等级为:

A');

case8

disp('成绩等级为:

B');

case7

disp('成绩等级为:

C');

case6

disp('成绩等级为:

D');

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

disp('成绩等级为:

E');

otherwise

disp('输入的成绩不合理');

end

else

disp('输入的成绩不合理');

end

运行结果:

请输入一个成绩:

0

成绩等级为:

E

请输入一个成绩:

120

输入的成绩不合理

请输入一个成绩:

95.5

成绩等级为:

A

2.设计程序,完成[10,99]之间两位整数的加、减、乘、除四则运算。

要求:

1)随机产生区间[10,99]之内的两位随机整数

2)在产生符合要求的随机数后,输入一个运算符号,做相应的运算

3)运算结果显示在命令窗口,其显示类似于“a=x+y=68”的形式。

x=round((99-10)*rand

(1)+10);%在区间[1099]随机选一个数x

y=round((99-10)*rand

(1)+10);%在区间[1099]随机选一个数y

sym=input('请输入运算符号(+-*/):

','s');

switchsym%switch语句

case{'+'}

a=x+y;

disp(['输入的两数之和b=',num2str(x),'+',num2str(y),'=',num2str(a)]);

%输出显示类似于“a=x+y=68”的形式

case{'-'}

a=x-y;

disp(['输入的两数之差c=',num2str(x),'-',num2str(y),'=',num2str(a)]);

case{'*'}

a=x*y;

disp(['输入的两数之积d=',num2str(x),'*',num2str(y),'=',num2str(a)]);

case{'/'}

a=x/y;

disp(['输入的两数之商e=',num2str(x),'/',num2str(y),'=',num2str(a)]);

otherwisedisp('输入符号错误')

end

运行结果:

请输入运算符号(+-*/):

+

输入的两数之和b=95+31=126

请输入运算符号(+-*/):

-

输入的两数之差c=64-53=11

请输入运算符号(+-*/):

*

输入的两数之积d=89*78=6942

请输入运算符号(+-*/):

/

输入的两数之商e=51/12=4.25

3.求下列分段函数的值并绘制函数曲线。

要求:

1)x的值以向量的形式从键盘输入。

2)用if语句实现,分别输出x=﹣5.0,﹣3.0,1.0,2.0,2.5,3.0,5.0时的y值。

x=input('pleaseinputx=');

ifx<0&x~=3

y=x.^2+x-6;

elseifx>=0&x<10&x~=2&x~=3

y=x.^2-5.*x+6;

else

y=x.^2-x-1;

end

disp(['y=',num2str(y)])

运行结果:

pleaseinputx=[-5.0-3.01.02.02.53.05.0]

y=1411-112.75519

3)自行拟定自变量的取值,绘制该分段函数的二维曲线。

x=-10:

1:

15;%自拟自变量的取值

ifx<0&x~=3

y=x.^2+x+6;

elseifx>=0&x<10&x~=2&x~=3

y=x.^2-5.*x+6;

else

y=x.^2-x-1;

end

plot(x,y,'r-')%绘制分段函数

title('分段函数')

xlabel('x')

ylabel('y')

holdon

图3(3)分段函数的二维曲线

4.分别使用for循环语句和while循环语句找出最小的n值,使得n!

>10100,并求出n!

for循环语句如下:

s=1;%对s赋初值

forn=1:

100%默认步长为1

s=s*n;%s=n!

if(s>10100)

break;%如果s>10100,结束运行

end

end

disp(['n=',num2str(n)])%输出n

disp(['s=',num2str(s)])%输出s

运行结果:

n=8

s=40320

while循环语句如下:

s=1;%对s赋初值

n=0;%循环次数赋初值

while(s<=10100)

n=n+1;%不能使用++

s=s*n;

end

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

disp(['s=',num2str(s)]);%组合字符串

运行结果:

n=8

s=40320

5.已知

f1=1,n=1

f2=0,n=2

f3=1,n=3

fn=fn-1-2fn-2+fn-3,n>3

求f1~f50中:

1)最大值和最小值及它们的位置、各数之和

(最大值给变量MAX,其位置给变量x,

最小值给变量MIN,其位置给变量y,各数之和给变量SUM)。

2)正数、零、负数的个数

(依次赋值给变量N_positive,N_zero,N_negative)。

f

(1)=1;

f

(2)=0;

f(3)=1;%输入

n=3;%赋值

while(n<50)

n=n+1;

f(n)=f(n-1)-2*f(n-2)+f(n-3);

end

[MAX,x]=max(f)%MAX为向量f中最大值元素,x为最大值元素的索引号

[MIN,y]=min(f)%MAX为向量f中最小值元素,y为最小值元素的索引号

SUM=sum(f)

N_positive=numel(find(f>0))%numel表示返还数组中的元素个数,

N_zero=numel(find(f==0))%返还f中等于0的位置

N_negative=numel(find(f<0))

运行结果:

MAX=406631

x=49

MIN=-403795

y=50

SUM=76861

N_positive=25

N_zero=2

N_negative=23

6.Fibonacci数组的元素满足Fibonacci规则:

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

请设计一段程序,求出该数组中第一个大于10000的元素对应的k值以及该元素值。

a

(1)=1;

a

(2)=1;

k=1;

whilea(k)<=10000

a(k+2)=a(k)+a(k+1);

k=k+1;

end

disp(['k=',num2str(k)])

disp(['a(k)=',num2str(a(k))])

运行结果:

k=21

a(k)=10946

7.定义自变量x的取值区间为[﹣5,5],编写一个函数文件,实现绘制函数y=ax3+bx2+cx+d的曲线,其中给定各系数值分别为

①a=﹣1,b=2,c=﹣5,d=3;

②a=3,b=﹣7,c=1,d=4;

③a=0,b=4,c=0,d=﹣5

要另外编写调用该函数文件的m文件,实现调用。

functionmy1(a,b,c,d)%定义主函数,函数文件名为my1.m

x=-5:

1:

5;%输入x

y=a*x.^3+b*x.^2+c*x+d;

plot(x,y);%绘制曲线

xlabel('x轴');%标志x轴

ylabel('y轴');%标志y轴

title('函数图像');%设置图名称

a=input('pleaseinputa=');%子函数

b=input('pleaseinputb=');

c=input('pleaseinputc=');

d=input('pleaseinputd=');%利用输出参数a,b,c,d向my1传递数据

my1(a,b,c,d);%调用的是啊,a,b,c,d四个参数

图7

(1)图7

(2)

图7(3)

8.设计程序,在一个图形窗体中画出函数y=ex和y=logx的特性曲线。

其中y=ex中x取值区间为(﹣2,2),y=logx中x取值区间为(0.1,5)。

要求:

1)要有图例、标题('二维图')、坐标轴标签('x轴数据'和'y轴数据');

2)每条曲线的属性自己设置,但不能全用默认值。

x1=-2:

0.1:

2;

y1=exp(x1);

x2=0.1:

0.1:

5;

y2=log(x2);

plot(x1,y1,'r*--',x2,y2,'ko-')

legend('函数y=exp(x)的特性曲线','函数y=logx的特性曲线')

title('二维图')

xlabel('x轴数据')

ylabel('y轴数据')

图8

9.采用2行2列子图的方式进行二维图形绘制,要求:

1)自变量x的取值区间为[0,2π]

2)三个函数分别为:

y1=sin(x),y2=cos(x),y3=sin(x)+cos(x)

3)在第1幅子图绘制y1的曲线;在第2幅子图绘制y2的曲线;在第3幅子图绘制y3的曲线;在第4幅子图中绘制所有3条曲线

4)对每一幅子图,都要有图例、坐标轴标签;曲线的属性自己设置,不能全用默认值。

x=0:

0.1:

2*pi;

y1=sin(x);

y2=cos(x);

y3=sin(x)+cos(x);

subplot(2,2,1);

plot(x,y1,'ro-');

legend('sin曲线');

title('y=sin(x)');

xlabel('横坐标1');

ylabel('纵坐标1');

subplot(222);

plot(x,y2,'g*-');

legend('cos曲线');

title('y=cos(x)');

xlabel('横坐标2');

ylabel('纵坐标2');

subplot(223);

plot(x,y3,'b-p');

legend('sin(x)+cos(x)曲线');

title('y=sin(x)+cos(x)');

xlabel('横坐标3');

ylabel('纵坐标3');

subplot(224);

plot(x,y1,'ro-',x,y2,'g*-',x,y3,'b-p');%同时绘制三个函数的图像

legend('sin曲线','cos曲线','sin(x)+cos(x)曲线');

title('三个函数的曲线');

xlabel('横坐标');

ylabel('纵坐标');

图(9)

10.采用1行2列子图的方式进行二维图形绘制,要求:

1)在第1幅子图绘制三维曲线:

x∈[0,20]

y=sin(x)

z=cos(x)

2)在第2幅子图绘制三维曲面:

x∈[﹣20,20]

y∈[﹣10,10]

3)对每一幅子图,都要有标题、坐标轴标签;曲线的属性自己设置,不能全用默认值。

subplot(121);%在第一个子图中绘图

x1=0:

0.1:

20;

y1=sin(x1);

z1=cos(x1);

plot(x1,y1,'ro-',x1,z1,'b*-');

legend('sin曲线','cos曲线');%设置图例

title('图1');

xlabel('x1');

ylabel('y1');

subplot(122);%在第二个子图中绘图

x2=-20:

1:

20;

y2=0.5*x2;

[X,Y]=meshgrid(x2,y2);%生成X和Y网络坐标矩阵

z=(X.^2)/9-(Y.^2)/4;%网格化后直接输入z

mesh(X,Y,z);%曲面绘图

legend('双曲面');

title('图2');

xlabel('x2');

ylabel('y2');

zlabel('z')

gridon;

图(10)

11.已知函数

,其中x的取值区间为[﹣2,2],试编程绘制该二维曲线,要求:

要有标题、坐标轴标签,曲线颜色用红色。

p=ezplot('(x.^2+y.^2-1).^3-x.^2.*y.^3',[-22]);%在区间[-22]绘制(x2+y2-1)^3-x2y2=0的图像

set(p,'color','r');%指定曲线颜色为红色

title('曲线图');

xlabel('x轴');

ylabel('y轴');

图(11)

12.已知原始数据

,插值点为

,试用4种不同的插值方法进行插值,并在一幅图的4个子图中分别绘出4种插值曲线,并各自注明所使用的插值方法。

x=0:

1:

4*pi;

y=sin(x).*exp(-x/5);

xi=0:

0.3:

4*pi;%设置新的插点

subplot(221)

yi=interp1(x,y,xi,'nearset');%使用最近点插值

plot(xi,yi)

title('最近点插值')

subplot(222)

yi=interp1(x,y,xi);%默认为线性插值

plot(xi,yi)

title('线性插值')

subplot(223)

yi=interp1(x,y,xi,'cubic');%使用三次立方插值

plot(xi,yi)

title('三次立方插值')

subplot(224)

yi=interp1(x,y,xi,'spline');%使用三次样条插值

plot(xi,yi)

title('三次样条插值')

图(12)

13.考虑表1中的数据:

表1一周气温温度数据

周一

周二

周三

周四

周五

周六

周日

早晨

15

15

18

13

13

15

16

中午

20

21

25

19

20

22

25

夜晚

16

17

12

14

16

18

19

完成以下功能:

1)将一周的气温温度数据,使用一个矩阵A进行保存。

2)取出周二中午、周四上午、周日中午和夜晚的温度值,组成新的温度值向量。

3)取出矩阵A中的前六个数值,组成新的温度值向量。

4)取出周二、周三、周四及周六的数据,组成新的温度值矩阵。

5)求每天温度的平均值

6)求一周的早晨、中午和夜晚温度的平均值

7)求一周的温度平均值及最高温度及最低温度

A=[15151813131516;20212519202225;16171214161819]%将一周的气温温度数据使用A矩阵保存

B=A([5102021])%取出周二中午周四上午周日中午和夜晚的温度组成新矩阵

C=A(1:

1:

6)%取出A中的前六个组成新的矩阵

D=A(:

[2346])%取出周二周三周四和周六的数据组成新的矩阵

everyday=mean(A)%表示每一列的平均值,即每天气温的平均值

mae=mean(A')%一周早上,中午,晚上的平均值

all=mean(A(:

))%一周的温度平均值

MAX=max(A(:

))%一周的最高温度

MIN=min(A(:

))%一周的最低温度

14.考虑表2中的数据,这是一位举重教练收集的不同性别的举重动员每个年龄的最大举重磅数,据信这三者之间存在着某种函数关系,请估算当前队伍中队员(要求13~20岁每一岁都有)的最大举重磅数。

表2不同性别的举重动员每个年龄的最大举重磅数

性别

年龄

13

15

17

19

20

270

290

330

350

380

250

270

310

330

360

t=[1315171920]';

y=[270290330350380;250270310330360]';

X=[ones(size(t))tt.^2];%ones(size(t))以t的长度为矩阵的大小设置全1矩阵

Z=X\y;%得到系数

T=(13:

20)';

Y=[ones(size(T))TT.^2]*Z;

MAXT=max(Y)

运行结果:

MAXT=[14305/3813545/38]

15.某乡镇企业2009-2015年的生产利润如表3所示。

表3过去7年生产利润

年份

2009

2010

2011

2012

2013

2014

2015

利润(万元)

70

122

144

152

174

196

202

要求用多项式拟合法预测出该企业2016年和2017年的利润,并绘出拟合图。

x=2009:

2015;%x在[20092015]取值,间隔为1

y=[70122144152174196202];%得到数据(x,y)

p=polyfit(x,y,1);%对(x,y)数据进行1阶多项式拟合,得到多项式系数p

x1=2009:

2018;

y1=polyval(p,x1);%根据得到的多项式,计算x处的函数值y

plot(x,y,'-ro',x1,y1,'-b*');%样本点用红色线和o表示,拟合曲线用蓝色线和*表示

title('某乡镇企业2009-2018年的生产利润')%设置图的标题

legend('09-15年的利润','09-18年的利润趋势线')%legend表示为图例做标注

xlabel('年份')%x轴表示年份

ylabel('利润')%y轴表示利润

text(2016,polyval(p,2016),'<---2016年的利润')%在指定2016位置显示字符串

text(2017,polyval(p,2017),'<---2017年的利润')

gridon

图(15)

16.求下列方程组的解。

1)

A=[2-13;30-5;4-11];

b=[5;6;9];

B=[Ab];

ra=rank(A)

rb=rank(B)%ra=rb=3,方程组有唯一解

x=inv(A)*b%AX=b,X=A-1b

运行结果:

ra=3

rb=3

x=[2;-1;0]

2)

A=[40-63;3-1-34;15-9-8];

b=[5;4;0];

B=[Ab];

ra=rank(A)

rb=rank(B)%ra=rb=2<4,所以方程有无穷解

formatrat%用有理数的形式显示数据(分数表示)

R=rref(B)%计算B的最简行矩阵

ra=2

rb=2

R=10-3/23/45/4

01-3/2-7/4-1/4

00000

17.已知用来描述系统的微分方程为

其中,

是幅值为1、频率为1rad/s的方波信号,试建立该系统的SIMULINK模型(如图1所示,须理解为什么是这样的模型)并进行仿真,给出仿真结果。

图1

图(17)scope仿真结果

说明:

18-19题为选作题,如果完成(须提交设计的所有原始文件电子稿)可提高平时成绩。

18.利用GUI编程设计一个能够实现两个实数加减乘除四则运算的计算器。

19.利用GUI编程设计一个能够实现两个复数加减乘除四则运算的计算器。

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

当前位置:首页 > 高中教育 > 高中教育

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

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