MATLAB上机实验练习题答案Word格式文档下载.docx
《MATLAB上机实验练习题答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《MATLAB上机实验练习题答案Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。
要求写出达到题目要求的MATLAB操作过程,不要求计算结果。
年份
1990
1992
1994
1996
1998
2000
2002
2004
2006
2008
2010
产量(万吨)
75.995
91.972
105.711
123.203
131.669
150.697
179.323
203.212
226.505
249.633
256.344
14、在一次化学动力学实验中,在某温度下乙醇溶液中,两种化合物反应的产物浓度与反应时间关系的原始数据如下,请对这组数据进行三次多项式拟合,并画出拟合曲线,已知数据如下。
time=[2.55.07.510.013.017.020.030.040.050.060.070.0]
res=[0.290.560.771.051.361.522.002.272.813.053.253.56]
15、请在-2<
x<
2,-2<
y<
2的范围内绘制出函数
形成的曲面网线图。
16、请在同一窗口画出两条曲线,y1=sin(x),y2=cos(x),要求添加网格线,x轴标注IndependentVariableX,y轴标注DependentVariableY1&Y2,标注标题SineandCosineCurve,在(1.5,0.3)处标注cos(x),坐标轴设定在x轴[0,2Π],y轴[-0.9,0.9]。
答案
1、>
>
A=[234;
132];
U=[123]'
;
X=A\U
X=
-0.8148
1.6667
-0.5926
2、
t=[00.30.81.11.62.3]'
y=[0.820.720.630.600.550.50]'
E=[ones(size(t))exp(-t)];
C=E\y
C=
0.4760
0.3413
x=0:
0.01:
2.5;
z=0.4760+0.3413*exp(-x);
plot(t,y,'
O'
x,z,'
r:
'
)
A=[3105;
0-673;
0430;
2-126];
Y=[2478]'
X=A\Y
-4.8247
1.3944
0.4741
3.0159
4、
t=[12345678910]'
y=[4.8424.3623.7543.3683.1693.0833.0343.0163.0123.005]'
E1=[ones(size(t))exp(-t)];
C=E1\y
3.1621
5.1961
E2=[ones(size(t))t.*exp(-t)];
D=E2\y
D=
3.0039
5.0046
x=1:
10;
y1=3.1621+5.1961*exp(-x);
y2=3.0039+5.0046*x.*exp(-x);
x,y1,'
x,y2,'
b-'
p1=polyfit(t,y,2)
p1=
0.0411-0.63835.3937
p2=polyfit(t,y,3)
p2=
-0.00410.1085-0.94935.7443
y3=polyval(p1,x);
y4=polyval(p2,x);
x,y3,'
x,y4,'
6、
t=[00.20.40.60.81.02.05.0]'
y=[1.01.511.882.132.292.402.60-4.00]'
p=polyfit(t,y,4)
p=
-0.09930.7935-2.28412.98820.9995
-0.0565
2.5674
0.001:
5;
y1=-0.0565+2.5674*exp(-x);
y2=polyval(p,x);
7、
•001functioncompare_interp()
•002%COMPARE_INTERP不同插值运算的比较
•003
•004%原始数据
•005[x,y]=meshgrid(-3:
1:
3);
•006z=peaks(x,y);
•007figure
(1);
clf
•008surfc(x,y,z);
•009title('
原始数据'
•010%进行插值运算
•011[xi,yi]=meshgrid(-3:
0.25:
•012zi1=interp2(x,y,z,xi,yi,'
nearest'
);
•013zi2=interp2(x,y,z,xi,yi,'
linear'
•014zi3=interp2(x,y,z,xi,yi,'
cubic'
•015zi4=interp2(x,y,z,xi,yi,'
spline'
•016%通过可视化结果比较
•017figure
(2)
•018subplot(2,2,1);
surf(xi,yi,zi1);
•019title('
二维插值-'
•020subplot(2,2,2);
surf(xi,yi,zi2);
•021title('
•022subplot(2,2,3);
surf(xi,yi,zi3)
•023title('
•024subplot(2,2,4);
surf(xi,yi,zi4)
•025title('
•026%可视化结果
•027figure(3)
•028subplot(2,2,1);
contour(xi,yi,zi1)
•029title('
•030subplot(2,2,2);
contour(xi,yi,zi2)
•031title('
•032subplot(2,2,3);
contour(xi,yi,zi3)
•033title('
•034subplot(2,2,4);
contour(xi,yi,zi4)
•035title('
•
8、
x=-pi:
pi/4:
pi;
y1=sin(x);
y2=cos(x);
y3=sinh(x);
y4=cosh(x);
plot(x,y1,'
rO:
b*-'
gs--'
k^-.'
9、
X=[19.322.151.6;
34.270.382.4;
61.482.990.8;
50.554.959.1;
29.439.347];
x=sum(X)
x=
194.8000269.5000330.9000
explode=[001];
pie(x,explode)
10、
t=[00.30.81.11.62.3]'
y=[0.50.821.141.251.351.40]'
E=[ones(size(t))exp(-t)t.*exp(-t)]
E=
1.00001.00000
1.00000.74080.2222
1.00000.44930.3595
1.00000.33290.3662
1.00000.20190.3230
1.00000.10030.2306
A=E\y
A=
1.3974
-0.8988
0.4097
Y=1.3974-0.8988*exp(-x)+0.4097*x.*exp(-x);
x,Y,'
r-'
11、
A=struct('
name'
{'
江明顺'
'
于越忠'
邓拓'
},'
NO'
071023'
060134'
050839'
});
A
(1).level=struct('
height'
176'
weight'
82'
A=
1x3structarraywithfields:
name
NO
level
A
(2).level=struct('
168'
74'
A(3).level=struct('
182'
77'
12、
B=cell(1,2);
B{1,1}=struct('
date'
2007/06/04'
billing'
[125.7389.3;
254.9538.5])
B=
[1x1struct][]
B{1,2}=struct('
maggie'
profession'
teacher'
hobby'
dance'
[1x1struct][1x1struct]
cellplot(B)
13、
year=1990:
2:
2010;
product=[75.99591.972105.711123.203131.669150.697179.323203.212226.505249.633256.344];
p1999=interp1(year,product,1999,’spline’)
x=1990:
y=interp1(year,product,x,'
plot(year,product,'
*'
x,y)
14、
X=[2.55.07.510.013.017.020.030.040.050.060.070.0];
Y=[0.290.560.771.051.361.522.002.272.813.053.253.56];
(
P=polyfit(X,Y,3);
x=2.5:
0.1:
70;
y=polyval(P,x)
plot(X,Y,’O’,x,y)
girdon
15、
clear
x=-2:
0.2:
2;
y=-2:
[X,Y]=meshgrid(x,y);
Z=X.*exp(-X.^2-Y.^2);
mesh(X,Y,Z)
16、
》x=0:
pi/10:
2*pi;
》y1=sin(x);
》y2=cos(x);
》plot(x,y1,x,y2)
》gridon
》xlabel(‘IndependentVariableX’);
》ylabel(‘DependentVariableY1&Y2’);
》title(‘SineandCosineCurve’)
》text(1.5,0.3,’cos(x)’);
》axis([02*pi-0.90.9])
复习要点
矩阵产生和操作
一.diag对角矩阵和矩阵的对角化
1.x=diag(v)产生v的元素处于主对角线的对角方阵,v为n元向量。
x=diag([123])x=100
020
003
2.x=diag(v,k)k表示v的元素处在第k条对角线上
k=0主对角线y=diag([123],1)
k>
0主对角线上y=0100
k<
0主对角线下0020
.0003
.0000
3.v=diag(x,k)x为矩阵,v为列向量,x的第k条对角线上的元素
z=944v=diag(z)v=diag(z,-1)
2809
678v=8v=2
87
二.reshape阵列重新排列
B=reshape(A,m,n)把A重新排成m×
n的矩阵B
△矩阵元素是按列存储的
A=9684D=reshape(A,4,2)D=98
247027
64
40
三.rot90矩阵旋转90o(反时针)
rot90(A,k)将A反时针旋转k*90o
A=537B1=rot90(A)区别于A'
B2=A'
723B1=735B2=574
425322322
574735
B3=rot90(A,3)B3=475
223
537
四.fliplr左右翻转---列
A=9684B=fliplr(A)
2470B=4869
0742
五.flipud上下翻转---行
B=flipud(A)B=2470
9684
六.tril下三角阵
L=tril(x,k)B1=tril(A,1)
A=9684B1=9600
24702470
七.triu上三角阵
L=triu(x,k)
B2=triu(A,1)B2=0684
0070
八.cat阵列连接C=cat(dim,A,B)
将A,B在dim维连接起来
G=cat(1,B1,B2)G=9600
2470
0684
九.repmat复制并平铺阵列
1.B=repmat(A,m,n)A为矩阵,将A平铺成m×
n格式
A=[12;
34]B=repmat(A,2,3)B=AAA
AAA
2.B=repmat(A,2,3)A为标量B=repmat(5,2,3)B=555
555
十.Meshigrid
[X,Y]=meshgrid(1:
4,1:
4)
X=
1234
Y=
1111
2222
3333
4444
矩阵逻辑运算
1.all—矩阵所有元素是否非零
有1个或多个0→0
A为向量
All(A)
A为矩阵—按列
a=[12;
04]b=au(0)b=01
2.any—测试任意非零值
只要有不是0→1
B=any(A)
所有都为0→0
a=[120;
400;
050]any(a)ans=110
3.find—查找非零元素的值和下标k=find(x)—阵列中
[i,j]=find(x)—矩阵中[i,j,v]=find(x)—v为值,可得
v值的列
a=zeros(5,20);
a(3,7)=0.5;
i=3j=7v=0.5000
a(4,15)=-0.4;
415-0.4000
[i,j,v]=find(a);
4.exist:
检查给定变量或文件是否存在
a=exist('
item'
ident=exist('
kind)
5.is*检测状态
A=one(3,3);
s='
ad3fi'
A(:
:
)=[];
isletter
isempty(A);
ans=11011
ans=1
6.logical—数值转变成逻辑值
logical(A)返回能够用于逻辑索引或逻辑测试的数组。
A=logical(eye(3))
A=100B=rand(3)B=0.44470.92180.4057
0100.61540.73820.9355
0010.79190.17630.9169
B(A)
ans=0.4447
0.7382
0.9109
字符串部分
字符串的比较
三种情况:
1.比较两个字符串或两个字符串的一部分是否相等
2.逐个比较两个字符串中的字符,判别是否相等
3.对字符串中的每一个元素进行分类判别是字符还是空格
一.比较两个字符串strcmp
strcmp判别两个字符串是否相等
strncmp判别两个字符的前n个字符是否相等。
Strncmp
Eg:
str1=‘hello’
str2=‘help’
strcmp(str1,str2)
ans=0
strcmp(str1,str2,3)
ans=1
这两个函数还可以比较两个字符串的单元数组。
A={‘pizza’;
‘chips’;
‘candy’;
‘cake’;
‘beer’};
B={‘pizza’;
‘chololate’;
‘pretzels’;
‘beef’;
strcmp(A,B)strcmp(A,B,1)strncmp(A,B,4)
ans=1ans=1ans=1
010
000
1.11
二.用运算符比较字符串
“==”比较两个字符串中对应字符是否相同
A=‘fate’;
B=‘cake’;
A==B
ans=0101
“~=”表示不等于
A~=B
ans=1010
三.字符串中字符的分类
isletter是否为字母isspace是否为空格或制表符
mystring=‘Room401’;
A=isletter(mystring);
A=11110000
B=isspace(mystring)
B=00001000
对二维数组也可以
A=[‘12A’;
’13B’];
L=isletter(A)S=isspace(A)
L=0001S=0100
00010010
对单元矩阵形式的字符串,不能直接应用这两个函数。
但可以对指定的单元进行判别。
strcell={‘piza’;
‘chis’;
‘cany’;
‘er’};
LL=isletter(strcell{1});
LL=11011
SS=isspace(strcell{2})
SS=00010
字符串的查找与替换
一.strrep可实现标准的查找与替换。
Eg:
label=‘sample1,10/28/95’;
newlabel=strrep(label,‘10/28/95’,‘12/20/1999’);
newlabel=sample1,12/20/1999
二.findstr用于在字符串中查找指定的子串
找到一个子串返回开始位置
找到多个子串用一个矢量指出它们的位置
没找到返回[]
position=findstr(‘1’,newlabel);
position=81117
position=find(‘wa’,newlabel);
position=[]
三.strtok先在字符串中查找分隔字符(如空格,‘/’,制表符等),然后返回第1个分隔符前的子串。
first=strtok(label);
first=sample
first=strtok(label,‘1’)
first=sample1,10
知识要点
MATLAB的特点
1.以复数矩阵作为基本编程单元,使操作变得轻而易举,矩阵不需定义。
2.语句简单,编程效率高,用数学语言编写比C,Basic,Fortran更加接近人们书写计算公式的思维方式。
MATLAB俗称演算纸式科学算法语