Matlab实验及答案.docx

上传人:b****3 文档编号:3893667 上传时间:2022-11-26 格式:DOCX 页数:32 大小:465.85KB
下载 相关 举报
Matlab实验及答案.docx_第1页
第1页 / 共32页
Matlab实验及答案.docx_第2页
第2页 / 共32页
Matlab实验及答案.docx_第3页
第3页 / 共32页
Matlab实验及答案.docx_第4页
第4页 / 共32页
Matlab实验及答案.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

Matlab实验及答案.docx

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

Matlab实验及答案.docx

Matlab实验及答案

-CAL-FENGHAI.-(YICAI)-CompanyOne1-CAL-本页仅作为文档封面,使用请直接删除

 

Matlab实验及答案(总32页)

实验一、MATLAB基本操作

一、实验目的

2.学习使用图形函数计算器命令funtool及其环境。

3.学习使用help命令进行帮助

4.掌握向量与矩阵的创建以及矩阵的基本操作

5.掌握数组与矩阵的概念

二、实验内容

熟悉Matlab操作环境,认识命令窗口、内存工作区窗口、历史命令窗口;学会使用format命令调整命令窗口的数据显示格式;学会使用变量和矩阵的输入,并进行简单的计算;掌握数组与矩阵的概念;学会使用help命令进行帮助;学会使用who和whos命令查看内存变量信息;学会使用图形函数计算器funtool;

1.命令窗口的简单使用

(1)简单矩阵的输入(自由创建)

x=[135;246]

x=

135

246

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

[12+2*(7-4)]/3^2

ans=

2

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

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

A=15;B=20;

>>C=A+B

C=

35

>>c=a+b

Undefinedfunctionorvariable'a'.

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

(A*B是两个矩阵相乘,A.*B是对应元素相乘)

A=[123;456;789];

B=[987;654;321];

>>A*B

ans=

302418

846954

13811490

>>A.*B

ans=

91621

242524

21169

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

a=10;

>>b=20;

>>i=a/b

i=

>>j=a\b

j=

2

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

请设计出程序,分别找出小于0的矩阵元素的线性索引以及行列索引(sub2ind/ind2sub)。

(find())

并将其单下标转换成全下标。

clear,clc

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

b=find(a<0)

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

Y=sort(a,1,‘descend’)

2.对矩阵按列从大到小排列(sort())

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

>>A=[1,2;3,4]+i*[5,6;7,8]

A=

>>A=[1,2;3,4]+i[5,6;7,8]

A=[1,2;3,4]+i[5,6;7,8]

Error:

Unbalancedormisusedparenthesesorbrackets.

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

