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