最新版MATLAB实验报告74851472.docx
《最新版MATLAB实验报告74851472.docx》由会员分享,可在线阅读,更多相关《最新版MATLAB实验报告74851472.docx(47页珍藏版)》请在冰点文库上搜索。
最新版MATLAB实验报告74851472
实验二MATLAB语言基础
一、实验目的
基本掌握MATLAB向量、矩阵、数组的生成及其基本运算(区分数组运算和矩阵运算)、常用的数学函数。
了解字符串的操作。
二、实验内容
1.向量的生成与运算;
2.矩阵的创建、引用和运算;
3.多维数组的创建及运算;
4.字符串的操作。
三、实验步骤
1.向量的生成与运算
①向量的生成
向量的生成有三种方法:
直接输入法:
生成行向量、列向量;
冒号表达式法:
变量=初值:
间隔(可正可负):
终值
函数法:
使用linspace线性等分函数,logspace对数等分函数。
格式为:
linspace(初值,终值,个数)
Logspace(初值,终值,个数),初值及终值均为10的次幂。
②向量的运算
A=[12345],b=3:
7,计算两行向量的转置,两行向量人加、减,两列向量的加、减;向量的点积与叉积。
a=[12345];
b=3:
7;
a=
12345
b=
34567
at=a',bt=b'
at=
1
2
3
4
5
bt=
3
4
5
6
7
e1=a+b,e2=a-b
e1=
4681012
e2=
-2-2-2-2-2
f1=at+bt,f2=at-bt
f1=
4
5
6
10
12
f2=
-2
-2
-2
-2
-2
g1=dot(a,b),g2=a*bt
>>g1=dot(a,b),g2=a*bt
g1=
85
g2=
85
g4=a.*b
>>g4=a.*b
g4=
38152435
A=1:
3;B=4:
6;
g3=cross(A,B)
>>g3=cross(a,b)
g3=
-36-3
注意:
g1和g2的结果是否相同,为什么?
g4的结果与g1和g2结果是否一样,为什么?
g1和g2的结果相同,因为两者是同一种运算;g4与g1和g2不相同,因为两者一个是点乘一个是叉乘,运算不一样。
2.矩阵的创建、引用和运算
矩阵是由n×m元素构成的矩阵结构。
行向量和列向量是矩阵的特殊形式。
①矩阵的创建
矩阵的创建可由以下方法进行操作:
直接输入法、抽取法、函数法、拼接法。
具体步骤为:
建立两个矩阵,利用已学过的函数,对此进行所述四种方法进行操作。
a=[123;456];
b=[147
258
369];
a
(1)
>>a
(1)
ans=
1
a(4:
end)
>>a(4:
end)
ans=
536
b(:
1)
>>b(:
1)
ans=
1
2
3
b(:
)
>>b(:
)
ans=
1
2
3
4
5
6
7
8
9
b(5)
>>b(5)
ans=
5
a=fix(rand(3)*100)%建立一个两位有效整的随机矩阵
>>a=fix(rand(3)*100)
a=
954845
23891
607682
b=a(1:
3,2:
3)
>>b=a(1:
3,2:
3)
b=
4845
891
7682
c=a([13],[23])
>>c=a([13],[23])
c=
4845
7682
d=a([13;24])
>>d=a([13;24])
d=
9560
2348
a=ones(3,3)
>>a=ones(3,3)
a=
111
111
111
b=zeros(3)
>>b=zeros(3)
b=
000
000
000
c=eye(3)
>>c=eye(3)
c=
100
010
001
d=magic(3)%建立一个行、列、对角线上的和为一相同的数的魔术矩阵
d=[ab]
>>d=[ab]
d=
111000
111000
111000
f=[a;c]
>>f=[a;c]
f=
111
111
111
100
010
001
②矩阵的运算
矩阵的运算有基本运算(加、减、乘、左除、右除)等,还有矩阵函数运算(求逆inv、秩rank、矩阵的翻转、矩阵的转置)等。
已知
,
求a+b,2*a,2*a-3*b,a*b,b/a,a\b,求a逆矩阵,求矩阵的秩,矩阵的翻转,矩阵的转置。
>>a+b
ans=
02
41
>>2*a
ans=
24
6-2
>>2*a-3*b
ans=
54
3-8
>>a*b
ans=
14
-4-2
>>b/a
ans=
-0.1429-0.2857
1.00000
>>a\b
ans=
0.14290.5714
-0.5714-0.2857
>>inv(a)
ans=
0.14290.2857
0.4286-0.1429
>>rank(a)
ans=
2
>>flipud(a)
ans=
3-1
12
>>a'
ans=
13
2-1
3.多维数组的创建及运算
多维数组的创建与矩阵的创建基本相同;数组的运算除加减操作相同外,其它如乘、左除、右除的运算在运算符前加上小圆点表示,以区分矩阵运算。
特点是两个数组相对应元素进行运算。
已知
,
求a+b,a-b,a.*b,a./b,a.\b
>>a+b
ans=
02
41
>>a-b
ans=
22
2-3
>>a.*b
ans=
-10
3-2
>>a./b
Warning:
Dividebyzero.
ans=
-1.0000Inf
3.0000-0.5000
>>a.\b
ans=
-1.00000
0.3333-2.0000
4.字符串的操作
字符串的操作有字符串的创建、求字符串的长度、数值与字符之间相互转换操作等。
s1='Ilikematlab'
s2='Iamastudent'
s3=[s2,'and',s1]
>>s1='Ilikematlabv'
s1=
Ilikematlabv
>>s2='Tamastudent'
s2=
Tamastudent
>>s3=[s2,'and',s1]
s3=
TamastudentandIlikematlabv
length(s1)
>>length(s1)
ans=
14
size(s1)
>>size(s1)
ans=
114
cs1=abs(s1)
>>cs1=abs(s1)
cs1=
733210810510710132109971161089798118
cs2=double(s1)
>>cs2=double(s1)
cs2=
733210810510710132109971161089798118
char(cs2)
>>char(cs2)
ans=
Ilikematlabv
setstr(cs2)
>>setstr(cs2)
ans=
Ilikematlabv
四、实验体会
本次实验主要是对数组或矩阵的操作,通过这次的实验我熟悉了数组和矩阵的一些常规操作,包括矩阵的创建、矩阵操作函数的使用。
矩阵的创建有很多种方法,使用非常灵活。
矩阵函数更是多种多样,通过实验的练习能够使我们更加深的理解和记忆。
实验三MATLAB数值运算
一、实验目的
掌握MATLAB的数值运算及其运算中所用到的函数,掌握结构数组和细胞数组的操作。
二、实验内容:
(1)多项式运算。
(2)多项式插值和拟合。
(3)数值微积分。
三、实验步骤:
1.多项式运算
(1)多项式表示。
在MATLAB中,多项式表示成向量的形式。
如:
在MATLAB中表示为
>>S=[13-509]
(2)多项式的加减法相当于向量的加减法,但须注意阶次要相同。
如不同,低阶的要补0。
如多项式与多项式相加。
>>S1=[002311]
>>S2=[13-547]
>>S3=S1+S2
(3)多项式的乘、除法分别用函数conv和deconv实现
>>S1=[2311]
>>S2=[13-547]
>>S3=conv(S1,S2)
>>S4=deconv(S3,S1)
(4)多项式求根用函数roots
>>S1=[242]
>>roots(S1)
(5)多项式求值用函数polyval
>>S1=[241-3]
>>polyval(S1,3)
>>x=1:
10
>>y=polyval(S1,x)
2.多项式插值和拟合
有一组实验数据如附表1-1所示。
X
1
2
3
4
5
6
7
8
9
10
Y
16
32
70
142
260
436
682
1010
1432
1960
请分别用拟合(二阶至三阶)和插值(线性和三次样条)的方法来估测X=9.5时Y的值。
以下是实现一阶拟合的语句。
>>x=1:
10
>>y=[163270142260436682101014321960]
>>p1=polyfit(x,y,1)
>>y1=polyval(p1,9.5)
3.数值微积分
(1)差分使用diff函数实现。
>>x=1:
2:
9
>>diff(x)
(2)可以用因变量和自变量差分的结果相除得到数值微分。
>>x=linspace(0,2*pi,100);
>>y=sin(x);
>>plot(x,y)
>>y1=diff(y)./diff(x);
>>plot(x(1:
end-1),y1)
(3)cumsum函数求累计积分,trapz函数用梯形法求定积分,即曲线的面积。
>>x=ones(1,10)
>>cumsum(x)
>>x=linspace(0,pi,100);
>>y=sin(x);
>>S=trapz(y,x)
四、实验体会
本次实验主要是要我们了解数组的一些操作和属性。
实验通过对多项式的运算插值等操作来帮助理解数组和矩阵的一些操作。
另外,加入了两个画图函数来通过实际的图像进一步的了解数组函数的操作和功能。
实验四MATLAB符号运算
一、实验目的
掌握符号变量和符号表达式的创建,掌握MATLAB的symbol工具箱的一些基本应用。
二、实验内容
(1)符号变量、表达式、方程及函数的表示。
(2)符号微积分运算。
(3)符号微分方程求解。
三、实验步骤
1.符号运算的引入
在数值运算中如果求则可以不断地让x趋近0,以求得表达式趋近什么数,但是终究不能令x=0,因为在数值运算中0是不能作除数的。
MATLAB的符号运算能解决这类问题。
输入如下命令:
>>f=sym('sin(pi*x)/x')
>>limit(f,’x’,0)
2.符号常量、符号变量、符号表达式的创建
(1)使用sym()创建
输入以下命令,观察Workspace中A、B、f是什么类型的数据,占用多少字节的内存空间。
>>A=sym('1')%符号常量
>>B=sym('x')%符号变量
>>f=sym('2*x^2+3y-1')%符号表达式
>>clear
>>f1=sym('1+2')%有单引号,表示字符串
>>f2=sym(1+2)%无单引号
>>f3=sym('2*x+3')
>>f4=sym(2*x+3)%为什么会出错
>>x=1
>>f4=sym(2*x+3)
通过看MATLAB的帮助可知,sym()的参数可以是字符串或数值类型,无论是哪种类型都会生成符号类型数据。
(2)使用syms创建
>>clear
>>symsxyz%注意观察x,y,z都是什么类型的,它们的内容是什么
>>x,y,z
>>f1=x^2+2*x+1
>>f2=exp(y)+exp(z)^2
>>f3=f1+f2
通过以上实验,知道生成符号表达式的第二种方法:
由符号类型的变量经过运算(加减乘除等)得到。
又如:
>>f1=sym('x^2+y+sin
(2)')
>>symsxy
>>f2=x^2+y+sin
(2)
>>x=sym('2'),y=sym('1')
>>f3=x^2+y+sin
(2)
>>y=sym('w')
>>f4=x^2+y+sin
(2)
3.符号矩阵创建
>>symsa1a2a3a4
>>A=[a1a2;a3a4]
>>A
(1),A(3)
或者
>>B=sym('[b1b2;b3b4]')
>>c1=sym('sin(x)')
>>c2=sym('x^2')
>>c3=sym('3*y+z')
>>c4=sym('3')
>>C=[c1c2;c3c4]
4.符号算术运算
(1)符号量相乘、相除
符号量相乘运算和数值量相乘一样,分成矩阵乘和数组乘。
>>a=sym(5);b=sym(7);
>>c1=a*b
>>c2=a/b
>>a=sym(5);B=sym([345]);
>>C1=a*B,C2=a\B
>>symsab
>>A=[5a;b3];B=[2*ab;2*ba];
>>C1=A*B,C2=A.*B
>>C3=A\B,C4=A./B
(2)符号数值任意精度控制和运算
任意精度的VPA运算可以使用命令digits(设定默认的精度)和vpa(对指定对象以新的精度进行计算)来实现。
>>a=sym('2*sqrt(5)+pi')
>>b=sym(2*sqrt(5)+pi)
>>digits
>>vpa(a)
>>digits(15)
>>vpa(a)
>>c1=vpa(a,56)
>>c2=vpa(b,56)
注意:
观察c1和c2的数据类型,c1和c2是否相等。
5.符号表达式的操作和转换
符号表达式化简主要包括表达式美化(pretty)、合并同类项(collect)、多项式展开(expand)、因式分解(factor)、化简(simple或simplify)等函数。
1合并同类项(collect)。
分别按x的同幂项和e指数同幂项合并表达式:
>>symsxt;f=(x^2+x*exp(-t)+1)*(x+exp(-t));
>>f1=collect(f)
>>f2=collect(f,’exp(-t)’)
②对显示格式加以美化(pretty)。
针对上例,用格式美化函数可以使显示出的格式更符合数学书写习惯。
>>pretty(f1)
>>pretty(f2)
注意:
与直接输出的f1和f2对比。
③多项式展开(expand)。
展开(x-1)12成x不同幂次的多项式。
>>clearall
>>symsx;
>>f=(x-1)^12;
>>pretty(expand(f))
④因式分解(factor)。
将表达式x12–1作因式分解。
>>clearall
>>symsx;f=x^12-1;
>>pretty(factor(f))
⑤化简(simple或simplify)。
将函数化简。
>>clearall,symsx;f=(1/x^3+6/x^2+12/x+8)^(1/3);
>>g1=simple(f)
>>g2=simplify(f)
6.符号极限、符号积分与微分
(1)求极限函数的调用格式
limit(F,x,a)%返回符号对象F当x→a时的极限
limit(F,a)%返回符号对象F当独立变量*→a时的极限
limit(F)%返回符号对象F当独立变量→0(a=0)时的极限
limit(F,x,a,’right’)%返回符号对象F当x→a时的右极限
limit(F,x,a,’left’)%返回符号对象F当x→a时的左极限
(2)求积分函数的调用格式
int(F)%求符号对象F关于默认变量的不定积分
int(F,v)%求符号对象F关于指定变量v的不定积分
int(F,a,b)%求符号对象F关于默认变量的从a到b的定积分
int(F,v,a,b)%求符号对象F关于指定变量v的从a到b的定积分
(3)求微分函数的调用格式
diff(F)%求符号对象F关于默认变量的微分
diff(F,v)%求符号对象F关于指定变量v的微分
diff(F,n)%求符号对象F关于默认变量的n次微分,n为自然数1、2、3…
diff(F,v,n)%求符号对象F关于指定变量v的n次微分
7.符号方程的求解
(1)常规方程求解函数的调用格式
g=solve(eq)%求方程(或表达式或字串)eq关于默认变量的解
g=solve(eq,var)%求方程(或表达式或字串)eq关于指定变量var的解
g=solve(eq1,eq2,...,eqn,var1,var2,...,varn)%求方程(或表达式或字串)组
eq1,eq2,...,eqn关于指定变量组var1,var2,...,varn的解
(2)常微分方程求解
求解常微分方程的函数是dsolve。
应用此函数可以求得常微分方程(组)的通解,以及给定边界条件(或初始条件)后的特解。
常微分方程求解函数的调用格式:
r=dsolve('eq1,eq2,...','cond1,cond2,...','v')
r=dsolve('eq1','eq2',...,'cond1','cond2',...,'v')
说明:
①以上两式均可给出方程eq1、eq2...对应初始条件cond1、cond2...之下的以v作为
解变量的各微分方程的解。
2常微分方程解的默认变量为t。
3第二式中最多可接受的输入式是12个。
④微分方程的表达方法。
在用MATLAB求解常微分方程时,用大写字母Dy表示微分符号,用D2y表示,依次类推。
边界条件以类似于y(a)=b或Dy(a)=b的等式给出。
其中y为因变量,a、b为常数。
如果初始条件给得不够,求出的解则为含有C1、C2等待定常数的通解。
例如:
求微分方程为y’=2x的通解。
四、实验要求
1、求
2、求函数的积分;求函数的导数。
3、计算定积分。
4、求下列线性方程组的解
5、求解当y(0)=2,z(0)=7时,微分方程组的解
五、实验体会。
本次实验,主要练习了在MATLAB中使用表达式和函数的求解,进一步让我见识到了MATLAB的强大功能,特别是方程组、积分微分方程的求解,使得我们在今后的学习生活中都能受益匪浅。
实验五MATLAB程序设计
一、实验目的
掌握MATLAB程序设计的主要方法,熟练编写MATLAB函数。
二、实验内容
(1)M文件的编辑。
(2)程序流程控制结构。
(3)子函数调用和参数传递。
三、实验步骤
1.M文件的编辑
选择MATLAB的菜单File|New|M-file,打开新的M文件进行编辑,然后输入源程序;保存好文件后,运行该程序。
在菜单debug|run命令保存文件并运行该文件,结果在命令窗口下显示;注意观察工作空间中显示的变量。
注意保存文件的文件名的选取。
2.程序流程控制结构
(1)for循环结构
for循环控制变量=表达式1:
表达式2:
表达式3
语句
end
(2)while循环结构
while关系表达式
语句
end
(3)if-else-end分支结构
if-else-end分支有如下3种形式。
(a)if表达式
语句组1
end
(b)if表达式
语句组1
else
语句组2
end
(c)if表达式A
语句组1
elseif表达式B
语句组2
elseif
语句组3
……
else
语句组n
end
(4)switch-case结构
switch语句的一般结构是
switch表达式
case表达式1
语句1
case表达式2
语句2
......
case表达式n
语句n
otherwise
语句n+1
end
当表达式的值等于表达式1的值时,执行语句1;当表达式的值等于表达式2的值时,执行语句2;...;当表达式的值等于表达式n的值时,执行语句n;当表达式的值不等于任何case后面所列的表达式时,执行语句n+1。
当任何一个分支语句执行完后,都直接转到end语句的下一条语句。
三、实验内容
1.试计算以下循环语句操作的步数。
(1)fori=-1000:
1000
共2001步
(2)forj=1:
2:
20
共10步
2.用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到最后一项的绝对值小于为止,试编写其M文件并运行,写出实际运行结果。
3.试用switch语句完成卷面成绩score的转换:
(1)score≥90分,优;
(2)90>score≥80分,良;
(3)80>score≥70分,中;
(4)70>score≥60分,及格;
(5)60<score,不及格。
4.用for循环和while循环语句求1!
+2!
+…+10!
的值。
四、实验体会
本次实验主要是练习MATLAB的程序设计,matlab的程序设计,虽然和以前学的c/c++有很大的不同,但编程的思想还是一样的。
所以对于MATLAB的程序设计理解和学习并没有太多的难处,但是,一旦亲手编写时,还是