【原创】MATLAB实验报告-第二次-用MATLAB实现计算数据可视化-北京交通大学

MATLAB上机实验报告(2)

实验内容:

一、      试用如下几种方法来建立向量,观察结果

(1) x=1:5, x=(1:5)’

           实验结果: x=1:5 是行向量,x=(1:5)’是列向量.且1为初始值,5为终止值,默认的步长为1.

>> x=1:5

x =

     1     2     3     4     5

>> x=(1:5)'

x =

     1

     2

     3

     4

     5

2x=0:pi/4:pi

实验结果:     x=0:pi/4:pi指的是x=(0,0.25*pi,0.50*pi,0.75*pi,pi).其中pi为圆周率,初始值为0,终止值为pi,步长为pi/4.

>> x=0:pi/4:pi

x =

         0    0.7854    1.5708    2.3562    3.1416

3x=(0:0.2:3)’, y=exp(-x).*sin(x)

实验结果: x的初始值为0,终止值为3,步长为0.2.而函数y表示将x向量中的每一个数代入函数y=e^(-x)*sin(x)得到的函数值组成的向量.

>> x=(0:0.2:3)', y=exp(-x).*sin(x)

x =

         0

    0.2000

    0.4000

    0.6000

    0.8000

    1.0000

    1.2000

    1.4000

    1.6000

    1.8000

    2.0000

    2.2000

    2.4000

    2.6000

    2.8000

    3.0000

y =

         0

    0.1627

    0.2610

    0.3099

    0.3223

    0.3096

    0.2807

    0.2430

    0.2018

    0.1610

    0.1231

    0.0896

    0.0613

    0.0383

    0.0204

    0.0070

4k=linspace(-pi,pi,5), k=logspace(-3,-1,5)

实验结果: k=linspace(-pi,pi,5),产生的是初始值为-pi,终止值为pi,元素总数为5的行向量,即k的步长为pi/2. k=logspace(-3,-1,5)产生的是初始值为10^(-3),终止值为10^(-1),元素总数为5的列向量.其中第n个元素为10^(-3+0.5*n).

>> k=linspace(-pi,pi,5), k=logspace(-3,-1,5)

k =

   -3.1416   -1.5708         0    1.5708    3.1416

k =

    0.0010    0.0032    0.0100    0.0316    0.1000

二、      已知x=[1 2 3],y=[4 5 6],试计算z=x.*y, x.\yx./y

实验结果:直接输入x,y,用分号结束每一行的语句,最后求z.

>> x=1:3;

>> y=4:6;

>> z=x.*y

z =

     4    10    18

>> z=x.\y

z =

    4.0000    2.5000    2.0000

>> z=x./y

z =

    0.2500    0.4000    0.5000

三、      解线性方程

                 

实验结果:假设方程为z*x=y.输入矩阵y,z,则x=z\y.

>> y=[24,96;34,136;36,144;35,140;15,60];

>> z=[5,7,6,5,1;7,10,8,7,2;6,8,10,9,3;5,7,9,10,4;1:5];

>> x=z\y

x =

    1.0000    4.0000

    1.0000    4.0000

    1.0000    4.0000

    1.0000    4.0000

    1.0000    4.0000

四、      求顶点是A(2,5,6),B(11,3,8),C(5,1,11)的三角形各边的长。

实验结果:输入点A,B,C的坐标,定义向量AB,BC,CA,用norm()计算向量的模,即边长.

>> A=[2,5,6];

>> B=[11,3,8];

>> C=[5,1,11];

>> AB=B-A;

>> BC=C-B;

>> CA=A-C;

>> LAB=norm(AB)

LAB =

    9.4340

>> LBC=norm(BC)

LBC =

     7

>> LCA=norm(CA)

LCA =

    7.0711

五、      进行如下逻辑运算,观察结果。

1P=[1 0 0],   ~P,    P|(~P),     P&(~P)

实验结果:

~P为非P,即若P中元素为0,则~P中对应元素为1;若若P中元素为1,则~P中对应元素为0.

|为或,即若P与~P中对应元素中至少一个为1,则其或为1;若两元素均为0,则其或为0.

&为与,即若即若P与~P中对应元素均为1,则其与为1;否则其与为0.

>> P=[1 0 0];

>> ~P

ans =

     0     1     1

>> P|(~P)

ans =

     1     1     1

             

>> P&(~P)

ans =

     0     0     0

2C=rem(P,2),   C&P,    C|P,    (C-1)&P

实验结果:

