15年13级matlab实验报告

更新时间:2024-01-28 15:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《MATLAB程序设计》实验报告

《MATLAB程序设计》

实验报告

共64 页,第 1页

《MATLAB程序设计》实验报告

实验一 MATLAB的基本功能

一、实验目的

1、了解MATLAB程序设计的开发环境,熟悉命令窗口、工作区窗口、历史命令等窗口的使用。

2、掌握MATLAB常用命令的使用。 3、掌握MATLAB帮助系统的使用。

4、熟悉利用MATLAB进行简单数学计算以及绘图的操作方法。 二、实验内容

1、启动MATLAB软件,熟悉MATLAB的基本工作桌面,了解各个窗口的功能与使用。

2、MATLAB的常用命令与系统帮助:

3、在命令窗口执行命令完成以下运算,观察workspace的变化,记录运算结果。

4、思考题。 三、源程序和实验结果

(1) 计算(365-52?2-70)?3

>> (365-52*2-70)/3 ans =

63.6667 (2)

>> area=pi*2.5^2 area =

共64 页,第 2页

《MATLAB程序设计》实验报告

19.6350 (3) 已知x=3,y=4,z?>> y=4; >> x=3;

>> z=x^2*y^3/(x-y)^2 z = 576

(4) 利用who,whos命令查看工作空间内的所有变量,并比较两种命令区别。 >> who

Your variables are:

area x y z >> whos

Name Size Bytes Class

area 1x1 8 double array x 1x1 8 double array y 1x1 8 double array z 1x1 8 double array

Grand total is 4 elements using 32 bytes

(5) 使用clear命令删除工作空间内的所有变量。提示:MATLAB有一些永

久常数(Permanent Constants)如表所示,虽然在工作空间中看不到,但使用者可直接取用。

表1.1 MATLAB中常用的变量,常量

特殊的变量、常量 取 值 共64 页,第 3页

x2y3?x?y?2在MATLAB中求z:

《MATLAB程序设计》实验报告

ans pi eps inf NaN i,j 用于结果的缺省变量名 圆周率π的近似值(3.1416) 数学中无穷小(epsilon)的近似值(2.2204e - 016) 无穷大,如 1/0 = inf (infinity) 非数,如 0/0 = NaN (Not a Number),inf / inf = NaN 虚数单位:i = j =?1 >> clear >> whos >>

(6) 将下面的矩阵赋值给变量m1,在workspace中察看m1在内存中占用的字

节数。

?162313??511108?? m1=??97612???414151??>> m1=[16,2,3,13;5,11,10,8;9,7,6,12;4,14,15,1]; >> whos

Name Size Bytes Class

m1 4x4 128 double array

Grand total is 16 elements using 128 bytes

执行以下命令,观察结果: >> m1(2,3) ans = 10

>> m1(11)

共64 页,第 4页

《MATLAB程序设计》实验报告

ans = 6

>> m1(:,3) ans = 3 10 6 15

>> m1(2:3,1:3) ans =

5 11 10 9 7 6

>> m1(1,4)+m1(2,3)+m1(3,2)+m1(4,1) ans = 34

(7) 执行命令>>help abs,查看函数abs的用法及用途,计算abs(3 +4i)。

>> abs(3+4i) ans =

共64 页,第 5页

《MATLAB程序设计》实验报告

5 (8) 执行命令:

>> x=0:0.1:6*pi; >> y=5*sin(x); >> plot(x,y)

(9) 在matlab的命令窗口里完成如下计算,其中t的值分别取-1,0,1,表达式

如下:

y?3?4t?e?sin(43t??/3)2

>> t=[-1,0,1] t =

-1 0 1

>> y=sqrt(3)/2*exp(-4*t).*sin(4*sqrt(3*t)+pi/3)

共64 页,第 6页

《MATLAB程序设计》实验报告

y =

1.0e+004 *

2.0897 + 1.2065i 0.0001 0.0000 (10) 求方程组的根:

?x1?4x2?3x3?2??2x1?5x2?x3?11 ?x?6x?x?12?123>> A=[1,4,-3;2,5,-1;1,6,1] A =

1 4 -3 2 5 -1 1 6 1

>> B=[2,11,12]'; >> X=A\\B X = 4 1 2

(11) 一个多项式的系数向量是p=[1 -6 -72 -27],求这个多项式的根并写出多

