MATLAB实习题
- 格式:doc
- 大小:363.00 KB
- 文档页数:13
MATLAB实习题
1 矩阵运算
矩阵建立,转置、加、减、乘、求逆等运算。
(1) 矩阵的建立:
>> a=eye(5);
b=1*a;
b(1,2)=2;b(2,3)=3;b(3,4)=4;b(4,5)=5;
b
运行结果:
b =
1 2 0 0 0
0 1 3 0 0
0 0 1 4 0
0 0 0 1 5
0 0 0 0 1
(2) 矩阵的转置:
>> a=[1 2 3;4 5 6;7 8 9],
b=a'
运行结果:
a =
1 2 3
4 5 6
7 8 9
b =
1 4 7
2 5 8
3 6 9
(3)矩阵的逆:
>> a=[1 2 0;0 3 4;0 0 5];
inv(a)
运行结果:
ans =
1.0000 -0.6667 0.5333
0 0.3333 -0.2667
0 0 0.2000
(4)矩阵的加:
>> A=[1 1;1 1]
A =
1 1
1 1
>> B=[2 2;2 2]
B =
2 2
2 2
>> C=A+B
运行结果;
C =
3 3
3 3
(5)矩阵的减:
>> A=[1 1;1 1]
A =
1 1
1 1
>> B=[2 2;2 2]
B =
2 2
2 2
>> C=A-B
运行结果;
C =
-1 -1
-1 -1
(5)矩阵的乘:
>> A=[1 1;1 1]
A =
1 1
1 1
>> B=[2 2;2 2]
B =
2 2
2 2
>> C=A*B
运行结果;
C =
4 4
4 4
2 M文件的编写与运行
判断一年是否是闰年 function leapyear(year)
%使用该程序判断是否是闰年
sign=0;
if mod(year,4)~=0
sign=0;
elseif mod(year,400)==0
sign=1;
elseif mod(year,100)==0
sign=0;
else
sign=1;
end
if sign==1
fprintf('%4d year is a leap year!\n',year)
else
fprintf('%4d year is not a leap year!\n',year)
end
执行结果:
>> leapyear(1996)
1904 year is a leap year!
>> leapyear(1900)
1900 year is not a leap year!
3 数据文件的建立与读取
例:建立班级一门课成绩数据库,编程读取并排序、另存。
>> score=[80,82,81,65,77,67,55,76,90];
>> Fid=fopen('test.dat', 'w');
>> cnt=fwrite(Fid, score, 'float');
>> fclose(Fid);
>> Fid=fopen('test.dat', 'r')
>> [B,cnt]=fread(Fid, 'float');
>> B
>> sortScore=sort(B,1)%排序
结果:
score=[80,82,81,65,77,67,55,76,90];
Fid=fopen('test.dat', 'w');
cnt=fwrite(Fid, score, 'float');
fclose(Fid);
Fid=fopen('test.dat', 'r')
[B,cnt]=fread(Fid, 'float'); B
sortScore=sort(B,1)%排序
Fid =
3
B =
80
82
81
65
77
67
55
76
90
sortScore =
55
65
67
76
77
80
81
82
90
4 绘二维、三维图
(1)画双纽线
>> p=-2*pi:0.01:2*pi;
r=sqrt(cos(2*p));
x=r.*cos(p);
y=r.*sin(p);
plot(x,y)
运行结果;
(2)画螺线:
a=2;
t=0:.1:20;
r=a*t;
polar(t,r)
运行结果:
(3)画球面:
>> [x,y,z]=sphere(50);
surf(x,y,z)
运行结果:
5 多项式运算
>> p=[2,-1,0,3]
p =
2 -1 0 3
>> q=[2,1]
q =
2 1
>> k=conv(p,q)
运行结果:
k =
4 0 -1 6 3
6 曲线拟合
例:数据的多项式拟合。
多项式拟合
x=[0 30 60 90 120 150 180 210 240 270 300 330 360]
y=[-0.0167 -1.0927 -1.8725 -2.3586 -2.3061 -1.9576 -0.9574 -0.0080 0.8896
1.3877 1.1139 0.8517 -0.0167]
通过y=-0.52-1.90sin(2πt/360-0.079)进行二次多项式拟合
>> x=[0 30 60 90 120 150 180 210 240 270 300 330 360];
y=[-0.0167 -1.0927 -1.8725 -2.3586 -2.3061 -1.9576 -0.9574 -0.0080 0.8896
1.3877 1.1139 0.8517 -0.0167];
fun=@(a,t) a(1)+a(2)*sind(t+a(3))
a0=[-0.5 -1.9 -0.079];
a=nlinfit(x,y,fun,a0)
t=0:5:360;
yf=fun(a,t);
plot(x,y,'o',t,yf)
fun =
@(a,t) a(1)+a(2)*sind(t+a(3))
a =
-0.5239 -1.8995 -14.2382
运行结果:
7 线性规划
例:线性规划求解(如教材中)。
minz=32132xxx
0,,62382432121321xxxxxxxx
>> c=[2;3;1];
a=[1,4,2;3,2,0];
b=[8,6];
[x,y]=linprog(c,-a,-b,[],[],zeros(3,1))
Optimization terminated.
运行结果:
x =
0.8066
1.7900
0.0166 y =
7.0000
8 微分方程数值解
例:求微分方程yxy的通解
>> dsolve('Dy=x+y','x')
ans =
-x-1+exp(x)*C1
9 插值问题
例:样条插值。
给定函数 f(x)=1/(1+x^2),取插值节点为 -5:1:5,利用编制的 Matlab 程序求出三次样条函数,并绘制出准确函数 f(x) 以及所求出的三次样条函数图像,进行比较。
x = -5:0.001:5;
f = 1./(1 + x.^2);
xi = -5:1:5;
fi = interp1(x, f, xi, 'spline');
figure;
plot(x, f); hold on; plot(xi, fi, 'r.-'); xlabel('x');ylabel('fx');
legend('Raw', 'Interp');
运行结果:
10综合练习:计算机模拟
例1追逐问题: 如图,正方形ABCD的四个顶点各有一人.在某一时刻,四人同时出发以匀速v=1米/秒按顺时针方向追逐下一人,如果他们始终保持对准目标,则最终按螺旋状曲线于中心点O.试求出这种情况下每个人的行进轨迹.
O BCDA