C=rem(P,2)意为P中的每一个元素对2求余数,若余数为0,则C中对应元素为1;若余数不为0,则C中对应元素为0.则C=(1,0,0).

则C&P=(1,0,0);C|P=(1,0,0).

(C-1)为C中的所有元素均-1,若结果为负数,则输出为0.所以C-1=(0,0,0).

则(C-1)&P=(0,0,0).

>> C=rem(P,2);

>> C&P

ans =

     1     0     0

>> C|P

ans =

     1     0     0    

>> (C-1)&P

ans =

     0     0     0

3any(P),     all(P),     all(P|(~P))

实验结果:

any(P)意为若P中有至少一个元素不为0,则输出1;若P中全为0,则输出0.所以any(P)=1.

all(P)意为若P中所有元素非零,输出1;反之输出0. 所以all(P)=0.

P=(1,0,0),~P=(0,1,1),P|(~P)=(1,1,1).则all(P|(~P))=1.

>> any(P)

ans =

     1

>> all(P)

ans =

     0

>> all(P|(~P))

ans =

     1

六、      进行如下关系运算,观察结果。

(1) y=[4 2 1 5 3 0 6]; i=find(y>3.0)

实验结果:

find表示寻找逻辑值的向量元素下标,在此题中,y向量中的元素大于3的有4,5,6,它们的下标分别是1,4,7.所i=(1,4,7).

>> y=[4 2 1 5 3 0 6];

>> i=find(y>3.0)

i =

     1     4     7

(2) t=1/0;      t==NaN,    isnan(t)   

 实验结果:

 定义t=1/0,将t与NaN比较,若t为NaN值,即非数值时返回1,若t不为NaN值,即为数值值时返回0.则isnan(t)=0.

>> t=1/0;

>> t==NaN;

>> isnan(t)

ans =

     0

七、      MATLAB语言实现下面的分段函数

  

实验结果:

>> x=input('请输入x的值:');

if x>1

   y= 1;

elseif -1<=x<=1

   y=x;

else

   y=-1;

end

y

请输入x的值:7

y =

     1

八、      分别用forwhile循环语句编写程序,求出

实验结果:

for循环语句:

>> y=0;

>> n=63;

>> for i=0:1:63

       y=y+2.^i;

   end

>> y

y =

  1.8447e+019

while循环语句:

>> y=0;

>> i=0;

>> while i<=63

   y=y+2.^i

   i=i+1

   end

>> y

y =

  1.8447e+019

   

九、      用对分法求解超越方程

实验结果:

>> x1=0;x2=pi;

for I  = 1: 32

   y1 =log(x1)-cos(x1+pi/4);

   y2 =log(x2)-cos(x2+pi/4);

    x = 0.5*(x1+x2);

    y =log(x)-cos(x+pi/4);

   if y*y1>0,x1=x;end

   if y*y2>0,x2=x;end

end

>> x

x =

0.8957

实验感想:

              本次实验是我做的第二次MATALB实验,相对于上一次实验来说,难度大了不少.因为之前课上讲的内容没有经过实践,基本都忘得差不多了,做实验时又需要重新复习.但是这次实验的内容对于我们其他课程的学习都十分有帮助.并且本次实验中需要使用的if-else,for,while等语句都和C语言语句类似,对于有一定C语言基础的我来说,还算比较熟悉,能较熟练地应用.相信这门课程一定会对我的学习有很大帮助,我会努力学习并熟练掌握MATLAB的使用的.

       谢谢老师!

 

第二篇:《MATLAB及应用》实验报告1 MATLAB数值计算

电气工程学院

实 验 报 告

实验项目名称     MATLAB数值计算          

所属课程名称     MATLAB及应用            

实 验 类 型       上机实验                   

实 验 日 期       20##-03- 5                   

指 导 教 师       XXXXXX                   

          XXXXXXXXX           

          XXXXXXXXXX          

           XXXXXXXX           

                                 

一、实验名称

MATLAB数值计算

二、实验目的

(1)掌握MATLAB变量的使用

(2)掌握MATLAB数组的创建

(3)掌握MATLAB数组和矩阵的运算

(4)熟悉MATLAB多项式的运用 

三、实验原理

