您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页MATLAB平时作业

MATLAB平时作业

来源:爱玩科技网


MATLAB程序设计基础

专业班级学 号姓 名 平 时 作 业

电科1402 3140504043 宋晓晨

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

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语句实现题目要求 3)用switch语句实现题目要求 clear all; clc; A=input('请输入分数:'); B=floor(A); if A<0||A>100 disp('输入成绩不合理'); elseif A-B~=0.5&&A~=B disp('输入成绩不合理'); else

switch floor(A/10)

case 10 C='A'; case 9

C='A'; case 8

C='B'; case 7; C='C'; case 6; C='D'; otherwise C='E'; end

disp('你的成绩等级为:'); disp(C); end

运行结果:

%清除以前所使用的变量后清屏,下同 %使用一个变量来分析输入成绩的小数位 %判断成绩的合理性 2

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

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

2)在产生符合要求的随机数后,输入一个运算符号,做相应的运算 3)运算结果显示在命令窗口,其显示类似于“a=x+y=68”的形式。 clc; clear;

a=floor(90*rand(1,2))+10; b=a(1,1); c=a(1,2);

B=num2str(b); C=num2str(c); disp('数据为:') disp(strcat(B,',',C))

D=input('输入运算符(+ - * /):','s'); if D=='+' e=b+c;

E=num2str(e);

disp(strcat(B,'+',C,'=',E)); elseif D=='-' e=b-c;

E=num2str(e);

disp(strcat(B,'-',C,'=',E)); elseif D=='*' e=b*c;

E=num2str(e);

disp(strcat(B,'*',C,'=',E)); elseif D=='/' e=b/c;

E=num2str(e);

disp(strcat(B,'/',C,'=',E)); else

disp('输入错误'); end

运行结果:

3

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

x2x6,x0且 x-3yx25x6,0x<10,x2且 x3

x2x1,其他 要求:

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

2)用if语句实现,分别输出x =﹣5.0,﹣3.0,1.0,2.0,2.5,3.0,5.0时的y值。y=14,11,2,1,-0.25,5,6

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

x=input('输入变量:');

if x<0&&x~=-3 y=x.^2+x-6;

elseif 0<=x&&x<10&&x~=2&&x~=3 y=x.^2-5*x+6; else

y=x.^2-x-1; end

X=num2str(x); Y=num2str(y);

disp(strcat('x=',X,'y=',Y));

clear all;

x=-10:0.01:15;

f=@(x)(x.^2+x-6).*(x<0&&x~=-3)+(x.^2-5*x+6).*(0<=x&&x<10&&x~=2&&x~=3)+(x.^2-x-1).*(x==-3||x==2||x==3||x>=10);

ezplot(f,x);

axis([-10 15 0 150]); grid on; 运行结果:

4

4. 分别使用for循环语句和while循环语句找出最小的n值,使得n!>10100,并求出n!。 clear all; for循环 >> N=1;

>> for n=1:100 N=N*n; if N>10100

5

break; end end

>> disp(strcat('最小的n是 ',num2str(n))); clear all; While循环 >> N=1; >> n=0;

>> while(N<10100) n=n+1; N=N*n; end

>> disp(strcat('最小的数是 ',num2str(n))); 运行结果:

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)。 >> clear all; f=zeros(1,50); f(1,1)=1; f(1,2)=0; f(1,3)=1; for n=4:50

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

SUM=0;

N_positive=0; N_zero=0; N_negative=0; for n=1:50

SUM=SUM+f(1,n); if f(1,n)<0

N_negative=N_negative+1; elseif f(1,n)==0

N_zero=N_zero+1; else

6

N_positive=N_positive+1; end end

for n=2:50

if f(1,n)>f(1,n-1) MAX=f(1,n); x=n; end

if f(1,n)disp(strcat('最大值',num2str(MAX),'位置',num2str(x))); disp(strcat('最小值',num2str(MIN),'位置',num2str(y))); disp(strcat('总和',num2str(SUM)));

disp(strcat(num2str(N_positive),'个正数')); disp(strcat(num2str(N_zero),'个零'));

disp(strcat(num2str(N_negative),'个负数'));

最大值406631位置49 最小值-403795位置50 总和76861 25个正数 2个零 23个负数 运行结果:

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

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

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

a=zeros(1,10000); a(1,1)=1; a(1,2)=1;

for n=3:10000

7

a(1,n)=a(1,n-1)+a(1,n-2); if a(1,n)>10000 break; end end

disp(strcat('第',num2str(n),'个元素大于10000')); disp(num2str(a(1,n))); 第21个元素大于10000 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文件,实现调用。 function y=f(a,b,c,d) x=-5:0.01:5;

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

