MATLAB全部实验及答案.docx

上传人:b****5 文档编号:6877488 上传时间:2023-01-12 格式:DOCX 页数:22 大小:201.88KB
下载 相关 举报
MATLAB全部实验及答案.docx_第1页
第1页 / 共22页
MATLAB全部实验及答案.docx_第2页
第2页 / 共22页
MATLAB全部实验及答案.docx_第3页
第3页 / 共22页
MATLAB全部实验及答案.docx_第4页
第4页 / 共22页
MATLAB全部实验及答案.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

MATLAB全部实验及答案.docx

《MATLAB全部实验及答案.docx》由会员分享,可在线阅读,更多相关《MATLAB全部实验及答案.docx(22页珍藏版)》请在冰豆网上搜索。

MATLAB全部实验及答案.docx

MATLAB全部实验及答案

MATLAB全部实验及答案

实验一、MATLAB基本操作

实验内容及步骤

1、命令窗口的简单使用

(1)简单矩阵的输入

(2)求[12+2×(7-4)]÷32的算术运算结果

2、有关向量、矩阵或数组的一些运算

(1)设A=15;B=20;求C=A+B与c=a+b?

(2)设A=[123;456;789],B=[987;654;321];求A*B与A.*B?

A*B就是线代里面的矩阵相乘A.*B是对应位置的元素相乘

(3)设a=10,b=20;求i=a/b=0.5与j=a\b=2?

(4)设a=[1-23;45-4;5-67]

请设计出程序,分别找出小于0的矩阵元素及其位置(单下标、全下标的形式),并将其单下标转换成全下标。

clear,clc

a=[1-23;45-4;5-67];

[x,y]=find(a<0);

c=[];

fori=1:

length(x)

c(i,1)=a(x(i),y(i));

c(i,2)=x(i);

c(i,3)=y(i);

c(i,4)=(y(i)-1)*size(a,2)+x(i);

end

c

(5)在MATLAB命令行窗口运行A=[1,2;3,4]+i*[5,6;7,8];看结果如何?

如果改成运行A=[1,2;3,4]+i[5,6;7,8],结果又如何?

前面那个是虚数矩阵,后面那个出错

(6)请写出完成下列计算的指令:

a=[123;342;523],求a^2=?

a.^2=?

a^2=221616

252623

262428

a.^2=

149

9164

2549

(7)有一段指令如下,请思考并说明运行结果及其原因

clear

X=[12;89;36];

X(:

)转化为列向量

(8)使用三元组方法,创建下列稀疏矩阵

2080

0001

0400

6000

方法一:

clear,clc

data=[28146];

ir=[11234];

jc=[13421];

s=sparse(ir,jc,data,4,4);

full(s)

方法二:

不用三元组法

clear,clc

a=zeros(4,4);

a(1,[1,3])=[2,8];

a(2,4)=1;

a(3,2)=4;

a(4,1)=6;

a

(9)写出下列指令的运行结果

>>A=[123];B=[456];

>>C=3.^A

>>D=A.^B

3、已知

若需要计算t∈[-1,1],取间隔为0.01,试计算出相对应的y值。

用步长为0.01的for循环搞定

 

实验二、MATLAB运算基础

实验内容及步骤

1、设有矩阵A和B,A=[12345;678910;1112131415;1617181920;2122232425],B=[3016;17-69;023-4;970;41311]

1)求它们的乘积C

2)将矩阵C的右下角3x2子矩阵赋给D

解:

A=[12345;678910;1112131415;1617181920;2122232425];

B=[3016;17-69;023-4;970;41311];

c=A*B

D=c([3:

5],[2:

3])

D=c([3,4,5],[2,3])

2、完成下列操作

1)求[100,999]之间能被61整除的数及其个数(提示:

先利用冒号表达式,再利用find和length函数。

2)建立一个字符串向量,删除其中的大写字母(提示:

利用find函数和空矩阵。

解:

1)clear,clc2)clear,clc

t=[100:

999];b=['asSldSjfkSlGjFhslFf']

i=find(rem(t,61)==0);d=find(b<='Z'&b>='A');

t(i)b(d)=[]

d=size(i,1)*size(i,2)