1. 矩阵分析

       矩阵转置:单引号(’)

       矩阵的旋转:rot90(A,k),功能是将矩阵A旋转90度的k倍,缺省值是1

       矩阵的左右翻转:fliplr(A)

       矩阵的上下翻转:flipud(A)

       矩阵的逆:inv(A),与A^(-1)等价

       矩阵的行列式:det(A)

       矩阵的秩: rank(A)

       矩阵的迹:trace(A)

       将矩阵化为最简式:rref(A)

       矩阵的特征值与特征向量:(1) E = eig(A);矩阵A的所有特征值构成向量E;(2) [V,D]=eig(A);A的所有特征值构成对角阵D,A的特征向量构成V的列向量;

      2. 多项式

       多项式的建立:若多的项的全部根构成的向量为X,则以X为根的多项式为poly(X)

       多项式的根:roots(p)计算以向量p为系数的多项式的根,包括重根,复根

       多项式求值:polyval(p,x),p是多项式的系数,x可以是一个数也可以是一个矩阵

     多项式求拟合次数:polyfit(x,y,n),x可以是一个数也可以是一个矩阵,y是x对应的数或矩阵

       多项式的四则运算:(1)P1+P2;(2)P1-P2;(3)conv(P1,P2), (4)deconv(P1,P2)

四、实验内容

1. 已知矩阵               11  12  13  14 

                             21  22  23  24

                        A=  31  32  33  34

41    42  43  44

(1) A(:,1)           (2) A(2,:)            (3) A(:,2:3)

(4)  A(2:3,2:3)      (5) A(:,1:2:3)         (6) A(2:3)

(7)  A(:)              (8) A(:,:)          (9) ones(2,2)

(10) eye(2)          (11) [A,[ones(2,2);eye(2)]]  (12) diag(A)

  (13) diag(A,1)       (14) diag(A,-1)            (15) diag(A,2)

2. 已知  .求(1)A的逆;(2)A的行列式;(3)A的迹;

(4)A的所有特征向量和特征值。

3. A=magic(3),B=7*rand(3),计算数组A、B乘积,计算A&B,A|B,~A,A==B,A>B

4. 生成一个4阶Hilbert矩阵H,(1)求H的转置;(2)将H旋转90度;(3)对H实行左右翻转;(4)对H实行上下翻转。

5 输入如下矩阵A

          0  p/3 

       A=   p/6      p/2

(1) 求矩阵B1, B1中每一元素为对应矩阵A中每一元素的正弦函数

(2) 求矩阵B2,  B2中每一元素为对应矩阵A中每一元素的余弦函数

(3) 求 B12+B22

(4) 求矩阵A的特征值与特征矢量:称特征矢量为M,而特征值矩阵为L

(5) 求Msin(L)M-1

(6)使用funm命令求矩阵A的正弦函数(结果应该与(5)同)

(7)求cosA

(8) 证明 sin2A+cos2A=I

6  某专业有三名研究生,本学期选修了四门课程,若这些研究生的姓名,学号,性别,出生年月,课程名称,考试成绩可任意假定,

       (1)分别用结构型变量和细胞型变量表示以上信息;

       (2)举例说明查阅以上任何一条信息的方法;

       (3)求每一个研究生的平均成绩.

7. 已知多项式,试求:(1)p(x)的根;(2)由其根生成一个多项式q(x)并与p(x)比较;(3)计算p(1.5),p(-2),p(5)的值。

8  已知矩阵A=[1.2 3 5 0.9;5 1.7 5 6;3 9 0 1;1 2 3 4],求

   (1)A 的特征多项式

   (2)特征多项式中未知数为20 时的值

   (3)特征多项式的根

   (4)特征多项式的导数

9. 在实验中测得如下10组数据:

X    1    2    3    4    5    6    10    12    15    16

Y    7    15   19   30   38    37   23    69    39    28

(1)求最多能拟合多项式的次数是多少?并求出各项系数。

(2)将数据点和拟合曲线在同一图中绘出。

五、实验过程及结果(含源代码)

  1、在MATLAB中新建.m文件,输入实验代码如下并保存:

clc,clear

A=[11 12 13 14;21 22 23 24;31 32 33 34;41 42 43 44];

A1=A(:,1)

A2=A(2,:)

A3=A(:,2:3)

A4=A(2:3,2:3)

A5=A(:,1:2:3)

A6=A(2:3)

A7=A(:)

A8=A(:,:)

A9=ones(2,2)

A10=eye(2)

A11=[A,[ones(2,2);eye(2)]]

A12=diag(A)

A13=diag(A,1)

A14=diag(A,-1)

A15=diag(A,2)

点击“run”运行得到结果如下:

A1 =

    11

    21

    31

    41

A2 =

    21    22    23    24

A3 =

    12    13

    22    23

    32    33

    42    43

A4 =

    22    23

    32    33

A5 =

    11    13

    21    23

    31    33

    41    43

