课程名称:Matlab语言
开设时间:2016—2017学年第 2 学期
专业班级:学生学号:学生姓名:
实验名称:实验二、MATLAB的数值运算和程序实验成绩:
指导教师:批改时间:
一、实验目的和要求
1)掌握基本的矩阵运算及常用的函数。
2)掌握MATLAB函数的编写及调试方法。
3)掌握MATLAB常用的数值运算函数。
二、实验仪器和设备
计算机一台
三、实验过程
1、一维数组在命令窗口执行下面指令,观察输出结果,体味数组创建和寻访方法,%号后面的为注释,不用输入。
rand('state',0) % 把均匀分布伪随机发生器置为0 状态
x=rand(1,5) % 产生(1*5)的均布随机数组
x(3) % 寻访数组x 的第三个元素。
x([1 2 5]) % 寻访数组x 的第一、二、五个元素组成的子数组。
x(1:3) % 寻访前三个元素组成的子数组
x(3:end) % 寻访除前2 个元素外的全部其他元素。
end 是最后一个元素的下标。
x(3:-1:1) % 由前三个元素倒排构成的子数组
x(find(x>0.5)) % 由大于0.5 的元素构成的子数组
x([1 2 3 4 4 3 2 1]) % 对元素可以重复寻访,使所得数组长度允许大于原数组。
x(3) = 0 % 把上例中的第三个元素重新赋值为0。
x([1 4])=[1 1] % 把当前x 数组的第一、四个元素都赋值为1。
x[3]=[] % 空数组的赋值操作
2、在命令窗口执行下面指令,观察输出结果
a=2.7358; b=33/79; % 这两条指令分别给变量 a , b 赋值。
C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i] % 这指令用于创建二维组C M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16] % 创建复数数组的另一种方法 CN=M_r+i*M_i % 由实部、虚部数组构成复数数组
3. 记录下面题目的程序和运行后的结果。
1⎥⎦⎤⎢⎣⎡=654321a ⎥⎦⎤⎢⎣⎡-=531142b ⎥⎥⎥⎦
⎤
⎢⎢⎢⎣⎡-=201c ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=063258741d
下列运算是否合法,为什么?如合法,结果是多少?
(1) result1 = a'
(2) result2 = a * b
(3) result3 = a + b
(4) result4 = b * d
(5) result5 = [b ; c' ] * d
(6) result6 = a . * b
(7) result7 = a . / b
(8) result8 = a . * c
(9) result9 = a . \ b
(10) result10 = a . ^2
(11) result11 = a ^2
(12) result12 = 2 . ^ a
4、用MATLAB 求下面的的方程组。
5、详读并运行下面的circle.m 函数文件。
体会 M 函数文件的编写结构及方法。
% 后面的内容称为注释行,不被执行,起注释说明作用。
⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡-=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⨯⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----01741323151122231592127
4321x x x x
6、编写一个函数,计算下面函数的值,给出标量x 的值,调用该函数后,返回y 的值。
function [y]=myfun1(x)
()⎪⎩
⎪⎨⎧>+-≤<≤=3
6200sin x x x x
x x x y
选择一些数据测试你编写的函数。
7、编写一个函数求向量x 中元素的平均值、最大值、最小值、均方根值。
function [m_x,max_x,min_x,rms_x]=myfun2(x)
方均根值(Root Mean Square)的计算公式为:∑==
N
i i
x
N
rms 1
21
用下面数据测试你写的函数: (1)x=sin(0:0.01:6*pi)
(2)x=rand(1,200),得到的x 为200个(0,1)之间均匀分布的随机数。
8、求编函数实现Fibonacci 数列(1)显示各项(2)求各项之和
9、求代数方程
012927432345=+++++x x x x x 的5个根,并将其用星号(*)标记在复平面图上。
(用roots 和plot 函数)。
10、求代数方程015
=-x 的5个根,并将其用星号(*)标记在复平面图上。
(用roots 和plot 函数)。
11、因式分解:
32
597 ()
(1)(2)
s s s
F s
s s
+++
=
++
12、因式分解:
32
()5()9()7 ()
(1)(2)
j j j
F j
j j
ωωωω
ωω
+++ =
++
13、求方程
3
)0('
,1
)0(
,'
2
"
)
1(2=
=
=
+y
y
xy
y
x的解析解和数值解,并进行比较。
解析解:
s=dsolve('(1+x^2)*D2y=2*x*Dy','y(0)=1','Dy(0)=3','x') s =x*(x^2 + 3) + 1
x=0:0.1:5;
plot(x,x.*(x.^2+3)+1)
数值解:
%建立函数文件
function dy=myfun5(x,y) dy=zeros(2,1); dy(1)=y(2);
dy(2)=(y(2)*2*x)/(1+(x^2));
%运行
>> [x,y]=ode45('myfun5',[0,1],[1,3]);
>> plot(x,y(:,1),'*')
14、分别用ode45和ode15s 求解Van-del-Pol 方程
()⎪⎩
⎪⎨⎧===---1)0',0)0(0)1(1000
222x x x dt dx
x dt
x d
的数值解,并进行比较。
%建立函数
function dy=myfun6(x,y) dy=zeros(2,1); dy(1)=y(2);
dy(2)=1000*(1-y(1)^2)*y(2)+y(1); end
[x,y]=ode45('myfun6',[0,1],[0,1]); [x,y]=ode45('myfun6',[0,1],[0,1]);
plot(x,y(:,1),'*') plot(x,y(:,1),'*')
四、实验结果分析与心得
通过实验二,我基本掌握了函数M文件与命令M文件的建立与编辑;MA TLAB编程语言的基本控制结构与控制转移语句;MATLAB程序的调试。
但在实验过程中,得十分注重分号的差别,加与不加分号得到的结果也不尽相同。
另外,当编写的程序出错时,还得结合课本内容将程序修改好。