3、已知A=[2310-780;41-45655;325032;6-549214],取出其前3行构成矩阵B,其前两列构成矩阵C,其左下角3x2子矩阵构成矩阵D,B与C的乘积构成矩阵E,分别求E

解:

A=[2310-780;41-45655;325032;6-549214];

B=A([1:

3],:

c=A(:

[1,2])

D=A([2:

4],[1,2])

E=B*c

E

4、使用函数,实现矩阵左旋90°或右旋90°的功能

解:

A=[2310-780;41-45655;325032;6-549214]

rot90(A)

rot90(A,3)

5、写出使以下这段文字成为字符串的MATLAB指令。

注意保持这段文字的格式:

在英式用法中,引号通常是单引号,如'Fire!

'。

InGBusagequotationmarksareusuallysingle:

'fire!

'.

解:

a=['在英式用法中,引号通常是单引号,如''Fire!

''。

'];

b=['InGBusagequotationmarksareusuallysingle:

''fire!

''.'];

c=strvcat(a,b)

6、用结构体数组来存储2名学生的基本情况数据,每名学生的数据包括学号、姓名、专业和2门课程的成绩。

解:

clear,clc

xuesheng=struct('num',{222,22},'name',{'mike','hike'},'major','tele','score',{rand(2,1)*100,rand(2,1)*100})

xuesheng.score

7、求S=20+21+22+23+24+……+210的值(提示:

利用求和函数与累乘积函数。

解:

a=2*ones(1,10)

b=cumprod(a)

c=sum(b)+1

aa=2*ones(1,11)

aa

(1)=1

bb=cumprod(aa)

cc=sum(bb)

8、建立矩阵A并回答有关问题

A{1,1}=1;

A{1,2}='Brenden';

A{2,1}=reshape(1:

9,3,3);

A{2,2}={12,34,2;54,21,3;4,23,67};

1)使用访问的方式如何将Brenden改写成BRENDEN?

2)分别执行A(3)=[]和A{3}=[]后,A的值各是多少?

并说明原因。

解:

A{1,1}=1;

A{1,2}='Brenden';

A{2,1}=reshape(1:

9,3,3);

A{2,2}={12,34,2;54,21,3;4,23,67};

A{1,2}=upper(A{1,2})

A{3}=[]

A(3)=[]

9、利用MATLAB提供的rand函数和圆整函数随机生成4X3整数矩阵A,进行如下操作

1)A各列元素的平均值和中值

2)A的最大元素和最小元素及它们的位置

3)求A的每行元素的和以及全部元素之和

4)分别对A的每列元素按升序、每行元素按降序排列

解:

A=round(rand(4,3))

A_mean=mean(A)

A_median=median(A)

A_max=max(max(A))

A_min=min(min(A))

[x,y]=find(A==A_max)

[xx,yy]=find(A==A_min)

A_maxlocal=[x

(1)y

(1)]

A_minlocal=[xx

(1)yy

(1)]

A_rsum=sum(A,2)

A_sum=sum(sum(A))

A_csort=sort(A)

A_rsort=abs(sort(-A,2))

实验三、MATLAB程序设计

实验内容及步骤

1、输入一个百分制成绩,要求输出成绩等级A、B、C、D、E。

其中90分~100分为A,80分~89分为B,70分~79为C,60分~69分为D,60分以下为E。

要求:

1)分别用if语句和switch语句实现

2)对不合理的成绩应输出出错信息“输入的成绩不合理”(若成绩出现小数,则只能是“.5”)

解:

score=input('请输入您的分数:

');

ifrem(score,0.5)==0

switchscore

casenum2cell(90:

0.5:

100)

disp('您的成绩等级为A')

casenum2cell(80:

0.5:

89)

disp('您的成绩等级为B')

casenum2cell(70:

0.5:

79)

disp('您的成绩等级为C')

casenum2cell(60:

0.5:

69)

disp('您的成绩等级为D')

casenum2cell(0:

0.5:

59.5)

disp('您的成绩等级为E')

otherwise

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

end

else

disp('你输入的成绩不合理,若出现小数只能是0.5')

end

2、设计程序,完成两位数的加、减、乘、除四则运算,即产生两个两位随机整数,再输入一个运算符号,做相应的运算,显示相应的结果,并要求结果显示类似于“a=x+y=34”。

(sy312.m)

解:

a=input('请输入一个数:

');

b=input('请再输入一个数:

');

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

','s');

switchfuhao

case{'+'}

he=a+b;

disp(['输入的两数和=',num2str(a),'+',num2str(b),'=',num2str(he)])

case{'-'}

he=a-b;

disp(['输入的两数差=',num2str(a),'-',num2str(b),'=',num2str(he)])

case{'*'}

he=a*b;

disp(['输入的两数乘积=',num2str(a),'*',num2str(b),'=',num2str(he)])

case{'/'}

he=a/b;

disp(['输入的两数商=',num2str(a),'/',num2str(b),'=',num2str(he)])

otherwisedisp('请输入正确的符号')

end

3、求下列分段函数的值

要求:

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

其中x的值以向量的形式从键盘输入。

(sy313.m)

解:

x=[];

y=[];

x=input('请输入x的值:

');

fork=1:

length(x)

ifx(k)<0&x(k)~=-3

y(k)=x(k).^2+x(k)-6;

elseifx(k)>=0&x(k)<10&x(k)~=2&x(k)~=3

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

else

y(k)=x(k).^2-x(k)-1;

end

end

fori=1:

length(y)

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

end

实验四MATLAB程序设计

实验内容及步骤

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

>10100,并求出n!

要求显示的结果为

n=70

n!

=1.197857e+100>1e100

70!

=1.197857e+100>1e100

用IF语句执行如下:

s=1;

forn=1:

100

s=s*n;

if(s>10^100)

break;

end

end

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

str2=['n!

=',num2str(s)];

disp(str1)

disp(str2)

用WHILE语句执行如下:

n=1;

s=1;

while(s<=10^100)

s=s*n;

n=n+1;

end

str1=['n=',num2str(n-1)];

str2=['n!

=',num2str(s)];

disp(str1)

disp(str2)

 

2、

已知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)正数、零、负数的个数(依次赋值给变量positive,zero,negative)。

法一:

clear;

f

(1)=1;

f

(2)=0;

f(3)=1;

forn=4:

50

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

end

[MAX,x]=max(f)%注意不要分号,要执行的语句

[MIN,y]=min(f)

SUM=sum(f)

positive=length(find(f>0))

zero=length(find(f==0))

negative=length(find(f<0))

MAX=

406631

x=

49

MIN=

-403795

y=

50

SUM=

76861

positive=

25

zero=

2

negative=

23

法二:

clearall,clc

forn=1:

50

ifn==1

f

(1)=1;

elseifn==2

f

(2)=0;

elseifn==3

f(3)=1;

elseifn>3

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

end

end

[MAX,y]=max(f)

[Min,x]=min(f)

positive=length(find(f>0))

zero=length(find(f==0))

negative=length(find(f<0))

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

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

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

要求显示的结果为:

i=21

a(i)=10946

或者

a(21)=10946

法一:

a

(1)=1;

a

(2)=1;

fork=1:

10000%不能是3:

10000

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

ifa(k)>10000

break;

end

end

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

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

法二:

clear,clc

s=1;

forn=1:

inf

s=s*n;

ifs>10^100

break

end

end

fprintf('%d!

=%1.6e>1e100\n',n,s)

试验五函数文件

实验内容及步骤

1、编写一个函数文件chengji.m,用于求两个矩阵的乘积和点乘,然后在命令行窗口中调用该函数(提示:

使用varargout函数)

要求:

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

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

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

解:

functionvarargout=chengji(a,b)

[x,y]=size(a);

[xx,yy]=size(b);

ifxx==yy&x==y&x==xx

varargout{1}=a*b;

varargout{2}=a.*b;

elseifx==xx&y==yy

varargout{1}=a.*b;

disp('只能做点乘')

varargout{2}=0;

elseifx==yy&xx==y

disp('可以做两种矩阵乘')

varargout{1}=a*b;

varargout{2}=b*a;

elseifx==yy||xx==y

try

varargout{1}=a*b;

disp('只能做矩阵乘')

varargout{2}=0;

catch

varargout{1}=b*a;

disp('只能做矩阵乘')

varargout{2}=0;

end

else

error('这两个矩阵不能乘')

end

2、编写一函数qiuhe.m,实现sum(A)的功能,其中A为矩阵。

解:

functiony=qiuhe(a)

y=[];

[x,yy]=size(a);

ifx==1

s=0;

fork=1:

yy

s=s+a(1,k);

end

y=s;

else

forj=1:

yy

s=0;

fori=1:

x

s=s+a(i,j);

end

y(1,j)=s;

end

end

3、编写一个阶乘函数jiecheng.m,然后在试验三的编程题“分别使用for和while语句找出最小的n值,使得n!

>10100,并求出n!

”程序中调用该函数。

解:

functions=jiecheng(n)

s=1;

ifn==0

s=1;

elseifn<0

error('n必须大于等于0')

else

fori=1:

n

s=s*i;

end

end

实验六数据插值与曲线拟合实验

实验内容

1.已知原始数据

,插值点为

,试用四种不同的插值方法进行插值,并在一副图中绘出四种插值曲线。

解:

clear,clc

x=0:

1:

4*pi;

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

xi=0:

0.3:

4*pi;

y1=interp1(x,y,xi,'nearset');

y2=interp1(x,y,xi,'linear');

y3=interp1(x,y,xi,'spline');

y4=interp1(x,y,xi,'cubic');

plot(x,y,'-m',xi,y1,'*r',xi,y2,'ok',xi,y3,'^b',xi,y4,'+g')

legend('原始数据','最近点插值','线性插值','样条插值','立方插值')

title('第一题四种插值方法进行插值','FontName','隶书','FontSize',20)

xlabel('X轴','FontName','隶书','FontSize',16)

ylabel('Y轴','FontName','隶书','FontSize',16)

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

13

15

17

19

20

270

290

330

350

380

250

270

310

330

360

解:

clear,clc

t=[1315171920];

sex=[0,1]';

y=[270290330350380;250270310330360];

x=[13:

20];

sex_2=[0,1]';

y_2=interp2(t,sex,y,x,sex_2)

surf(x,sex_2,y_2)

3.某乡镇企业2004-2010年的生产利润如下

年份

2004

2005

2006

2007

2008

2009

2010

利润(万元)

70

122

144

152

174

196

202

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

解:

x=2004:

2010;

y=[70122144152174196202];

k=polyfit(x,y,1);%得到系数

x1=2004:

2013;

y1=polyval(k,x1);

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

title('某乡镇企业2004-2013年的生产利润')

legend('04-10年的利润','04-13年的利润趋势线')

xlabel('年份');

ylabel('利润');

text(2011,polyval(k,2011),'<---2011年利润')

text(2012,polyval(k,2012),'<---2012年利润')

gridon

4.先使用命令load加载census.mat得到一组数据(cdate,pop),该数据是美国自1790到1990年(以10年为一单位)的总人口。

利用回归法拟合,预测出美国在2010年的人口总数,写出拟合模型

,并绘出拟合图。

解:

clearall,clc

load('census.mat');

nian=[1990:

2010];

p=polyfit(cdate,pop,2);

z=polyval(p,cdate);

zz=polyval(p,nian);

my=mean(pop);

mz=mean(z);

R=sum((pop-my).*(z-mz))./sqrt(sum((pop-my).^2).*sum((z-mz).^2))

plot(cdate,pop,'*',cdate,z,'r',nian,zz,'b-')

xlabel('年份(十年)','FontName','隶书','FontSize',16)

ylabel('人口(百万)','FontName','隶书','FontSize',16)

title('第四题美国自1790-1990年的总人口','FontName','隶书','FontSize',20)

text(1990,248.73,'<----之后为拟合数据')

legend('原数据','拟合曲线')

实验七MATLAB绘图

实验内容

1、二维图形的绘制

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

其中y=ex中x取值为(-2:

0.1:

2),y=logx中x取值为(0.1:

0.1:

5)。

要求:

要有图例、标题('二维图')、坐标轴标签('x轴数据'和'y轴数据');每条曲线的clm自己设置。

解:

clear,clc

x1=-2:

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

当前位置:首页 > 总结汇报 > 实习总结

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

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