MATLAB全部实验及答案

更新时间:2023-03-11 19:39:01 阅读量: 教育文库 文档下载

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

MATLAB全部实验及答案

实验一、MATLAB基本操作

实验内容及步骤

4、 有关向量、矩阵或数组的一些运算 (1) 设A=15;B=20;求C=A+B与c=a+b?

(2) 设A=[1 2 3;4 5 6;7 8 9],B=[9 8 7;6 5 4;3 2 1];求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 -2 3;4 5 -4;5 -6 7]

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

a=[1 -2 3;4 5 -4;5 -6 7]; [x,y]=find(a<0); c=[];

for i=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=[1 2 3;3 4 2;5 2 3],求a^2=?,a.^2=? a^2= 22 16 16 25 26 23

26 24 28

a.^2=

1 4 9 9 16 4 25 4 9

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

clear

X=[1 2;8 9;3 6]; X( : ) 转化为列向量

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

2 0 8 0 0 0 0 1 0 4 0 0 6 0 0 0 方法一: clear,clc

data=[2 8 1 4 6]; ir=[1 1 2 3 4 ]; jc=[1 3 4 2 1];

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 = [ 1 2 3 ]; B = [ 4 5 6 ]; >> C = 3.^A >> D = A.^B 5、 已知y?3?4t???2?esin??43t?3??若需要计算t∈[-1,1],取间隔为0.01,试计算出相对应的y值。

用步长为0.01的for循环 搞定

实验二、MATLAB运算基础

实验内容及步骤 (一)

2、 设有矩阵A和B,A=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18

19 20;21 22 23 24 25],B=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11] (1) 求它们的乘积C

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

解:A=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20;21 22 23 24 25];

B=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11]; c=A*B

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

3、 已知A=[23 10 -78 0;41 -45 65 5;32 5 0 32;6 -54 92

14],取出其前3行构成矩阵B,其前两列构成矩阵C,其左下角3x2子矩阵构成矩阵D,B与C的乘积构成矩阵E,分别求E

解: A=[23 10 -78 0;41 -45 65 5;32 5 0 32;6 -54 92 14];

B=A([1:3],:) c=A(:,[1,2]) D=A([2:4],[1,2]) E=B*c

E

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

解:A=[23 10 -78 0;41 -45 65 5;32 5 0 32;6 -54 92 14] rot90(A) rot90(A,3)

5、求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) (二)

1、求[100,999]之间能被61整除的数及其个数(提示:先利用冒号表达式,再利用find和length函数。)

2、建立一个字符串向量,删除其中的大写字母(提示:利用find函数和空矩阵。)

解:1)clear,clc 2)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、 写出使以下这段文字成为字符串的MATLAB指令。注意保持这段文字的

格式:

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

In GB usage quotation marks are usually single: 'fire!'.

解:a=['在英式用法中,引号通常是单引号,如''Fire!''。' ]; b=['In GB usage quotation marks are usually single: ''fire!''. ' ];

c=strvcat(a,b)

4、 用结构体数组来存储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

5、 建立矩阵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)=[]

6、 利用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、 分别使用for循环语句和while循环语句找出最小的n值,使得n!>10100,

并求出n!。要求显示的结果为 n=70

n!=1.197857e+100>1e100 或

70!=1.197857e+100>1e100

用IF语句执行如下: s=1; for n=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; for n=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

法二:clear all,clc

for n=1:50 if n==1 f(1)=1; elseif n==2 f(2)=0; elseif n==3 f(3)=1; elseif n>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;

for k=1:10000 %不能是3:10000 a(k+2)=a(k)+a(k+1); if a(k)>10000 break; end end

disp(['k=',num2str(k)]) disp(['a(k)=',num2str(a(k))]) 法二:clear,clc s=1; for n=1:inf

s=s*n; if s>10^100 break end end

fprintf('%d!=%1.6e>1e100\\n',n,s)

实验五、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('请输入您的分数:'); if rem(score,0.5)==0 switch score

case num2cell(90:0.5:100) disp('您的成绩等级为 A') case num2cell(80:0.5:89) disp('您的成绩等级为 B') case num2cell(70:0.5:79)

