MATLAB实验报告.docx

上传人:b****5 文档编号:7537418 上传时间:2023-01-24 格式:DOCX 页数:35 大小:360.67KB
下载 相关 举报
MATLAB实验报告.docx_第1页
第1页 / 共35页
MATLAB实验报告.docx_第2页
第2页 / 共35页
MATLAB实验报告.docx_第3页
第3页 / 共35页
MATLAB实验报告.docx_第4页
第4页 / 共35页
MATLAB实验报告.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

MATLAB实验报告.docx

《MATLAB实验报告.docx》由会员分享,可在线阅读,更多相关《MATLAB实验报告.docx(35页珍藏版)》请在冰豆网上搜索。

MATLAB实验报告.docx

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.符号极限

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1