MATLAB实验报告.docx
《MATLAB实验报告.docx》由会员分享,可在线阅读,更多相关《MATLAB实验报告.docx(35页珍藏版)》请在冰豆网上搜索。
MATLAB实验报告
实验二MATLAB语言基础
一、实验目的
基本掌握MATLAB向量矩阵数组的生成及基本运算(区分数组运算和矩阵预算)、常用的数学函数。
了解字符串的操作。
二、实验内容
(1)向量的生成和运算。
(2)矩阵的创建、引用和运算。
(3)多维数组的创建和运算。
(4)字符创的操作。
三、实验步骤
1.向量的生成和运算
1)向量的生成
<1>、直接输入法
<2>冒号表达式法
<3>函数法:
Linspace()是线性等分函数,logspace()是对数等分函数。
2)向量的运算
1>维数相同的行、列向量之间可以相加减,标量可以与向量直接相乘除。
2>向量的点积与叉积运算
E1和E2虽然表达式相同,但E1是标量,E2是矩阵。
2.矩阵的创建、引用和运算
1)矩阵的创建和引用
矩阵是由m*n元素构成的矩形结构,行向量和列向量是矩阵的特殊形式。
1>直接输入法:
2>抽取法:
包括单下标抽取和全下表抽取两种方式,且两种方式抽取的元素都必须以小括号括起来。
3>函数法:
利用ones(m;n)创建全1矩阵,zeros()创建全0矩阵,eyes()创建单位矩阵等等。
4>拼接法:
纵向拼接
横向拼接
5>利用拼接函数cat()repmat()和变形函数reshape()
>>A1=[123;987;456];A2=A1.';
>>cat(1,A1,A2)沿行向拼接
ans=
123
987
456
194
285
376
>>cat(2,A1,A2)沿列向拼接
ans=
123194
987285
456376
>>repmat(A1,2,2)
ans=
123123
987987
456456
123123
987987
456456
>A=linspace(2,18,9)
A=
24681012141618
>>reshape(A,3,3)
ans=
2814
41016
61218
2)矩阵的运算
练习
(1)用矩阵除法求下列方程组的解x=[x1;x2;x3]
>>A=[634;-257;8-1-3];B=[3;-4;-7];X=A\B
X=
1.0200
-14.0000
9.7200
(2)求矩阵的秩
A=[634;-257;8-1-3];
>>rank(A)
ans=
3
[X,lamda]=eig(A)
X=
0.8013-0.1094-0.1606
0.3638-0.65640.8669
0.47490.7464-0.4719
lamda=
9.732600
0-3.29280
001.5602
(3)矩阵的开方
>>B=sqrtm(A)
B=
2.2447+0.2706i0.6974-0.1400i0.9422-0.3494i
-0.5815+1.6244i2.1005-0.8405i1.7620-2.0970i
1.9719-1.8471i-0.3017+0.9557i0.0236+2.3845i
(4)矩阵的指数与对数:
>C=expm(A)
C=
1.0e+004*
1.06530.54150.6323
0.48300.24650.2876
0.63160.32060.3745
>>logm(C)
ans=
6.00003.00004.0000
-2.00005.00007.0000
8.0000-1.0000-3.0000
(6)矩阵的转置
D=A'
D=
6-28
35-1
47-3
(7)矩阵的提取与翻转:
通过各种特定函数如triu(A)、tril(A),diag(A)、flipud(A)、fliplr(A)等等。
3.多维数组的创建与运算
练习:
创建三维数组A,第一页为[13;24],第二页为[12;21],第三页为[35;71].然后用变形函数重排为数组B,B为3行,2列,2页。
>>C=[35;71];D=[13;42];B=[12;21];
A(:
:
1)=D;A(:
:
2)=B;A(:
:
3)=C;
>>A
A(:
:
1)=
13
42
A(:
:
2)=
12
21
A(:
:
3)=
35
71
reshape(A,3,2,2)
ans(:
:
1)=
12
41
32
ans(:
:
2)=
27
15
31
4.字符数组的操作
1)直接输入创建字符数组
2)求字符数组的长度:
利用函数length()、size()
3)用abs()、double()和char()、setstr()实现字符串与数值数组的相互转换。
练习;用char()和向量生成的方法创建如下字符串AaBbCc…XxYyZz。
>>A=[65+(0:
25);97+(0:
25)];
>>B=reshape(A,1,[]);
>>char(B)
ans=
AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
实验三MATLAB数值运算
一、实验目的
掌握MATLAB的数值运算及其运算中所用到的函数,掌握结构数组和细胞数组的操作。
二、实验内容:
(1)多项式运算。
(2)结构数组和细胞数组。
三、实验步骤:
1、多项式加减法,注意阶次要相同,如不同,低阶的要补0.如2s^2+3s+9和s^4+3s^3-5s^2+4s+7相加
>>s1=[002311];s2=[13-547];
>>s3=s1+s2
s3=
13-3718
2、多项式乘除用函数conv和deconv实现
>>s1=[2311];s2=[13-547];
>>s3=conv(s1,s2)
s3=
291026-296577
>>s4=deconv(s3,s1)
s4=
13-547
3、多项式求根用函数roots
>>s1=[242];
>>roots(s1)
ans=
-1
-1
4、多项式求值用函数polyval
>>s1=[241-3];
>>polyval(s1,3)
ans=
90
>>x=1:
10;
>>y=polyval(s1,x)
y=
Columns1through8
431901933525798861285
Columns9through10
17882407
5、结构数组的创建
student.number='20050731001';
student.name='Jack';
student
(2).number='20050731002';
student
(2).name='Lucy';
或者用struc函数创建。
student=struct('number',{'001','002'},'name',{'Jack','Lucy'})
student=
1x2structarraywithfields:
number
name
6、结构数组的操作。
>>student
(1).subject=[]
student=
1x2structarraywithfields:
number
name
subject
>>student
(1).sorce=[]
student=
1x2structarraywithfields:
number
name
subject
sorce
>>student
student=
1x2structarraywithfields:
number
name
subject
sorce
>>fieldnames(student)
ans=
'number'
'name'
'subject'
'sorce'
>>getfield(student,{2},'name')
ans=
Lucy
>>student=rmfield(student,'subject')
student=
1x2structarraywithfields:
number
name
sorce
>>student=setfield(student,{1},'sorce',90)
student=
1x2structarraywithfields:
number
name
sorce
>>student=setfield(student,{1},'sorce',90);
>>student
(2).sorce=88;
7、细胞数组的创建。
>>A={'Howareyou!
',ones(3);[12;34],{'cell'}};
>>B(1,1)={'Helloworld'};
>>B(1,2)={magic(3)};
>>B(2,1)={[1234]};
或者用cell函数先创建空的细胞数组,然后在给各个元素赋值。
>>C=cell(1,2);
>>C(1,1)={'Helloworld'}
C=
'Helloworld'[]
>>C(1,2)={magic(3)}
C=
'Helloworld'[3x3double]
>>C(1,3)={[1234]}
C=
'Helloworld'[3x3double][1x4double]
8、细胞数组的操作。
ans1=A(1,1)
ans1=
'Howareyou!
'
>>ans2=A{1,1}
ans2=
Howareyou!
>>whosans1ans2
NameSizeBytesClass
ans11x184cellarray
ans21x1224chararray
Grandtotalis25elementsusing108bytes
>>a1=A{2,1}(1,2)
a1=
2
>>[a2a3]=deal(A{1:
2})
a2=
Howareyou!
a3=
12
34
实验四MATLAB符号运算
一.实验目的
掌握符号变量和符号表达式的创建,掌握matlab的symbol工具箱的一些基本应用。
二.实验内容
(1)符号变量、表达式、方程及函数的表示。
(2)符号为积分运算。
(3)符号表达式的操作和转换。
(4)符号微分方程求解。
三.实验步骤
1.符号运算的引入
在数值运算中如果求lim(sin(pi*x)/x(x-0),则可以不断让x趋近0,一球的表达式趋近什么数,但是终究不能令x=0,在数值运算中0不能做除数。
Matlab的符号运算能解决这类问题。
输入如下命令:
>>f=sym('sin(pi*x)/x')
f=
sin(pi*x)/x
>>limit(f,'x',0)
ans=
pi
2.符号常量、符号变量、符号表达式的创建
1)使用sym()创建
输入以下命令,观察workspace中a,b,f是什么类型的数据,占用多少字节的内存空间。
>>a=sym('1')
a=
1
>>b=sym('x')
b=
x
>>f=sym('2*x^2+3*y-1')
f=
2*x^2+3*y-1
>>clear
>>f1=sym('1+2'),f2=sym(1+2),f3=sym('2*x+3'),f4=sym(2*x+3)
f1=
1+2
f2=
3
f3=
2*x+3
Undefinedfunctionorvariable'x'.
>>x=2,f4=sym(2*x+3)
x=
2
f4=
7
Sym()的参数可以是字符串或数值类型,无论你是哪种类型都会生成符号类型数据。
2)使用syms创建
>>clear
>>symsxyz
>>x,y,z
x=
x
y=
y
z=
z
>>f1=x^2+2*x+1
f1=
x^2+2*x+1
>>f2=exp(y)+exp(z)^2
f2=
exp(y)+exp(z)^2
>>f3=f1+f2
f3=
x^2+2*x+1+exp(y)+exp(z)^2
用符号类型的变量经过运算(加减乘除)得到。
又如:
>>f1=sym('x^2+y+siin
(2)')
f1=
x^2+y+siin
(2)
>>symsxy
>>f2=x^2+y+sin
(2)
f2=
x^2+y+4095111552621091/4503599627370496
>>x=sym('2'),y=sym('1')
x=
2
y=
1
>>f3=x^2+y+sin
(2)
f3=
26613109689473571/4503599627370496
>>y=sym('w'),f4=x^2+y+sin
(2)
y=
w
f4=
22109510062103075/4503599627370496+w
思考题:
symsx是不是相当于x=sym(‘x’)?
答:
不等于,前者是符号x作用于整个工作空间,除非clear,后者只作用于变量x。
3.符号矩阵创建
>>symsa1a2a3a4
>>a=[a1a2;a3a4]
a=
[a1,a2]
[a3,a4]
>>a
(1),a(3)
ans=
a1
ans=
a2
>>b=sym('[b1b2;b3b5]')
b=
[b1,b2]
[b3,b5]
>>c1=sym('sin(x)'),c2=sym('x^2'),c3=sym('3*y+z'),c4=sym('3'),c=[c1c2;c3c4]
c1=
sin(x)
c2=
x^2
c3=
3*y+z
c4=
3
c=
[sin(x),x^2]
[3*y+z,3]
思考题:
分别用sym和syms创建符号表达式:
f1=cosx+(-(sin(x))^2)^(1/2),f2=y/exp(-2*t)。
答:
>>sym('f1=cos(x)+(-(sin(x))^2)^(1/2)'),sym('f2=y/exp(-2*t)')
ans=
f1=cos(x)+(-(sin(x))^2)^(1/2)
ans=
f2=y/exp(-2*t)
>>symsxyt
>>f1=cos(x)+(-(sin(x))^2)^(1/2),f2=y/exp(-2*t)
f1=
cos(x)+(-sin(x)^2)^(1/2)
f2=
y/exp(-2*t)
4.符号算术运算
1)符号量相乘、相除(分成矩阵乘和数组乘)。
>>a=sym(5);b=sym(7);
>>c1=a*b,c2=a/b
c1=
35
c2=
5/7
>>a=sym(5);b=sym([345]);
>>c1=a*b,c2=a\b
c1=
[15,20,25]
c2=
[3/5,4/5,1]
>>symsab
>>A=[5a;b3];B=[2*ab;2*ba]
B=
[2*a,b]
[2*b,a]
>>c1=A*B,c2=A.*B,C3=A\B,C4=A./B
c1=
[10*a+2*a*b,5*b+a^2]
[2*a*b+6*b,b^2+3*a]
c2=
[10*a,a*b]
[2*b^2,3*a]
C3=
[2*a*(b-3)/(-15+a*b),(a^2-3*b)/(-15+a*b)]
[2*b*(a-5)/(-15+a*b),-(5*a-b^2)/(-15+a*b)]
C4=
[5/2/a,a/b]
[1/2,3/a]
2)符号数值任意精度控制和运算
任意精度的VPA运算可以使用命令digits(设定默认的精度)和vpa(对指定对象以新的精度进行计算)来实现。
>>a=sym('2*sqrt(5)+pi'),b=sym(2*sqrt(5)+pi)
a=
2*sqrt(5)+pi
b=
8572296331135796*2^(-50)
>>digits
Digits=32
>>vpa(a),c1=vpa(a,56),c2=vpa(b,56)
ans=
7.6137286085893726312809907207421
c1=
7.6137286085893726312809907207420553550784061185981572696
c2=
7.6137286085893727261009189533069729804992675781250000000
3)符号类型与数值类型的转换
使用double,numeric函数可以将有理数型和vpa型符号对象转换成数值对象。
>>clear
>>a1=sym('2*sqrt(5)+pi'),b1=double(a1),b2=isnumeric(b1),a2=vpa(a1,70)
a1=
2*sqrt(5)+pi
b1=
7.6137
b2=
1
a2=
7.613728608589372631280990720742055355078406118598157269516739083128858
5.符号表达式的操作和转换
1)独立变量的确定原则
独立变量的确定原则:
在符号表达式中默认变量是唯一的。
Matlab会对单个英文小写字母(除i,j)进行搜索,且以为首选独立变量。
如果表达式中字幕唯一,且无x,就选在字母表顺序中最接近x的字母。
如果有相连的字母,则选择在字母表中较后的那一个;
输入以下命令:
>>clear
>>f=sym('a+b+i+j+x+y+xz')
f=
a+b+i+j+x+y+xz
>>findsym(f)
ans=
a,b,j,x,xz,y
>>findsym(f,1),findsym(f,2),findsym(f,3),findsym(f,4),findsym(f,5),findsym(f,6)
ans=
x
ans=
x,xz
ans=
x,xz,y
ans=
x,xz,y,j
ans=
x,xz,y,j,b
ans=
x,xz,y,j,b,a
2)符号表达式的化简
(1)合并同类项collect
>>symsxt;f=(x^2+x*exp(-t)+1)*(x+exp(-t));
>>f1=collect(f),f2=collect(f,'exp(-t)')
f1=
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
f2=
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x
(2)显示格式美化pretty
>>pretty(f1),pretty(f2)
322
x+2exp(-t)x+(1+exp(-t))x+exp(-t)
222
xexp(-t)+(2x+1)exp(-t)+(x+1)x
(3)多项式展开expand函数。
展开(x-1)^12。
>>symsx;
>>f=(x-1)^12;
>>pretty(expand(f))
12111098765
1+x-12x+66x-220x+495x-792x+924x-792x
432
+495x-220x+66x-12x
(4)因式分解fator函数,分解x^12-1。
>>symsx;f=x^12-1;
>>pretty(factor(f))
22242
(x-1)(1+x+x)(1+x)(1-x+x)(1+x)(x-x+1)
(5)化简(simple或simplify):
化简函数f=(1/x^3+6/x^2+12/x+8)^(1/3);
>>symsx;f=(1/x^3+6/x^2+12/x+8)^(1/3);g1=simple(f),g2=simplify(f)
g1=
(2*x+1)/x
g2=
((2*x+1)^3/x^3)^(1/3)
6.符号表达式的变量替换
Subs函数可对符号表达式中得符号变量进行替换;
>>clear
>>f=sym('(x+y)^2+4*x+10'),f1=subs(f,'x','s'),f2=subs(f,'x+y','z')
f=
(x+y)^2+4*x+10
f1=
((s)+y)^2+4*(s)+10
f2=
((z))^2+4*x+10
练习:
(1)已知f=(a*x^2+b*x+c-3)^-a*(c*x^2+4*b*x-1),按自变量x和自变量a,对表达式f分别进行降幂排列;
(2)已知符号表达式f=1-(sin(x))^2,g=2*x+1,计算x=0.5时,f的值;计算复合函数f(g(x));
(1)>>symsxabc
>>f=(a*x^2+b*x+c-3)^-a*(c*x^2+4*b*x-1),collect(f,'x'),collect(f,'a')
f=
(a*x^2+b*x+c-3)^(-a)*(c*x^2+4*b*x-1)
ans=
(a*x^2+b*x+c-3)^(-a)*c*x^2+4*(a*x^2+b*x+c-3)^(-a)*b*x-(a*x^2+b*x+c-3)^(-a)
ans=
(a*x^2+b*x+c-3)^(-a)*(c*x^2+4*b*x-1)
(2)>>symsx
>>x=0.5,f=1-(sin(x))^2,g=2*x+1,
x=
0.5000
f=
0.7702
g=
2
7.符号极限