disp('您的成绩等级为 C') case num2cell(60:0.5:69) disp('您的成绩等级为 D') case num2cell(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'); switch fuhao 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)]) otherwise disp('请输入正确的符号') end

3、 求下列分段函数的值

??2???6,??0且 ??-3?y???2?5??6,0??<10,??2且 ??3 ??2???1,其他? 要求:用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的值:'); for k=1:length(x)

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

elseif x(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

for i=1:length(y)

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

实验六 MATLAB函数文件程序设计

实验内容及步骤 1、

编写一个函数文件chengji.m,用于求两个矩阵的乘积和点乘,然后在命

令行窗口中调用该函数(提示:使用varargout函数)

要求:1)当两矩阵是尺寸相同的方阵时,返回它们的乘积和点乘。 2)当两矩阵不是尺寸相同的方阵时,则根据它们的尺寸,分别进行乘积或点乘

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

解:function varargout=chengji(a,b) [x,y]=size(a); [xx,yy]=size(b); if xx==yy&x==y&x==xx varargout{1}=a*b; varargout{2}=a.*b; elseif x==xx&y==yy varargout{1}=a.*b; disp('只能做点乘') varargout{2}=0; elseif x==yy&xx==y

disp('可以做两种矩阵乘') varargout{1}=a*b; varargout{2}=b*a; elseif x==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为矩阵。

解:function y=qiuhe(a) y=[];

[x,yy]=size(a); if x==1 s=0; for k=1:yy s=s+a(1,k); end y=s; else

for j=1:yy s=0; for i=1:x s=s+a(i,j); end y(1,j)=s; end end

3、 编写一个阶乘函数jiecheng.m,然后在试验三的编程题“分别使用for

和while语句找出最小的n值,使得n!>10100,并求出n!”程序中调用该函数。

解:function s=jiecheng(n) s=1; if n==0 s=1; elseif n<0

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

for i=1:n s=s*i; end end

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

实验内容

1.已知原始数据x?0:1:4*pi,y?sin(x).*exp(?x/5),插值点为xi?0:0.3:4*pi,试用四种不同的插值方法进行插值,并在一副图中绘出四种插值曲线。 解: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 270 250 15 290 270 17 330 310 19 20 解:clear,clc t=[13 15 17 19 20]; sex=[0,1]';

y=[270 290 330 350 380;250 270 310 330

男 女 350 380 330 360 360 ]; 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=[70 122 144 152 174 196 202]; 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年利润') grid on

4. 先使用命令load加载census.mat得到一组数据(cdate,pop),该数据是美国自1790到1990年(以10年为一单位)的总人口。利用回归法拟合,预测出美国在2010年的人口总数,写出拟合模型y?a0?a1x?a2x2(其中y为pop,x为cdate),并绘出拟合图。 解:clear all,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:0.1:2; y1=exp(x1); x2=0.1:0.1:5; y2=log(x2);

plot(x1,y1,'-r',x2,y2,'-b'); title('二维图');

legend('y=exp(x)','y=log(x)'); xlabel('x轴数据'); ylabel('y轴数据'); grid on;

2)绘制tan图形,其中x的取值为(0:pi/30:pi/2)。

要求:要有图例、标题、坐标轴标签('x轴数据'和'y轴数据');曲线的自己设置。绘制出的图形应如下右图所示。

:x=0:pi/100:pi/2; y=tan(x);

plot(x,y,'-r+');

axis([0 pi/2 0 5]);

clm title('正切函数'); legend('y=tan(x)'); xlabel('x轴数据');

ylabel('y轴数据'); 3)绘制曲线 x=tcos(3t)

y=tsin2t 其中-π≤t≤π,步长取π/100。 要求:要有图例、标题、坐标轴标签;每条曲线的clm

自己设置。

解:clear,clc t=-pi:pi/100:pi; x=t.*cos(3*t); y=t.*sin(t).^2; plot(x,y); title('曲线图');

legend(strvcat('x=tcos(3t)','y=tsin^2t')); xlabel('x轴数据'); ylabel('y轴数据'); 2、 三维图形的绘制

分别用线框图和曲面图表现函数z=cos(x)sin(y)/y,其中[-1.5pi,1.5pi],y=x,要求:要有标题、坐标轴标签

x的取值为

解:clear,clc

[x,y]=meshgrid(-1.5*pi:1.5*pi); z=cos(x).*sin(y)./y; subplot(1,2,1); surf(x,y,z)

title('三维曲线图01'); xlabel('x轴数据'); ylabel('y轴数据'); zlabel('z轴数据'); subplot(1,2,2); mesh(x,y,z);

title('三维曲线图02'); xlabel('x轴数据'); ylabel('y轴数据'); zlabel('z轴数据');

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

Top