(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(:

)转化为列向量

>>clear

>>X=[1,2;8,9;3,6];

>>X(:

ans=

1

8

3

2

9

6

(8)使用help命令,明白什么是稀疏矩阵sparse(),并用采用两种方法创建下面的稀疏矩阵(其中一种方法采用help所提供的三元组方法创建稀疏矩阵

(S=SPARSE(i,j,s,m,n)))

2080

0001

0400

6000

另:

=该稀疏矩阵上下反转

2.该矩阵变维,C为2*8矩阵,D为3*8矩阵,CD

方法一:

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

B=flipud(a)

C=reshape(a,2,8)

(9)学会使用图形函数计算器(funtool命令),并进行下列计算:

1.求函数的符号导数

y=sin(x);

2.求下列函数的符号积分

(1)y=1/sqrt(1-x^2);

3.求两个函数之间的操作

求和

(1)sin(x)+cos(x)

乘积

(1)exp(-x)*sin(x)

(2)

(1)sin(x)/cos(x);

求复合函数

(1)y=exp(u)u=sin(x)

(10)总结who,whos,clc,clear命令

三、设计提示

1.初次接触Matlab应该注意函数表达式的文本式描述。

2.在使用图形函数计算器funtool时,注意观察1号和2号窗口中函数的图形。

3.help帮助命令的使用

3.向量与矩阵的创建

实验二:

数组运算及线型方程组的求解

二、实验内容

1.“:

”号的用法。

用“:

”号生成行向量a=[12345678910]、b=[531-1-3-5];用线性等分命令linspace重新生成上述的a和b向量。

另,在100和10000之间用对数等分命令logspace生成10维的向量c。

ak=logspace(2,4,10)linspace(1,10,10)linspace(5,-5,6)

2.已知多项式a(x)=x2+2x+3,b(x)=4x2+5x+6,求a,b的积并微分。

>>a=[1,2,3];b=[4,5,6];polyder(a,b)

ans=

16395627

>>poly2str(ans,'x')

ans=

16x^3+39x^2+56x+27

3.生成下列矩阵,取出方框内的数组元素

a(2,2:

3)

a(2:

4,4)

a(4:

5,1:

3)

4.生成一个9×9维的魔方矩阵,提取其中心的3×3维子矩阵M,利用sum函数检验其各行和各列的和是否相等。

并且实现上述中心矩阵左旋90°或右旋90°,左右翻转,上下翻转

a=magic(9)

>>b=a(4:

6,4:

6)

b=

203142

304152

405162

>>sum(b,1)

ans=

90123156

>>sum(b,2)

ans=

93

123

153

rot90(b)

rot90(b,-1)

fliplr(b)

flipud(b)

5.已知a=[123;456;780],求其特征多项式并求其根、特征值和特征多项式

>>a=[123;456;780]

a=

123

456

780

>>poly(a)

ans=

>>poly2sym(ans)

ans=

x^3-6*x^2-72*x-/28

>>[dv]=eig(a)

d=

v=

00

00

00

6.计算二重不定积分

>>symsxy

>>f=int(int(x*exp(-x*y),x),y)

>>x=sym('x')

x=

x

>>y=sym('y')

y=

y

>>f=int(int(x*exp(-x*y),x),y)

f=

1/y*exp(-x*y)

8.求解微分方程

y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0')

9.求其解。

>>a=[6914-115;114-7-15-6;-21-712-1;61111-9-13]

a=

6914-115

114-7-15-6

-21-712-1

61111-9-13

>>b=[68294-441103]'

b=

68

294

-441

103

>>ra=rank(a)

ra=

4

>>rb=rank([a,b])

rb=

4

%4<5

>>x1=null(sym(a))

x1=

27713/253

-11117/506

-8394/253

1

1619/506

>>a\b

ans=

0

X=K*x1+ans

实验三:

二维图形和三维图形的创建

一、实验目的

1.掌握二维图形的绘制。

2.掌握图形的标注

3.了解三维曲线和曲面图形的绘制。

二、实验内容

1.生成1×10维的随机数向量a,在同一幅图片上分别用红、黄、蓝、绿色绘出其连线图、脉冲图、阶梯图和条形图,并分别标出标题“连线图”、“脉冲图”、“阶梯图”、“条形图”。

>>x=rand(1,10)

x=

Columns1through7

Columns8through10

>>subplot(141);

>>plot(x)

>>subplot(142);

>>stem(x)

>>subplot(143);

>>stairs(x)

>>subplot(144);

>>bar(x)

2.绘制向量x=[132]的饼形图,并把3对应的部分分离出来。

x=[132];

>>pie(x,[01000])

3.用holdon命令在同一个窗口绘制曲线y=sin(t),y1=sin(t+

y2=sin(t+,其中t=[010]。

t=0:

2*pi/100:

10;

y1=sin(t);

plot(t,y1)

holdon

y2=sin(t+;

plot(t,y2)

holdon

y3=sin(t+;

plot(t,y3)

4.绘制曲线x=tcos(3t)

y=tsin2t其中-π≤t≤π,步长取π/100。

要求:

要图形注解、标题、坐标轴标签,并在曲线上截取一点,将相对应的坐标值文本标注出来(ginput())。

t=-pi:

pi/100:

pi;

x=t.*cos(3*t);

y=t.*sin(t).^2;

plot(x,y);

title('曲线图');

legend('x=tcos(3t),y=tsin^2t');

xlabel('x轴数据');

ylabel('y轴数据');

>>holdon

>>[m,n]=ginput

(1)

m=

n=

>>plot(m,n,'or')

>>text(m,n,['m=',num2str(m),'n=',num2str(n)])

5.在三个子图像中,分别绘制三维曲线,三维曲面,三维网格的半径为6,坐标为(6,7,6)的由900个面构成的球面(sphere()),对每个图形标注标题

[x,y,z]=sphere(30);

Z=z*5+6;

X=x*5+6;

Y=y*5+7;

subplot(1,3,1)

mesh(X,Y,Z);

title('三维网格')

subplot(1,3,2)

plot3(X,Y,Z)

title('三维曲线')

subplot(1,3,3)

surf(X,Y,Z)

title('三维曲面')

6.

(1)绘一个圆柱螺旋线(形似弹簧)图。

圆柱截面直径为10,高度为5,每圈上升高度为1。

如左图所示。

2)利用

(1)的结果,对程序做少许修改,得到如右图所示图形。

(>>t=0:

:

5;

x1=5*cos(2*pi*t);

y1=5*sin(2*pi*t);

z=t;

subplot(121),plot3(x1,y1,z)

>>gridon

>>x2=t.*cos(2*pi*t);

>>y2=t.*sin(2*pi*t);

>>z=t;

>>subplot(122),plot3(x2,y2,z)

>>gridon

思考题:

如果要绘制出如图所示的图形,请先指出这四个图形分别对应哪副图,以及请正确填写下列空格

subplot(6,4,[234678]);plot(1:

10);gridon;

subplot(6,4,[10111415]);plot(peaks);gridon;

subplot(6,4,[59]);plot(membrane);gridon;

subplot(6,4,[17182122]);surf(membrane);gridon;

三、设计提示

1.Matlab允许在一个图形中画多条曲线:

plot(x1,y1,x2,y2,……)指令绘制

等多条曲线。

Matlab自动给这些曲线以不同颜色。

标注可用text函数,legend函数等,数据截取ginput函数,。

2.若干个图像在一副图像上显示,可以用holdon,子图像用subplot函数。

3.三维绘图函数为plot3,mesh(),surf()。

实验四:

函数编写与程序设计

一、实验目的

1.掌握M文件的创建。

2.掌握函数的编写规则。

3.掌握函数的调用。

4.掌握基本的输入输出函数以及显示函数的用法。

5.会用Matlab程序设计实现一些工程算法问题。

二、实验内容

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

解:

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

2.求下列分段函数的值

要求:

用if语句实现,分别输出x=,,,,,,时的y值。

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

(length())

解:

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

[]

3.编写一个mcircle(r)函数,调用该函数时,根据给定的半径r,以

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

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

要求:

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

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

(num2cell函数:

将数值矩阵转化为单位矩阵

num2cell(1:

5)={12345})

解:

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

');

ifrem(score,==0

switchscore

casenum2cell(90:

:

100)

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

casenum2cell(80:

:

89)

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

casenum2cell(70:

:

79)

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

casenum2cell(60:

:

69)

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

casenum2cell(0:

:

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

otherwise

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

end

else

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

end

5.编写一个函数,实现对一个向量求以及求平均值的功能。

(要求实现函数中,输入若不是一个向量,则报错)

function[s,m]=qiu(v)

[m,n]=size(v);

if(m>1&n>1)|(m==1&n==1)

error('error')

end

s=sum(v);

m=s/length(v);

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

a(k+2)=a(k)+a(k+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))])

8.编写一个阶乘函数,利用该函数找出最小的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

forn=1:

1000

if(jiecheng(n)>10^100)

break;

end

end

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

str2=['n!

=',num2str(s)];

disp(str1)

disp(str2)

9.程序设计:

公元前五世纪我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:

鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。

百钱买百鸡,问鸡翁、母、雏各几何x+y+z=100

5x+3y+z/3=100

这是一个欠定方程。

forx=0:

19

fory=0:

33

forz=0:

100

if(x+y+z==100)&(5*x+3*y+z/3==100)

d=[x,y,z]

end

end

end

end

三、设计提示

1.函数名和函数文件名应相同;对调用参数的取值范围要检验是否符合要求,如不符合要求,应给出出错信息(用if和error或disp函数实现)。

2.程序设计——“百鸡问题”答案不唯一。

提示:

设x:

鸡翁数,则x的范围:

0~19;y:

鸡母数,则y的范围:

0~33;z:

鸡雏数,则z的范围:

0~100。

实验五:

Matlab多项式和符号运算

二、实验内容

1.将多项式

化为x的降幂排列。

p=poly([2-37-1])

P=poly([2,-3,7,-1])

poly2str(P,'x')

结果:

ans=

x^4-5x^3-19x^2+29x+42

2.求一元高次方程的根。

P1=[1-5-30150273-1365-8204100576-2880];

x1=roots(P1)

结果:

x1=

4.对比用多项式函数的polyder函数及符号函数中的diff函数,求导x2+2x+3。

a=[123]%x2+2x+3

polyder(a)%ans=222x+2

symsx;

f=x^2+2*x+3;

diff(f)%ans=2*x+2

5.求多项式

在点2、4、5的值

A=[13-21];

>>polyval(A,[245])

ans=

17105191

6.计算a(x)=2x3+4x2+6x+8,b(x)=3x2+6x+9的多项式相加(试着编写一个polyadd的函数,实现多项式相加的功能)

a=[2468];

b=[0369];

c=a+b

functiony=polyadd(x1,x2)

n1=length(x1);

n2=length(x2);

ifn1>n2

x2=[zeros(1,n1-n2),x2];

end

ifn2>n1

x1=[zeros(1,n2-n1),x1];

end

y=x1+x2;

end

>>a=[2468];

b=[0369];

c=polyadd(a,b)

7.求多项式

的乘积

;并求

的商和余式。

(conv()deconv())

f1=sym('x^3+3*x^2+5*x+7');

f2=sym('8*x^3-6*x^2+4*x-2');

f=f1*f2

collect(f)

(f-f1)/f2

collect(ans)

结果:

f=

(x^3+3*x^2+5*x+7)*(8*x^3-6*x^2+4*x-2)

f=

8*x^6+18*x^5+26*x^4+36*x^3-28*x^2+18*x-14

h=

(-21+8*x^6+18*x^5+26*x^4+35*x^3-31*x^2+13*x)/(8*x^3-6*x^2+4*x-2)

h=

(-21+8*x^6+18*x^5+26*x^4+35*x^3-31*x^2+13*x)/(8

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

当前位置:首页 > 工程科技 > 能源化工

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

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