项式。 >> C=[1,-6,-72,-27]; >> roots(C)

共64 页,第 7页

《MATLAB程序设计》实验报告

ans =

12.1229 -5.7345 -0.3884 4、思考题

(1) 以下变量名是否合法?为什么?

a) x2

合法,以字母开头后面跟数字或字母 b) 3col

不合法,不能以数字开头 c) _row

不合法,MATLAB中变量名不能以下划线开头 d) for

不合法,for是一个关键字,不能用于做变量名

(2) 求以下变量的值,并在MATLAB中验证。

a) a=1:2:5; b) b=[a' a' a']; c) c=a+b(2,:)

>> a=1:2:5 a =

1 3 5

>> b=[a' a' a'] b =

1 1 1

共64 页,第 8页

《MATLAB程序设计》实验报告

3 3 3 5 5 5

>> c=a+b(2,:) c =

4 6 8

共64 页,第 9页

《MATLAB程序设计》实验报告

实验二 MATLAB矩阵及运算

一、实验目的

1、掌握矩阵和数组的表示与赋值方法

2、了解字符串、结构和单元等数据类型在MATLAB中的使用 3、掌握MATLAB中基本的数值运算,了解基本统计函数的使用 4、掌握多项式基本运算以及线性方程组的求解方法 二、实验内容

1、利用“:”操作符和linspace函数生成数组a=[0,6,12,18,24,30,36,42],并将数组a分别转化为4*2和2*4的矩阵。

实验结果: >> a=0:6:42 a =

0 6 12 18 24 30 36 42

>> b=reshape(a,4,2) b =

0 24 6 30 12 36 18 42

>> c=reshape(a,2,4) c =

共64 页,第 10页

《MATLAB程序设计》实验报告

0 12 24 36 6 18 30 42 >> a=linspace(0,42,8) a =

0 6 12 18 24 30 36 42

>> b=reshape(a,4,2) b =

0 24 6 30 12 36 18 42

>> c=reshape(a,2,4) c =

0 12 24 36 6 18 30 42

1??368?-572217??,并使用MATLAB回2、在MATLAB中输入矩阵A???6916-12????1513-210?答以下的问题:

共64 页,第 11页

《MATLAB程序设计》实验报告

(1) 创建一个由A中第2列到第4列所有元素组成的4Χ3数组B;

实验结果:

>> A=[3,6,8,1;-5,7,22,17;6,9,16,-12;15,13,-21,0] A=

3 6 8 1 -5 7 22 17 6 9 16 -12 15 13 -21 0 >> B=[A(:,2:4)] B =

6 8 1 7 22 17 9 16 -12 13 -21 0

(2) 创建一个由A中第3行到第4行所有元素组成的2Χ4数组C;

实验结果:

>> C=[A(3:4,:)] C =

6 9 16 -12 15 13 -21 0

共64 页,第 12页

《MATLAB程序设计》实验报告

(3) 创建一个由A中前两行和后三列所有元素组成的2Χ3数组D;

实验结果:

>> D=[A(1:2,2:4)] D =

6 8 1 7 22 17

(4) 根据A利用单下标方法和双下标方法分别创建向量a=[-5 6 15]和向量

??56?b=[6 8 1],并利用向量a和b生成矩阵E??68?;

????151??实验结果:

>> a=A(2:4) a =

-5 6 15

>> b=A(1,2:4) b =

6 8 1 >> E=reshape([a,b],3,2) E =

共64 页,第 13页

《MATLAB程序设计》实验报告

-5 6 6 8 15 1

(5) 利用“[]”删除矩阵A的第二行和第三列。

>> A(2,:)=[]; >> A(:,3)=[] A =

3 6 1 6 9 -12 15 13 0

3、利用ones()函数和zero()函数生成如下矩阵:

?0?0?A??0??0??0实验结果:

>> A=zeros(5,5); >> A(2:4,2:4)=ones(3,3); >> A(3,3)=3 A =

0 0 0 0 0 0 1 1 1 0 0 1 3 1 0 0 1 1 1 0

0000?1110??1310?

?1110?0000??共64 页,第 14页

《MATLAB程序设计》实验报告

0 0 0 0 0

??4?12?4、生成矩阵A???303?:

?????214??(1) 取出所有大于0的元素构成一个向量a(可推广到从一个矩阵里筛选出

符合条件的元素组成一个向量)。 实验结果:

>> A=[-4,-1,2;-3,0,3;-2,1,4] A =

-4 -1 2 -3 0 3 -2 1 4 >> a=A(find(A>0)) a = 1 2 3 4

(2) 将原矩阵中大于0的元素正常显示,而小于等于0的元素全部用0来表

示(可推广到将原矩阵中不符合条件的全用0来表示,符合条件的值不变)。

>> b=A.*(A>0) b =

共64 页,第 15页

《MATLAB程序设计》实验报告

0 0 2 0 0 3 0 1 4

?1??147?12324?1?????0?d??852?c?5、已知a??,,b???135???,??下列运456????????2???360??算是否合法,为什么?如合法,写出计算结果? (1) result1=a' 实验结果: >> r1=a' r1 =

1 4 2 5 3 6 (2) result2=a*b

不合法,乘法运算的两矩阵被乘矩阵的行数必须等于乘矩阵。 (3) result3=a+b

>> r3=a+b r3 =

3 6 2 5 8 11 (4) result4=b*d >> r4=b*d

r4 =

31 22 22 40 49 13

共64 页,第 16页

《MATLAB程序设计》实验报告

(5) result5=[b;c']*d

>> result5=[b;c']*d result5 =

31 22 22 40 49 13 -5 -8 7

(6) result6=a.*b >> result6=a.*b

result6 =

2 8 -3 4 15 30

(7) result7=a./b

>> result7=a./b result7 =

0.5000 0.5000 -3.0000 4.0000 1.6667 1.2000 (8) result8=a.*c

不合法,.*运算的两矩阵大小必须相等

(9) result9=a.\\b

>> result9=a.\\b result9 =

共64 页,第 17页

《MATLAB程序设计》实验报告

2.0000 2.0000 -0.3333 0.2500 0.6000 0.8333 (10) result10=a.^2 >> result10=a.^2

result10 =

1 4 9 16 25 36

(11) result11=a^2

>> result12=2.^a

result12 =

2 4 8 16 32 64

不合法,乘方运算必须为方阵

(12) result11=2.^a

?134???784?6、已知a??51244?,b??122438?,c?[1,0,8,3,6,2,?4,23,46,6]

???????7827???68?53??(1) 求a+b,a*b,a.*b,a/b,a./b,a^2,a.^2的结果,并观察运算结果。

实验结果: >> a+b ans =

-6 11 8 17 36 92

共64 页,第 18页

《MATLAB程序设计》实验报告

75 3 30 >> a*b ans =

301 3101 1883 >> a.*b ans =

-7 60 476 >> a/b ans =

0.1913 0.0660 -2.0242 1.1060 -1.0477 0.6574 >> a./b ans =

60 160 108 728 113 493 24 16 288 2112 -40 81 0.0228 -0.3300 -0.1209 共64 页,第 19页

《MATLAB程序设计》实验报告

-0.1429 0.3750 1.0000 0.4167 0.5000 0.9167 0.1029 -1.6000 9.0000 >> a^2 ans =

44 71 244 373 511 1736 236 333 1109 >> a.^2 ans =

1 9 16 25 144 1936 49 64 729

(2) 求c中所有元素的平均值、最大值、中值,并将c中元素按从小到大顺

序排列。

>> aver=sum(c)/length(c)

aver =

9.1000

>> aver=mean(c)

aver =

9.1000

>> maxC=max(c)

共64 页,第 20页

《MATLAB程序设计》实验报告

maxC = 46

>> minC=min(c) minC = -4

>> mid=median(c) mid =

4.5000 >> sort(c) ans =

-4 0 1 2 3 6 6 8 (3) 解释b(2:3,[1,3])的含义,并将生成的数组赋值给d。

b(2:3,[1,3])表示取b矩阵的第2,3行、第1,3列的元素 >> d=b(2:3,[1,3]) d =

12 48 68 3 关系运算与逻辑运算

7、已知a=20,b=-2,c=0,d=1,计算下列表达式:

共64 页,第 21页

23 46 《MATLAB程序设计》实验报告

实验结果:

(1) r1=a>b

>> r1=a>b r1 = 1 (2) r2=a>b&c>d

>> r2=a>b&c>d r2 = 0 (3) r3=a==b*(-10) >> r3=a==b*(-10) r3 =

1

(4) r4=~b|c

>> r4=~b|c r4 = 0

??7218、已知A??9153???2?211?132(1) 求矩阵A的秩(rank);

?2??2?5?? 13??共64 页,第 22页

《MATLAB程序设计》实验报告

(2) 求矩阵A的行列式(determinant); (3) 求矩阵A的逆(inverse);

(4) 求矩阵A的特征值及特征向量(eigenvalue and eigenvector)。

A的秩(rank) >> rankA=rank(A) rankA = 4 A的行列式 >> detA=det(A) detA =

12568 A的逆矩阵 >> invA=inv(A) invA =

0.1744 -0.0303 -0.1050 0.0789 0.0083 0.0173 0.0095 -0.0185 A的特征向量 >> eigA=eig(A) eigA =

4.8554

-0.0125 0.0270 -0.0121 0.0006 0.0911 -0.0311 -0.0103 0.0795 共64 页,第 23页

《MATLAB程序设计》实验报告

12.6460 + 1.8333i 12.6460 - 1.8333i 15.8526

9、已知多项式f1(x)=2x4-x2+3x+2,f2(x)=3x+2,利用MATLAB进行如下计算: 实验结果:

(1) 计算两多项式的乘法和除法;

>> a=[2,-1,3,2]; >> b=[3,2]; >> conv(a,b) ans =

6 1 7 12 4 (2) 求多项式f1(x)的根;

>> roots(a) ans =

0.5000 + 1.3229i 0.5000 - 1.3229i -0.5000

?13?(3) 分别计算多项式当x=3以及x???时的值。 24??X=3时两个多项式的值: >> x=3;

>> y1=polyval(a,x) y1 = 56

共64 页,第 24页

《MATLAB程序设计》实验报告

>> y2=polyval(b,x) y2 =

11

X为题中矩阵时,两个多项式的值: >> x2=[1,3;2,4]; >> y1=polyval(a,x2) y1 =

6 56 20 126

>> y2=polyval(b,x2) y2 =

5 11 8 14

10、用两种方法求下列方程组的解,并比较两种方法执行的时间。

?7x1 ?14x2?9x3?2x4?5x5?3x ?15x?13x?6x?4x12345????11x1 ?9x2?2x3?5x4?7x5?5x ?7x?14x?16x?2x2345?1???2x1 ?5x2?12x3?11x4?4x5?100?200?300 ?400?500>> A=[7,14,-9,-2,5;3,-15,-13,-6,-4;-11,-9,-2,5,7;5,7,14,16,-2;-2,5,12,-11,-4]; >> b=[100,200,300,400,500]'; >> tic,x=rref([A,b]),toc

共64 页,第 25页

《MATLAB程序设计》实验报告

x =

1.0000 0 0 0 0 370.9444 0 1.0000 0 0 0 -224.7273 0 0 1.0000 0 0 238.3333 0 0 0 1.0000 0 -138.1892 0 0 0 0 1.0000 503.6364

Elapsed time is 0.047000 seconds. >> tic,x=A\\b,toc x =

370.9455 -224.7276 238.3333 -138.1891 503.6378

Elapsed time is 0.000000 seconds. 使用左除运算执行的时间比rref()更短

11、建立一个元胞数组,要求第一个元素为4Χ4的魔术矩阵,第二个元素为18.66,第三个元素为'matlab',第四个元素为等差数列7,9,11,13…99。计算第一个元胞第4行第2列加上第二个元胞+第三个元胞里的第二个元素+最后一个元胞的第10个元素。

>> A={magic(4),18.66,'matlab',[7:2:99]} A =

[4x4 double] [18.6600] 'matlab' [1x47 double]

共64 页,第 26页

《MATLAB程序设计》实验报告

>> A{1} ans =

16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

>> B=A{1}(4,2)+A{2}+A{3}(2)+A{4}(10) B =

154.6600

12、建立一个结构体的数组,包括3个人,字段有姓名,年龄,分数,其中分数由随机函数产生一个3行10列的数据表示了有10门课程,每门课程有三个阶段的分数。问题是:

(1) 如何找到第2个人的分数并显示出来;

>> student(2).score

(2) 如何找到第2个人的每门课程3个阶段的平均分数并显示出来;

>> aver=mean(student(2).score,2)

(3) 所有同学的10门课程的每门课程的平均分如何计算出来?要求放到一

个数组里;

>>SMean=(mean(student(1).score)+mean(student(2).score)+mean(student(3).score))/3

(4) 找到这个班所有同学的姓名放到一个元胞数组里;

>> SName{1}=[student(1).name,student(2).name,student(3).name] 13、完成以下操作:

(1) 已有str=‘decision 20 made on 10/20/10’,查找字符串中20出现的位置。

>> findstr(str,'20')

共64 页,第 27页

《MATLAB程序设计》实验报告

ans =

10 24

(2) 有字符串s1=’matlabexpress’,s2=‘matlabexcellent’,比较两个字符串的

前8个字符是否相同,相同输出1,否则输出0。 >> strcmp(s1(1:8),s2(1:8)) ans = 1

(3) 统计字符串s1=‘matlabexpress’中ex出现的次数,并替换为EX。

>> length(findstr(s1,'ex')) ans = 1

>> s1([findstr(s1,'ex'):findstr(s1,'ex')+1])='EX' s1 =

matlabEXpress

共64 页,第 28页

《MATLAB程序设计》实验报告

实验三 MATLAB程序设计

一、实验目的

1、掌握建立和执行M文件的方法。

2、掌握选择结构、多分支选择结构程序的编程方法。 3、掌握多种循环结构程序的编程方法。 4、掌握定义函数文件和调用函数文件的方法。 二、实验内容

1、MATLAB M文件的创建与使用。 (1) 建立自己工作目录,

(2) 在M文件编辑器中编制命令行文件。 (3) 命令行程序运行。

(4) 按上述步骤,在编辑器中输入如下函数文件:

function f=tt(n)

%求小于任何正整数且为2的整数次幂的正整数。 %c=n(n)

%n可取任意正整数。 %河北工业大学实验室130 04年8月。 f(1)=2; k=1;

while f(k)

调试后,将其以test2.m形式保存在D:\\MATLAB中。 (5) 进入命令窗口,键入test2(9),观察程序运行结果。

实验结果: >> test2(9)

共64 页,第 29页

《MATLAB程序设计》实验报告

f =

2 4 8 ans =

2 4 8

2、编写一个函数M文件,计算下面函数的值,给出标量x的值,调用该函数后,返回y的值。

?sinx,?y(x)??x,??x?6,?选择一些数据测试编写的函数。 源程序及实验结果:

function y=tt(x)

%给出标量x调用函数返回y的值 if(x<=0) y=sin(x); elseif(x<=3) y=x; else y=-x+6; end y

x?00?x?3 x?3

3、编写一个函数M文件,返回向量x中元素的和、平均值、最大值、最小值、均方根值。其中方均根值(Root Mean Square)的计算公式为:

rms?并用下面数据测试你写的函数: (1) x=sin(0:0.01:6*pi)

1N?xi?1N2i 共64 页,第 30页

《MATLAB程序设计》实验报告

(2) x=rand(1,200),得到的x为200个(0,1)之间均匀分布的随机数。

源程序及实验结果: function f=myFun(x)

l=length(x);%向量中元素的个数 Sum=sum(x)%向量所有元素求和 Ave=mean(x)%取平均值

Max=max(x)%向量中的最大值 Min=min(x)%向量中的最小值 Rms=sqrt(sum(x.^2)/l)%方均根

>> myFun(sin(0:0.01:6*pi)) Sum =

-2.1218e-004 Ave =

-1.1256e-007 Max =

1.0000 Min =

-1.0000 Rms =

共64 页,第 31页

《MATLAB程序设计》实验报告

0.7071

>> myFun(rand(1,200)) Sum =

99.3810 Ave =

0.4969 Max =

0.9943 Min =

0.0099 Rms =

0.5707

4、编写一个函数M文件,若给出一个向量x?[x1,x2,?xn],函数返回如

共64 页,第 32页

《MATLAB程序设计》实验报告

下范德蒙矩阵。

1?1?xx2?12x2?x12????n?1n?1?xx2?1?????1?xn??2xn? ???n?1?xn?1??111?2345??,例如在命令窗口输入>>v=myvander([2 3 4 5]),得v???491625????82764125?同时生成一些数据测函数。

源程序及实验结果: 15-10-26

function f=myvander(x) l=length(x); f=[]; for i=0:l-1 y=[x].^i; f=[f;y]; end

>> v=myvander([2,3,4,5]) v =

1 1 1 1 2 3 4 5 4 9 16 25 8 27 64 125

5、分别使用while和for编写命令文件,用循环语句编程计算s值:

s??(n3?n2)n?210

共64 页,第 33页

《MATLAB程序设计》实验报告

同时对编写的文件设置断点,观察变量取值的变化情况。 源程序及实验结果:

15-10-26

n=2; s=0 while n<=10 s=s+n^3-n^2 pause(2) n=n+1; end s=0 for n=2:10 s=s+n^3-n^2 pause(2) end

>> test3 s = 0 s = 4 s = 22 s =

共64 页,第 34页

《MATLAB程序设计》实验报告

70 s = 170 s = 350 s = 644 s =

s =

s =

共64 页,第 35页

1092 1740

《MATLAB程序设计》实验报告

2640

6、数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如:

2?1

3?10?5?16?8?4?2?1 6?3?10?5?16?8?4?2?1

建立命令M文件,完成上述功能,要求显示数字处理过程。 源程序及实验结果: 15-10-26

function f=tt(x) temp=x; f=x; fla=true; if temp==1 fla=false; end

while fla

if rem(temp,2)==0 temp=temp/2; else

temp=temp*3+1; end f=[f,temp]; if temp==1 fla=false; end end

>> tt(2) ans =

2 1

共64 页,第 36页

《MATLAB程序设计》实验报告

>> tt(3) ans =

3 10 5 16 8 4 2 1 >> tt(6) ans =

6 3 10 5 16 8 4 2 1

7、设计一个学生身高的管理系统,输出身高的基本分为5等:很高、较高、中等、较矮、矮,其中190cm以上为“很高”,[180cm,190cm)区间为“较高”,[170cm,180cm)为“中等”,[160cm,170cm)为“较矮”,160cm以下为“矮”,要求分别用if语句和switch语句实现

源程序及实验结果: 15-11-2 height.m

function f=height(x) if x>190

disp('if语句实现 很高') elseif x>=180

disp('if语句实现 较高') elseif x>170

disp('if语句实现 中等') elseif x>160

disp('if语句实现 较矮') else

disp('if语句实现 矮') end switch x case x<160

disp('switch语句实现 矮'); case num2cell(160:170)

disp('switch语句实现 较矮'); case num2cell(170:179)

disp('switch语句实现 中等');

共64 页,第 37页

《MATLAB程序设计》实验报告

case num2cell(180:190)

disp('switch语句实现 较高'); otherwise disp('switch语句实现 很高'); end

>> height(187)

if语句实现 较高 switch语句实现 较高

8、Fibonacci数组的元素满足Fibonacci规则:

ak+2=ak+ak+1,(k=1,2,3,?);且a1= a2=1。

请设计一段程序,求出该数组中第一个大于10000的元素 源程序及实验结果:

15-10-26

x=[1,1];%前两个元素的值为1,1 n=2;%n表示当前数组中元素的个数 y=1;%y为数组中最大的一个数 while y<10000 n=n+1;

y=x(n-1)+x(n-2); x=[x,y]; end

disp(['i=',num2str(n)]) disp(['a(i)=',num2str(y)])

显示的结果为: >> test8 i=21 a(i)=10946

9、编写一个函数文件and.m,用于求两个输入矩阵的乘积和点乘,然后在命令行窗口中调用该函数,要求:

源程序及实验结果: and.m程序:

15-10-30

X=input('inputX');

共64 页,第 38页

《MATLAB程序设计》实验报告

Y=input('inputY');

mx=size(X,1);%得到X矩阵的行数,存入mx nx=size(X,2);%得到X矩阵的列数,存入nx [my,ny]=size(Y);%Y矩阵的行数在my,列数在ny if mx==nx && my==ny%如果X、Y都是方阵 if(nx==my) %如果方阵X、Y大小一样 disp('x*y='); f1=X*Y %矩阵相乘 disp('x.*y='); f2=X.*Y %矩阵点乘 end

elseif nx==my %X、Y不都是方阵 disp('x*y=');

f=X*Y %只做矩阵相乘的运算 else

disp('cannot muitiple(X,Y)'); end

(1) 当两矩阵是尺寸相同的方阵时,返回它们的乘积和点乘。 >> and inputX[1,2;3,4] inputY[2,3;4,5] x*y= f1 =

10 13 22 29 x.*y= f2 =

2 6 12 20

共64 页,第 39页

《MATLAB程序设计》实验报告

(2) 当两矩阵不是尺寸相同的方阵时,则根据它们的尺寸,分别进行乘积或点乘 >> and inputX[1,2;3,4] inputY[2;3] x*y= f = 8 18

(3) 当两矩阵的尺寸不能满足乘积或点乘的要求时,则提示“这两个矩阵不能乘” >> and inputX[1,2;3,4] inputY[3;4;5] cannot muitiple(X,Y)

10、编写一个阶乘函数factorial.m,然后在如下程序中调用该函数, “分别使用for和while语句找出最小的n值,使得n!>10100,并求出n!” 源程序及实验结果:

%for语句找出最小的n,满足n!>10100 15-11-2 m2=1; j=1;

while m2<10100 j=j+1; m2=m2*j; end

disp(['n=',num2str(j)]);

disp([num2str(j),'!=',num2str(m2)]); disp(' ');

%for语句找出最小的n,满足n!>10100

共64 页,第 40页

《MATLAB程序设计》实验报告

m1=1; for i=1:10 m1=m1*i; if(m1>10100)

disp(['n=',num2str(i)]);

disp([num2str(i),'!=',num2str(m1)]); return; end end

>> factorial n=8 8!=40320 n=8 8!=40320

11、下列程序用来判断一个人的体温是否处于危险状态。调试程序是否正确,如果程序错误指出错误在哪里?并写出正确答案。

temp=input(‘请输入体温: temp = ’); if temp < 36.5 disp(‘体温偏低’); elseif temp > 36.5

%错误,这个条件划分错误,会导致下面的elseif无法执行

disp(‘体温正常’);

elseif temp > 38.0

disp(‘体温偏高!’);

elseif temp > 39

disp(‘体温高!!’);

end

错误改正之后: 15/11/2

temp=input('请输入体温: temp = '); if temp < 36.5

共64 页,第 41页

《MATLAB程序设计》实验报告

disp('体温偏低');

elseif temp <37.5 %将体温正常的条件满足区域定义在(36.5,37.5) disp('体温正常'); elseif temp <39.0 disp('体温偏高!'); elseif temp > 39 disp('体温高!!'); end

12、使用嵌套for循环命令创建下列矩阵:

?5?1?A??0??0??0源程序及实验结果: forC.m 15-11-2

%嵌套for循环创建一个矩阵

clear A for i=1:5 for j=1:5 if i==j

A(i,j)=5;%对角线赋值为5 elseif j==i+1||j==i-1 A(i,j)=1; else A(i,j)=0; end end end

A

1000?5100??1510?

?0151?0015?? >> forC A =

共64 页,第 42页

《MATLAB程序设计》实验报告

5 1 0 0 0 1 5 1 0 0 0 1 5 1 0 0 0 1 5 1 0 0 0 1 5

实验四 MATLAB绘图功能

一、实验目的

1、掌握MATLAB二维图形绘制命令及其图形控制; 2、熟悉MATLAB三维图形绘制命令及其图形控制; 3、熟悉特殊二维图形、三维图形的绘制方法。 二、实验内容

1、在同一坐标系下绘制下面三个函数在t?[0,40]的图象,要求三种曲线采用不同颜色以及不同的线型,同时对每条曲线利用函数进行标注,并添加图例。

y1?ty2?ty3?4?e?0.1tsin(t)源程序: 15-11-23 %画曲线图 %作者

t=0:0.1:40;

y1=t;

y2=sqrt(t);

y3=4*pi*exp(-0.1*t).*sin(t);

plot(t,y1,'.r',t,y2,'-b',t,y3,'--k') text(10,10,'y=t');

text(25,6,'y=sqrt(t)');

gtext('y=4*pi.*exp(-0.1*t).*sin(t)');

legend('y=t','y=sqrt(t)','y=4*pi.*exp(-0.1*t).*sin(t)')

共64 页,第 43页

《MATLAB程序设计》实验报告

2、编写程序,选择合适的步距,绘制下面函数在区间[-6,6]中的图象,并对分段的曲线进行标注,同时添加x轴和y轴的说明。

?sinx,?y(x)??x,??x?6,?源程序: x=-6:0.1:6; y=[]; for x0=x if x0<=0

y=[y,sin(x0)]; elseif x0<=3 y=[y,x0]; else y=[y,-x0+6]; end end

plot(x,y)

title('分段曲线函数'); xlabel('variable X'); ylabel('variable Y'); gtext('y=sin(x)'); text(2,2.1,'y=x'); gtext('y=-x+6') 实验结果:

x?00?x?3 x?3共64 页,第 44页

《MATLAB程序设计》实验报告

3、利用subplot函数在同一绘图窗口中用不同颜色和线型绘制以下两个函数在t?[-2?,2?]范围内的图象。

y1?20.5t源程序:

y2?2e?0.2t

clear

t=-2*pi:0.1*pi:2*pi; y1=2.^0.5*abs(t); y2=2*exp(-0.2*t); subplot(1,2,1)

plot(t,y1);title('y1=2^0.5*abs(t)'); subplot(1,2,2);

plot(t,y2);title('y2=2*exp(-0.2*t)'); 实验结果:

共64 页,第 45页

《MATLAB程序设计》实验报告

4、某学校有30位教师,其中教授5人,副教授8人,讲师12人,助教5人.试画出职称比例结构饼图,并强调图形的教授部分同时添加标注。

%画饼状图 clear

x=[5,8,12,5]; y=[1,0,0,0] pie(x,y);

gtext('教授')

5、生成1×10维的随机数向量a,分别用红、黄、蓝、绿色绘出其连线图、脉冲图、阶梯图和条形图,并分别标出标题“连线图”、“脉冲图”、“阶梯图”、“条形图”。

共64 页,第 46页

《MATLAB程序设计》实验报告

源程序: 5-11-30 %作者

%画连线图、脉冲图、阶梯图、条形图 a=rand(1,10); subplot(2,2,1) plot(a,'r') title('连线图'); subplot(2,2,2) stem(a,'p') title('脉冲图'); subplot(2,2,3) stairs(a,'b') title('阶梯图'); subplot(2,2,4) bar(a,'g')

title('条形图');

6、使用subplot函数,把图形窗口分成两个部分,分别绘制sin2t和3cos3t曲线,t范围:0-5.要求前者用红色实线,数据点形状为五角星,有网格线,x轴加标注“x”,y轴加标注“y=sin2t”,加题目“y=sin2t的曲线”;后者用蓝色虚线,数据点形状为圆形,无网格线,x轴加标注“x”,y轴加标注“y=3cos3t”,加题目“y=3cos3t的曲线”;

源程序:

t=0:0.1:5;

共64 页,第 47页

《MATLAB程序设计》实验报告

y1=sin(2*t); y2=3*cos(3*t); subplot(1,2,1);

plot(t,y1,'-r',t,y1,'p') grid on

title('y=sin2t'); xlabel('X'); ylabel('y=sin2t');

subplot(1,2,2);

plot(t,y2,'--b',t,y2,'.') grid off

title('y=3cos3t'); xlabel('X'); ylabel('y=3cos3t');

7、绘制下列三维曲线:

?x?e?t/20cost??t/20sint,0?t?2? (2) (1)?y?e?z?t?(1)的源程序:

t=0:0.1*pi:2*pi; x=exp(-t/20).*cos(t); y=exp(-t/20).*sin(t); z=t; plot3(x,y,z) 实验结果:

共64 页,第 48页

?x?t?2?y?t,0?t?1 ?z?t3?《MATLAB程序设计》实验报告

(2)的源程序:

x=0:0.1:1; y=x.^2; z=x.^3;

figure;plot3(x,y,z)

实验结果:

8、绘制下列曲面图,并调整三维图的视角、背景色、着色以及透视效果。 (1) z=5,|x|≤5,|y|≤5 (2) f(x,y)??51?x2?y2,x?3,y?3

(1)源程序:

共64 页,第 49页

《MATLAB程序设计》实验报告

15-11-30 %画曲面图

x=linspace(-2.5,2.5); y=linspace(-2.5,2.5);

[X1,Y1,Z1]=meshgrid(x,y,5); mesh(X1,Y1,Z1); view(-37.5,30)

(2)源程序:

[x,y]=meshgrid(-3:0.01:3); z=-5./(1+x.^2+y.^2); surf(x,y,z); view(-37.5,30); colordef white; shading flat; colormap pink;

light('Position',[0,1,1]) lighting flat

实验结果:

共64 页,第 50页

本文来源:https://www.bwwdw.com/article/3rlw.html

Top