A6 =

    21    31

A7 =

    11

    21

    31

    41

    12

    22

    32

    42

    13

    23

    33

    43

    14

    24

    34

    44

A8 =

    11    12    13    14

    21    22    23    24

    31    32    33    34

    41    42    43    44

A9 =

     1     1

     1     1

A10 =

     1     0

     0     1

A11 =

    11    12    13    14     1     1

    21    22    23    24     1     1

    31    32    33    34     1     0

    41    42    43    44     0     1

A12 =

    11

    22

    33

    44

A13 =

    12

    23

    34

A14 =

    21

    32

    43

A15 =

    13

    24

2、在命令窗口输入代码如下:

A=[2 3 -5 4;-1 2 7 -3;5 -4 2 1;7 6 -2 -3];

inv(A)

ans =

    0.0198    0.0010    0.1069    0.0610

    0.1199    0.1116   -0.0636    0.0271

    0.0709    0.1616    0.0667   -0.0448

    0.2388    0.1178    0.0777   -0.1069

det(A)

ans =

       -1918

trace(A)

ans =

     3

E=eig(A)

E =

  -5.6545         

   4.6888         

   1.9828 + 8.2711i

   1.9828 - 8.2711i

[V,D]=eig(A)

V =

   0.3850             0.4655            -0.0889 + 0.4794i  -0.0889 - 0.4794i

  -0.1196             0.4083            -0.1447 - 0.5624i  -0.1447 + 0.5624i

  -0.1972             0.4872             0.5903             0.5903         

  -0.8936             0.6157            -0.1444 + 0.2359i  -0.1444 - 0.2359i

D =

  -5.6545                  0                  0                  0         

        0             4.6888                  0                  0         

        0                  0             1.9828 + 8.2711i        0         

        0                  0                  0             1.9828 - 8.2711i

3、在命令窗口键入实验代码如下:

>> A=magic(3),B=7*rand(3)

A =

     8     1     6

     3     5     7

     4     9     2

B =

    6.6509    3.4019    3.1953

    1.6180    6.2391    0.1295

    4.2479    5.3347    5.7499

>> A*B

ans =

   80.3126   65.4622   60.1908

   57.7778   78.7438   50.4824

   49.6611   80.4287   25.4465

>> A&B

ans =

     1     1     1

     1     1     1

     1     1     1

>> A|B

ans =

     1     1     1

     1     1     1

     1     1     1

>> ~A

ans =

     0     0     0

     0     0     0

     0     0     0

>> A==B

ans =

     0     0     0

     0     0     0

     0     0     0

>> A>B

ans =

     1     0     1

     1     0     1

     0     1     0

4、在命令窗口键入实验代码及运行结果如下:

>> H=hilb(4)

H =

    1.0000    0.5000    0.3333    0.2500

    0.5000    0.3333    0.2500    0.2000

    0.3333    0.2500    0.2000    0.1667

    0.2500    0.2000    0.1667    0.1429

>> H'

ans =

    1.0000    0.5000    0.3333    0.2500

    0.5000    0.3333    0.2500    0.2000

    0.3333    0.2500    0.2000    0.1667

    0.2500    0.2000    0.1667    0.1429

>> rot90(H)

ans =

    0.2500    0.2000    0.1667    0.1429

    0.3333    0.2500    0.2000    0.1667

    0.5000    0.3333    0.2500    0.2000

    1.0000    0.5000    0.3333    0.2500

>> fliplr(H)

ans =

    0.2500    0.3333    0.5000    1.0000

    0.2000    0.2500    0.3333    0.5000

    0.1667    0.2000    0.2500    0.3333

    0.1429    0.1667    0.2000    0.2500

>> flipud(H)

ans =

    0.2500    0.2000    0.1667    0.1429

    0.3333    0.2500    0.2000    0.1667

    0.5000    0.3333    0.2500    0.2000

    1.0000    0.5000    0.3333    0.2500

5、在命令窗口键入实验代码及运行结果如下:

>> A=[0 pi/3;pi/6 pi/2]

A =

         0    1.0472

    0.5236    1.5708

>> B1=sin(A)

B1 =

         0    0.8660

    0.5000    1.0000

>> B2=cos(A)

B2 =

    1.0000    0.5000

    0.8660    0.0000

>> B1^2+B2^2

ans =

    1.8660    1.3660

    1.3660    1.8660

>> [M,L]=eig(A)

M =

   -0.9628   -0.4896

    0.2703   -0.8719

L =

   -0.2940         0

         0    1.8648

