MATLAB全部实验及答案文档格式.docx
- 文档编号:19551223
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:22
- 大小:201.90KB
MATLAB全部实验及答案文档格式.docx
《MATLAB全部实验及答案文档格式.docx》由会员分享,可在线阅读,更多相关《MATLAB全部实验及答案文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
(8)使用三元组方法,创建下列稀疏矩阵
2080
0001
0400
6000
方法一:
data=[28146];
ir=[11234];
jc=[13421];
s=sparse(ir,jc,data,4,4);
full(s)
方法二:
不用三元组法
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;
2122232425];
B=[3016;
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<
D、E&
D、E|D、~E|~D。
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<
D,E&
D,E|D,~E|~D
4、使用函数,实现矩阵左旋90°
或右旋90°
的功能
A=[2310-780;
6-549214]
rot90(A)
rot90(A,3)
5、写出使以下这段文字成为字符串的MATLAB指令。
注意保持这段文字的格式:
在英式用法中,引号通常是单引号,如'
Fire!
'
。
InGBusagequotationmarksareusuallysingle:
'
fire!
.
解:
a=['
];
.'
c=strvcat(a,b)
6、用结构体数组来存储2名学生的基本情况数据,每名学生的数据包括学号、姓名、专业和2门课程的成绩。
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,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:
89)
您的成绩等级为B'
casenum2cell(70:
79)
您的成绩等级为C'
casenum2cell(60:
69)
您的成绩等级为D'
casenum2cell(0:
59.5)
您的成绩等级为E'
otherwise
你输入的成绩不合理'
else
你输入的成绩不合理,若出现小数只能是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)])
-'
he=a-b;
输入的两数差='
*'
}
he=a*b;
输入的两数乘积='
/'
he=a/b;
输入的两数商='
otherwisedisp('
请输入正确的符号'
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;
y(k)=x(k).^2-x(k)-1;
length(y)
y('
num2str(x(i)),'
)'
num2str(y(i))]);
实验四MATLAB程序设计
1、分别使用for循环语句和while循环语句找出最小的n值,使得n!
10100,并求出n!
要求显示的结果为
n=70
n!
=1.197857e+100>
1e100
或
70!
用IF语句执行如下:
s=1;
forn=1:
100
s=s*n;
if(s>
10^100)
break;
str1=['
n='
num2str(n)];
str2=['
num2str(s)];
disp(str1)
disp(str2)
用WHILE语句执行如下:
n=1;
s=1;
while(s<
=10^100)
n=n+1;
num2str(n-1)];
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);
[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<
MAX=
406631
x=
49
MIN=
-403795
y=
50
SUM=
76861
positive=
25
zero=
2
negative=
23
法二:
clearall,clc
ifn==1
f
(1)=1;
elseifn==2
f
(2)=0;
elseifn==3
f(3)=1;
elseifn>
f(n)=f(n-1)-2*f(n-2)+f(n-3);
[MAX,y]=max(f)
[Min,x]=min(f)
positive=length(find(f>
zero=length(find(f==0))
negative=length(find(f<
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)>
disp(['
k='
num2str(k)])
a(k)='
num2str(a(k))])
inf
ifs>
10^100
break
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;
只能做点乘'
)
varargout{2}=0;
elseifx==yy&
xx==y
可以做两种矩阵乘'
varargout{2}=b*a;
elseifx==yy||xx==y
try
只能做矩阵乘'
catch
varargout{1}=b*a;
error('
这两个矩阵不能乘'
2、编写一函数qiuhe.m,实现sum(A)的功能,其中A为矩阵。
functiony=qiuhe(a)
[x,yy]=size(a);
ifx==1
s=0;
yy
s=s+a(1,k);
y=s;
forj=1:
fori=1:
x
s=s+a(i,j);
y(1,j)=s;
3、编写一个阶乘函数jiecheng.m,然后在试验三的编程题“分别使用for和while语句找出最小的n值,使得n!
10100,并求出n!
”程序中调用该函数。
functions=jiecheng(n)
ifn==0
elseifn<
n必须大于等于0'
else
n
s=s*i;
实验六数据插值与曲线拟合实验
实验内容
1.已知原始数据
,插值点为
,试用四种不同的插值方法进行插值,并在一副图中绘出四种插值曲线。
x=0:
1:
4*pi;
y=sin(x).*exp(-x/5);
xi=0:
0.3:
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轴'
16)
ylabel('
Y轴'
2.考虑下面的数据,一位举重教练收集了不同性别的举重动员每个年龄的最大举重磅数,他相信这三者之间存在着函数关系,请创建一个年龄数组,以便估算当前队伍中队员(要求13~20岁每一岁都有)的最大举重。
重
举
大
最
13
15
17
19
20
男
270
290
330
350
380
女
250
310
360
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);
-ro'
x1,y1,'
-b*'
某乡镇企业2004-2013年的生产利润'
legend('
04-10年的利润'
04-13年的利润趋势线'
年份'
利润'
text(2011,polyval(k,2011),'
<
---2011年利润'
text(2012,polyval(k,2012),'
---2012年利润'
gridon
4.先使用命令load加载census.mat得到一组数据(cdate,pop),该数据是美国自1790到1990年(以10年为一单位)的总人口。
利用回归法拟合,预测出美国在2010年的人口总数,写出拟合模型
,并绘出拟合图。
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-'
年份(十年)'
人口(百万)'
第四题美国自1790-1990年的总人口'
text(1990,248.73,'
----之后为拟合数据'
原数据'
拟合曲线'
实验七MATLAB绘图
实验内容
1、二维图形的绘制
1)设计程序,在一个图形窗体中画出函数y=ex和y=logx的特性曲线。
其中y=ex中x取值为(-2:
0.1:
2),y=logx中x取值为(0.1:
5)。
要有图例、标题('
二维图'
)、坐标轴标签('
x轴数据'
和'
y轴数据'
);
每条曲线的clm自己设置。
x1=-2:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 全部 实验 答案