disp('输入变量a,b,c,d') a=input('a='); b=input('b='); c=input('c='); d=input('d='); y=f(a,b,c,d); plot(y);

运行结果:

8

9

8. 设计程序,在一个图形窗体中画出函数y=ex和y=logx的特性曲线。其中y=ex中x取值区间为(﹣2,2),y=logx中x取值区间为(0.1,5)。 要求:

1)要有图例、标题('二维图')、坐标轴标签('x轴数据'和'y轴数据'); 2)每条曲线的属性自己设置,但不能全用默认值。 clear all; clc;

x1=-2:0.01:2; x2=0.1:0.01:5; y1=exp(x1); y2=log(x2);

plot(x1,y1,'r',x2,y2,'g'); axis tight; grid on;

title('二维图'); xlabel('x轴数据'); ylabel('y轴数据');

legend('y=e^x','y=logx'); 运行结果:

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)对每一幅子图,都要有图例、坐标轴标签;曲线的属性自己设置,不能全用默认值。 clear all; clc;

x=0:0.01:2*pi; y1=sin(x); y2=cos(x);

10

y3=sin(x)+cos(x); subplot(2,2,1) plot(x,y1,'r--'); axis tight;

xlabel('x数据轴'); ylabel('y数据轴'); legend('y=sin(x)'); subplot(2,2,2) plot(x,y2,'g'); axis tight;

xlabel('x数据轴'); ylabel('y数据轴'); legend('y=cos(x)'); subplot(2,2,3) plot(x,y3,'k-d'); axis tight;

xlabel('x数据轴'); ylabel('y数据轴');

legend('y=sin(x)+cos(x)'); subplot(2,2,4)

plot(x,y1,'r',x,y2,'--go',x,y3); axis tight;

xlabel('x数据轴'); ylabel('y数据轴');

legend('y=sin(x)','y=cos(x)','y=sin(x)+cos(x)'); 运行结果:

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

1)在第1幅子图绘制三维曲线: x∈[0,20] y=sin(x) z=cos(x)

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

11

x∈[﹣20,20] y∈[﹣10,10]

x2y2z

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

clear all; clc;

x1=0:0.01:20; y1=sin(x1); z1=cos(x1); x2=-20:0.02:20; y2=-10:0.01:10;

z2=1/9*x2.^2-0.25*y2.^2; subplot(1,2,1) plot3(x1,y1,z1,'r'); title('图1');

xlabel('x轴数据'); ylabel('y轴数据'); zlabel('z轴数据'); subplot(1,2,2)

plot3(x2,y2,z2,'g--'); title('图2');

xlabel('x轴数据'); ylabel('y轴数据'); zlabel('z轴数据'); 运行结果:

11. 已知函数(xy1)xy0,其中x的取值区间为[﹣2,2],试编程绘制该二维曲线,

22323要求:要有标题、坐标轴标签,曲线颜色用红色。 x=-2:0.01:2;

h=ezplot('(x.^2+y.^2-1).^3-x.^2.*y.^3'); set(h,'color','r');

title('(x^2+y^2-1)^3-x^2y^3'); xlabel('x数据轴');

12

ylabel('y数据轴'); 运行结果:

12. 已知原始数据x0:1:4*pi,ysin(x).*exp(x/5),插值点为xi0:0.3:4*pi,试用4种不同的插值方法进行插值,并在一幅图的4个子图中分别绘出4种插值曲线,并各自注明所使用的插值方法。 clear all; clc;

x=0:4*pi;

y=sin(x).*exp(-x/5); x1=0:0.3:4*pi; subplot(2,2,1)

y1=interp1(x,y,x1,'nearest'); plot(x1,y1); axis tight;

title('最近值插值'); subplot(2,2,2)

y1=interp1(x,y,x1,'nearest'); plot(x1,y1); axis tight;

title('线性插值'); subplot(2,2,3)

y1=interp1(x,y,x1,'cubic'); plot(x1,y1); axis tight;

title('三次方插值'); subplot(2,2,4)

y1=interp1(x,y,x1,'spline'); plot(x1,y1); axis tight;

title('三次样条插值'); 运行结果:

13

13.考虑表1中的数据:

表1 一周气温温度数据 早晨 中午 夜晚 周一 15 20 16 周二 15 21 17 周三 18 25 12 周四 13 19 14 周五 13 20 16 周六 15 22 18 周日 16 25 19 完成以下功能:

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

2)取出周二中午、周四上午、周日中午和夜晚的温度值,组成新的温度值向量。 3)取出矩阵A中的前六个数值,组成新的温度值向量。

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

6)求一周的早晨、中午和夜晚温度的平均值 7)求一周的温度平均值及最高温度及最低温度 clear all; clc;

disp('表1一周气温温度数据');