>> M*sin(L)*inv(M)

ans =

   -0.1200    0.6048

    0.3024    0.7873

>>  funm(A,@sin)

ans =

   -0.1200    0.6048

    0.3024    0.7873

>> funm(A,@cos)

ans =

    0.7873   -0.6048

   -0.3024   -0.1200

>> (funm(A,@sin))^2+(funm(A,@cos))^2

ans =

    1.0000   -0.0000

   -0.0000    1.0000

6、实验代码及运行结果如下:

(1) 分别用细胞型变量和结构型变量表示题示信息如下:

% 细胞型变量

A1={'李明',20130001,'男',19890214,'MATLAB',99,'ENGLISH',88,'Matrix',96,'Math',94};

A2={'张远',20130006,'男',19900425,'MATLAB',98,'ENGLISH',80,'Matrix',90,'Math',96};

A3={'王云',20130009,'女',19901001,'MATLAB',97,'ENGLISH',89,'Matrix',88,'Math',90};

% 结构型变量

B1=struct('Name','李明','StuNumber',20130001,'Sex','男','Birth',19890214,...

    'MATLAB',99,'ENGLISH',88,'Matrix',96,'Math',94);

B2=struct('Name','张远','StuNumber', 20130006,'Sex','男','Birth', 19900425,...

    'MATLAB',98,'ENGLISH',80,'Matrix',90,'Math',96);

B3=struct('Name','王云','StuNumber', 20130009,'Sex','女','Birth', 19901001,...

    'MATLAB',97,'ENGLISH',90,'Matrix',88,'Math',90);

C=[B1 B2 B3];

(2) 查询信息,如查询李明的学号,实验代码如下:

name='李明'

information='StuNumber';

for i=1:3

    if strcmp(C(i).Name,name)==1

       disp(information);

       getfield(C(i),information)

       break;

    end

end

运行结果如下:

name =

李明

StuNumber

ans =

    20130001

(3) 求每位研究生的平均成绩:

for i=1:3

Average(i)=(C(i).MATLAB+C(i).ENGLISH+C(i).Matrix+C(i).Math)/4;

end

Average

结果如下:

Average =

   94.2500   91.0000   91.2500

7、在命令窗口键入实验代码及运行结果如下:

>> p=[3 -2 7 9];

>> x=roots(p)

x =

   0.7513 + 1.7392i

   0.7513 - 1.7392i

  -0.8358 + 0.0000i

>> q=poly(x)

q =

1.0000   -0.6667    2.3333    3.0000

>> b=[1.5 -2 5];

>> polyval(p,b)

ans =

   25.1250  -37.0000  369.0000

8、在命令窗口键入实验代码及运行结果如下:

>> A=[1.2 3 5 0.9;5 1.7 5 6;3 9 0 1;1 2 3 4];

>> p=poly(A);

>> poly2sym(p)

ans =

x^4 - (69*x^3)/10 - (3863*x^2)/50 - (8613*x)/100 + 120##/20

>> polyval(p,20)

ans =

   7.2778e+04

>> roots(p)

ans =

  13.0527 + 0.0000i

  -4.1671 + 1.9663i

  -4.1671 - 1.9663i

   2.1815 + 0.0000i

>> Dp=polyder(p);

>> poly2sym(Dp)

ans =

4*x^3 - (207*x^2)/10 - (3863*x)/25 - 8613/100

9、因题目给出的实验数据是10组,可以看做是10个多项式方程组,仅当多项式的次数小于方程组的个数时,方程组为超定方程,此时才可以进行最小二乘多项式拟合,因此,最多拟合次数为9次,实验代码及运行结果如下:

X=[1  2  3  4  5  6  10  12  15  16];

Y=[7  15  19  30  38  37  23  69  39  28];

a=polyfit(X,Y,9);

x2=1:0.1:16;

y2=polyval(a,x2);

plot(X,Y,'r*',x2,y2,'b-')

legend('原数据点','拟合曲线')

拟合多项式系数如下:

a =

  Columns 1 through 7

    0.0000   -0.0005    0.0150   -0.2693    2.9713  -20.5126   85.9563

  Columns 8 through 10

 -204.4409  250.3796  -107.0989

实验图形如下所示:

六、实验总结

通过本次实验,学会了很多MATLAB知识。如掌握了如何使用MATLAB变量,如何创建MATLAB数组,MATLAB数组和矩阵的运算以及熟悉了MATLAB多项式的运用。学会了运用MATLAB这个强大的工具进行矩阵的分析以及多项式的计算及应用。

相关推荐