N={' ','周一','周二','周三','周四','周五','周六','周日'; '早晨',15,15,18,13,13,15,16; '中午',20,21,25,19,20,22,25; '夜晚',16,17,12,14,16,18,19}; A=[15,15,18,13,13,15,16; 20,21,25,19,20,22,25; 16,17,12,14,16,18,19]; disp(N);

B=[A(5),A(10),A(20),A(21)];

B1={' ','周二中午','周四上午','周日中午','周日夜晚'; '温度',B(1),B(2),B(3),B(4)}; disp('(2)中取出的数据'); disp(B1); C=A(1:6);

C1={' ','周一','周二'; '早晨',C(1),C(4); '中午',C(2),C(5);

14

'晚上',C(3),C(6)}; disp('(3)中取出的数据'); disp(C1);

D=[A(4),A(7),A(10),A(16); A(5),A(8),A(11),A(17); A(6),A(9),A(12),A(18)];

D1={' ','周二','周三','周四','周六'; '早晨',D(1),D(4),D(7),D(10); '中午',D(2),D(5),D(8),D(11); '晚上',D(3),D(6),D(9),D(12)}; disp('(4)中取出的数据'); disp(D1); i=1; j=1; k=1;

E=zeros(1,7); F=zeros(3,1); while i<=7

E(1,j)=round(sum(A(:,i)/3)); j=j+1; i=i+1; end i=1;

while i<=3

F(k,1)=round(sum(A(i,:)/7)); k=k+1; i=i+1; end

A1={' ','周一','周二','周三','周四','周五','周六','周日'; '平均',E(1),E(2),E(3),E(4),E(5),E(6),E(7)}; A2={' ','平均'; '早晨',F(1); '中午',F(2); '夜晚',F(3)};

G=round(sum(sum(A))/21); min=A(1); max=A(1); for i=1:21

if A(i)max max=A(i); end

15

end

disp('(5)一周内每天的平均温度'); disp(A1);

disp('(6)一周内每时段的平均温度'); disp(A2);

disp(strcat('(7)平均温度为:',num2str(G),'最小温度为:',num2str(min),',最大温度为:',num2str(max))); 运行结果:

14.考虑表2中的数据,这是一位举重教练收集的不同性别的举重动员每个年龄的最大举重

磅数,据信这三者之间存在着某种函数关系,请估算当前队伍中队员(要求13~20岁每一岁都有)的最大举重磅数。

表2 不同性别的举重动员每个年龄的最大举重磅数 最 大 举 年龄 重 13 270 250 15 290 270 17 330 310 19 350 330 20 380 360 性别 男 女 clear all; 16

clc;

a=[270 290 330 350 380]; b=[250 270 310 330 360]; x=[1 3 5 7 8]; x1=1:8;

A=round(interp1(x,a,x1,'spline')); B=round(interp1(x,b,x1,'spline')); N={'','年龄',13,14,15,16,17,18,19,20; '性别','最大举重','','','','','','','','';

'男','',A(1),A(2),A(3),A(4),A(5),A(6),A(7),A(8); '女','',B(1),B(2),B(3),B(4),B(5),B(6),B(7),B(8)}; disp('估算数据为'); disp(N); 运行结果:

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

表3 过去7年生产利润 年份 利润(万元) 2009 70 2010 122 2011 144 2012 152 2013 174 2014 196 2015 202 要求用多项式拟合法预测出该企业2016年和2017年的利润,并绘出拟合图。 clear all; clc; x=1:7;

y=[70 122 144 152 174 196 202]; z=polyfit(x,y,3); x1=1:9;

x2=2009:2017;

y1=round(polyval(z,x1));

N={' 年份 ',2009,2010,2011,2012,2013,2014,2015,2016,2017;

'利润(万元)',y1(1),y1(2),y1(3),y1(4),y1(5),y1(6),y1(7),y1(8),y1(9)}; disp('预计的利润'); disp(N); plot(x2,y1); title('拟合图'); 运行结果:

17

16. 求下列方程组的解。

2x1x23x353x15x36 1)4xxx92314x16x33x452)3x1x23x34x44

x5x9x8x02341clear all;

clc;

A1=[2 -1 3;3 0 -5;4 -1 1]; B1=[5;6;9]; X1=A1\\B1;

disp(strcat('(1),x1=',num2str(X1(1)),' x2=',num2str(X1(2)),' x3=',num2str(X1(3)))); A2=[4 0 -6 3;3 -1 -3 4;1 5 -9 8]; B2=[5;4;0]; X2=A2\\B2;

disp(strcat('(2),x1=',num2str(X2(1)),' x2=',num2str(X2(2)),' x3=',num2str(X2(3)),', x4=',num2str(X2(4)))); 运行结果:

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

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

18

运行结果:

19

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务