当前位置:腾讯分分彩官网 >> 计算机软件及应用 >>

matlab习题_图文

科学计算与MATLAB
主讲:汪冰峰 中南大学材料科学与工程学院

习题课

一、 基本概念题
? ? ?

?
?

误差/误差限; MATLAB语句 MATLAB变量命名规则 MATLAB操作指令 矩阵的基本知识等

2016/11/8

3

标点符号
名称 空格 逗号
黑点 分号 冒号 注释号 单引号 方括号 圆括号 花括号 下连线 续行号
2016/11/8

标点 含义 输入量与输入量之间的分隔符;矩阵元素分隔符 , 要显示计算结果的命令与其命令之间的分隔;输入量与输 入量之间的分隔符;矩阵元素分隔符 . 数值表示中的小数点 ; 不显示计算结果命令的结尾标志;不显示计算结果的命令 与其命令之间的分隔;矩阵的行间分隔符 : 用以生成一维数值矩阵;单下标援引时,表示全部元素构 成的长列;多下标援引时,表示所在维上的全部元素 % 对命令的注释,非执行的注释段 ‘’ 字符串标记符 [] 矩阵输入时用;函数命令输出变量列表时用 () 矩阵援引时用;函数命令输出变量列表时用 {} 单元结构矩阵记述符 用作一变量、函数或文件名中连字符 … 它把其下的物理行看作该行的“逻辑”继承,以构成一长 的完整命令 4

?

Matlab矩阵与数据类型
Matlab数据

MATLAB中共有15种基本数据类型和2种自定义类型。

逻辑类

字符类

数值类

单元

结构

函数句柄

用户类 int8,uint8 int16,uint16 int32,uint32 int64,uint64
2016/11/8

Java类

single
2016/11/8

double
5

5

常用字符串操作函数

2016/11/8

6

类型转换

>> a=['1 2';'3 4'] >> b=str2num(a) >> c=num2str(b) 1 2 3 4

class(a) >> class(b) >> class(c) ans = ans = ans = char
7

2016/11/8

char

double

结构型变量
结构型变量与单元数组非常相似,它允许用户将不同类 型的数据集中在一个单独的变量中。与单元数组不同的是 通过对字段的名称来对元素进行索引,而不是通过数字索 引

1、结构创建

1)直接用赋值语句创建 【例1-5】
>> student.name = 'pang long'; >>student.weight = '60'; >>student.height = '176'; >> whos Name Size Bytes Class student 1x1 400 struct array Grand total is 17 elements using 400 bytes
2016/11/8 8

?

2). 用struct 函数创建结构

1)s=struct(‘field1’,value1,’field2’,value2,…) field 表示字段名。value 表示对应于field 的字段值。 2)s=struct(‘field1’,{},’field2’,{},…) struct函数指定字段field1,field2等建立一个空结构。 3)struct([]) 建立一个没有字段的空结构。 4)struct(obj) 将对象obj转换为它的等价结构。
【例1-6】用struct函数创建一个结构。 >> s=struct('strings',{'hello','yes'},'lengths',[5 3]) s= 1x2 struct array with fields: strings lengths
2016/11/8 9

2 结构型变量的操作
1)

添加结构型变量

(1)添加新的结构型变量

【例1-7】在例1-5中添加一名新同学的信息。 >> student(2).name = 'guang long'; >> student(2).weight = '45'; >> student(2).height = '166'; 查看整体: >> student student = 1x2 struct array with fields: name weight height 查看分量: >> student(1) ans = name: 'pang long' weight: '60' height: '176' >> student(2) ans = name: 'guang long' 2016/11/8 weight: '45' height: '166'

10

(2)在已有的结构型变量中添加成员变量

【例1-8】把“年龄信息”也添加到例1-5中。 >> student.age=25 >> student student = name: 'pang long' weight: '60' height: '176' age: 25

2) 删除结构体变量

【例1-9】删除上例中“年龄信息”。 >> student=rmfield(student,'age') student = name: 'pang long' weight: '60' height: '176'
2016/11/8

用rmfield 函数删除结构数据中的成员变量。这个函数的形式如下: struct2 = rmfield(struct_array, 'field')

11

3) 调用结构体成员变量
在结构阵列中,利用结构名后的括号指示第n个结构元素,利用句 点引出的域名指示相应的域。结构体+豆点+域名
? ? ?

>> student.name ans = pang long

3 对结构使用函数
1) isfield函数
用于确定某个结构中是否包含有特殊字段。它的语法是isfield(S,’field’)。 如果‘field’是结构数组S中某个字段的名称,那么他将返回值 1,即意味是 “真”;否则返回值为 0。 >> isfield(Student,'name') ans =1

? ?

2)isstruct函数
用于确定某个数组是否是一个结构数组。它的语法是isstrct(S)。如果S是 一个结构数组,那么他将返回值 1;否则将是 0。 ? >> isstruct(Student) 2016/11/8 12 ? ans = 1

3)其它结构体函数
函数 说明 函数 fieldna mes isstruct struct 说明 得到结构的字名段 测试是否是结构 建立或转换结构数组

setfield 设定结构变量的属 性值 isfield 测试是否是结构数 组的字段

rmfield 删除结构型变量中 的属性 struct2 cell
2016/11/8

将结构数组转换为 单元数组

getfield 返回结构型变量的属 性值
13

不同数据类型之间的转化
MATLAB提供了丰富的函数来实现常用数据类型间的转换,具体见下图。
ASCII码 符号表达式

ch ar do ub le
字符串

sym r cha S2N

元胞数组

str N2S r t s uc l t cel c r h ar cha cell2struct
struct2cell

数值

数值型符号结果 vpa le b u do vpa sym do ub 符号常数 le

结构数组

注:上图中的S2N包括:str2int,str2num,str2mat,sscanf等; N2S包括: int2str,num2str,mat2str,sprintf等。

2016/11/8

14

三维/高维数组
? ?

三维矩阵的查询,可以(列,行,页)定之。 以维数为 3×4×2 的三维矩阵为例,其定址方式可图示 如下:

? 阵列 A 是三维矩阵,其中 A(:,:,1)代表第一頁的二维矩阵, A(:,:,2)代表第二頁的维矩阵。
2016/11/8 15 15

创建高维数组
1 2 3 4 直接通过“全下标”元素赋值的方式创建; 由若干同样大小的二维数组组合成多维数组; 由函数ones,zeros,rand,randn等直接创建特殊多维数组; 借助于cat,repmat,reshape等函数构建
A(2,4,2)=1;
d=ones(2,3);c(:,:,1)=d;c(:,:,2)=2*d;c(:,:,3)=3*d; Ones(2,3,2) cat(3,ones(2,3),2*ones(2,3),3*ones(2,3)) a=1:24; b=reshape(a,3,4,2) e=eye(2,3); f=repmat(e,[1,2,2])
2016/11/8 16

1 对于圆周率值,若取值为3.1415,则其 有数字为 (b) a、3位 b、4位 c、5位 d、2位
?

2016/11/8

17

?

2下面的MATLAB语句中正确的有: (cd)

a) a=sin(x)

b)Record-1=3+4i
c) a=sin(pi) d) C=1+6j
2016/11/8 18

(b)
?

3 符合MATLAB变量命名规则的有

a) var!2015 b)VAR15 c)my-var2015 d)2015_VAR

2016/11/8

19

?

4在循环结构中跳出循环,但继续下次循环 的命令为

(c )

(a) return; (b) break (c) continue (d) keyboad

2016/11/8

20

二、多项式及其运算

2016/11/8

21

多项式的建立与表示方法 1)系数向量的直接输入法
在MATLAB中,多项式p(x)=a0x^n+ a1x^(n-1)+…+an-1x+an用以 下系数向量表示:P=[a0 a1…an-1 an],即使用降幂系数的行向量 表示,没有的补0. 如:多项式 表示为:p=[1 -12 0 25 116]

x 4 ?12x3 ? 0 x 2 ? 25x ? 116

2)由poly函数创建
使用函数roots可以求出多项式等于0的根,根用列向量 表示。若已知多项式等于0的根,函数poly可以求出相应 多项式; 或从特征多项式获得。 r=roots(p) p=poly(r) p= 求方阵A的特征多项式: P=poly(A) 1 -12 -0 25 116 A=[1 2 3;2 3 4;3 4 5]; poly2sym(p)
ans = x^4 - 12*x^3 + 25*x + 116
22

P=poly(A) 2016/11/8 Poly2sym(P,’v’)

多项式运算工具 1)求多项式的根
(1)roots函数
p=[2 -5 6 -1 9]

ans = 1.6024 + 1.2709i 1.6024 - 1.2709i -0.3524 + 0.9755i -0.3524 - 0.9755i

roots(p) :为列向量
compan(p) eig(compan(p))

(2)通过建立多项式的伴随矩阵,再求其特征值

2)求多项式的值
(1)polyval(p,b):以数组为计算单元
p=[1 11 55 125] ; b=[1 2;3 4]; polyval(p,b) polyval(p,2) polyvalm(p,b) b一定为方阵
2016/11/8 2016/11/8

ans = 192 416 287 585

(2)polyvalm(p,b):以矩阵为计算单元 ans =
294 411 274 705
23

3) 相加+
a=[1 2 3];b=[3 2 0];c=a+b c= 4 4 3 a=[1 2 3];b=[3 2 0 5]; c=[0 a]+b c = 3 3 2

8

4) 相乘conv
a=[1 2 3] ; b=[1 2] c=conv(a,b)=1 4 7 6 conv指令可以嵌套使用,如conv(conv(a,b),c)

5) 相除deconv
[q,r]=deconv(c,b)
q=1 2 3 r=0 0 0 %商多项式 %余多项式

2016/11/8

24

6) 多项式的求导:polyder
>> p=[2 -5 6 -1 9] p= 2 -5 6 -1 9 >> poly2sym(p,'x') ans = 2*x^4 - 5*x^3 + 6*x^2 - x + 9 >> Dp=polyder(p) Dp = 8 -15 12 -1 >> poly2sym(Dp) ans = 8*x^3 - 15*x^2 + 12*x - 1

7) 多项式的求积分:polyint
>> polyint(Dp) ans = 2 -5 6 -1 >> polyint(Dp,9) ans = 2 -5 6 -1

0 9

2016/11/8

25

多项式的拟合
1)p=polyfit(x,y,n)
2)[p,s]=polyfit(x,y,n),
其中x和y为样本点向量,n为所求多项式的阶数,p为求出的多项式的系数 向量;s为拟合多项式系数向量的结构信息
>> x=0:pi/20:pi/2; >> y=sin(x); >> a=polyfit(x,y,5); >> x1=0:pi/30:pi*2; >> y1=sin(x1); >> y2=polyval(a,x1) y2=a(1)*x1.^5+a(2)*x1.^4+a(3)*x 1.^3+a(4)*x1.^2+a(5)*x1+a(6); >> plot(x,y,'o',x1,y1,'b-',x1,y2,'r*') >> legend('原始点','原曲线','拟合曲线') >> axis([0,7,-1.2,4])
2016/11/8
4 3.5 3 2.5 2 1.5 1 0.5 0 -0.5 -1 0 1 2 3 4 5 6 7 原始点 原曲线 拟合曲线

26

多项式插值

所用指令有一维的interp1、二维的interp2、三维的
interp3。这些指令分别有不同的方法(method),

设计者可以根据需要选择适当的方法,以满足系统
属性的要求。Help polyfun可以得到更详细的内容。 y=interp1(xs,ys,x,’method’)

2016/11/8

27

二、多项式及其运算
?

1 求多项式

x 4 ? 12 x 3 ? 25 x ? 116

在x=3,8处的值

a)-52

-1730

(c)

b) -54
c) -52 d) -54
2016/11/8

-1732
-1732 -1730
28

?

2 计算多项式x3+11x2+55x+125 在x=[1 2;3 4]的矩阵计算值

(b)

a)[192 287;416 585] b)[190 285;406 582]

c)[194 292;422 580]
d)[192 288;420 580]
2016/11/8 29

?

3 试用一个二次多项式拟合下列数据 x y 0.5 1.75 1.0 2.45 1.5 3.81 2.0 4.80 2.5 8.00

(d)
3.0 8.60

?

?

a) 0.4600 b) 0.8400 c) 0.4900 d) 0.4900

1.8601 2.9401 1.8601 1.2501

0.9730 0.8560 0.9730 0.8560

2016/11/8

30

三、矩阵及数组代数运算

2016/11/8

31

矩阵函数运算
函数名 sqrtm expm logm cond condest condeig 功能说明 矩阵开方运算 矩阵指数运算 矩阵对数运算 求矩阵的条件数 求矩阵 1- 范数条件 估计 求与矩阵特征值有 关的条件数 函数名 det eig 或 eigs funm gsvd inv poly 功能说明 求矩阵的行列式 求矩阵的特征值与 特征向量 矩阵的任意函数 广义奇异值 矩阵求逆 求矩阵的特征多项 式

Norm 或 求矩阵和向量的范 polyval normest m 数 null rank 矩阵的零空间 2016/11/8 pinv trace 伪逆矩阵

求矩阵特征多项式 的值
求矩阵的秩 求矩阵的迹
32

矩阵分解 (1)奇异值分解 [U,S,V]=svd(A) 例:a = 9 8 6 8 可以验证: u*u’=I v*v’=I u*s*v’=a

2016/11/8

求矩阵A的奇异值及分解矩阵,满 足U*S*V’=A,其中U、V矩阵为 正交矩阵(U*U’=I),S矩阵为对 角矩阵,它的对角元素即A矩阵的 奇异值。 [u,s,v]=svd(a) u= 0.7705 -0.6375 0.6375 0.7705 s= 15.5765 0 0 1.5408 v= 0.6907 -0.7231 0.7231 0.6907

33

(2)特征值分解 [V,D]=eig(A) 例: a = 9 8 6 8 [v,d]=eig(a) v= 0.7787 -0.7320 0.6274 0.6813 d= 15.4462 0 0 1.5538

求矩阵A的特征向量V及特征值D, 满足A*V=V*D。其中D的对角线 元素为特征值,V的列为对应的特 征向量。如果D=eig(A)则只返回 特征值。

2016/11/8

34

(3)三角分解 ? [L,U]=lu(X)
?

产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之 满足X=LU。注意,这里的矩阵X必须是方阵。

?
?

[L,U,P]=lu(X)
产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之 满足PX=LU。当然矩阵X同样必须是方阵。

例:a=[1 2 3;4 5 6;7 8 9] 比较: [l1,u1,p]=lu(a)

[l,u]=lu(a)

2016/11/8

35

?

【例】用LU分解求解下列线性方程组。
3 x ? y ? 4 z ? w ? 12 x ? 3 y ? 2 w ? ?6 2y ? z ? w ? 4 x ? 6 y ? z ? 3w ? 0

?

?
? ? ? ? ? ? ?

>> A=[3,1,-4,1;1,-3,0,2;0,2,1,-1;1,6,1,-3]; ? 或采用LU分解的第2种格式 >> b=[12,-6,4,0]'; ,命令如下: >> [L,U]=lu(A); ? >> [L,U ,P]=lu(A); >>x=U\(L\b) ? >> x=U\(L\P*b) x= ? x= -16.4444 ? -16.4444 20.6667 ? 20.6667 ? -1.1111 -1.1111 ? 36.2222 36.2222
36

2016/11/8

(4)正交分解 [Q,R]=qr(A) [Q,R,E]=qr(X) 例: a = 9 8 6 8 [q,r]=qr(a) q= -0.8321 -0.5547 -0.5547 0.8321 r= -10.8167 -11.0940 0 2.2188
2016/11/8

将矩阵A做正交化分解,使得 Q*R=A,其中Q为正交矩阵(其 范数为1,指令norm(Q)=1),R为 对角化的上三角矩阵。 产生一个一个正交矩阵Q、一个 上三角矩阵R以及一个置换矩阵E, 使之满足XE=QR。

37

【例】用QR分解求解例5-19线性方程组。 >> A=[3,1,-4,1;1,-3,0,2;0,2,1,-1;1,6,-1,-3]; >> b=[12,-6,4,0]'; >> [Q,R]=qr(A); x=R\(Q\b) x= -16.4444 20.6667 -1.1111 36.2222 或采用QR分解的第2种格式,命令如下: >> [Q,R,E]=qr(A); >>x=E*(R\(Q\b)) x= -16.4444 20.6667 -1.1111 36.2222
2016/11/8 38

三、矩阵及数组代数运算
? ?

1、已知A=[0 9 6;1 3 0;3 5 7];B=[1 4 3;1 5 0;2 5 9], 则A.*B

(b)

a) [21 75 54; 4 19 3; 22 72 72]
b) [0 36 18; 1 15 0; 6 25 63] c) [4 19 3;21 75 54; 22 72 72] d) [6 25 63;0 36 18; 1 15 0]
2016/11/8 39

?

2、求数组b=[1 2 3;4 5 6;7 8 9]的指数运算

(b)

a)1.0e+06 *[1.1189 1.3748 1.6307;2.5339 3.1134 3.6929;3.9489 4.8520 5.7552] b)1.0e+03 *[ 0.0027 0.0074 0.0201; 0.0546 0.1484 0.4034;1.0966 2.9810 8.1031] c)[0 0.6931 1.0986; 1.3863 1.6094 1.7918; 1.9459 2.0794 2.1972] d)[1.0000 1.4142 1.7321; 2.0000 2.2361 2.4495; 2.6458 2.8284 3.0000]
2016/11/8 40

?

3 求矩阵

的特征值
b) [2;3;4] d) [1;3;5]

a) [1;2;3] c) [3;4;5]

2016/11/8

41

四、数组抽取

2016/11/8

42

矩阵的操作
1

改变矩阵的行数和列数(变维) 1) reshape函数:B= reshape(A,m,n)
>> A = [1 24 7 10; 2 5 8 11; 3 6 9 12] >> B=reshape(A,2,6)

复制矩阵 repmat函数:B= repmat(A,m,n) 表示在水平方向复制m份,垂直方向复制n份
2

>> B=repmat(eye(2),3,4) B= 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 2016/11/8 0 1 0 1 0 1 0

0 1 0 1 0 1

43 43

3 矩阵的抽取
用下标可以从大矩阵里面抽取某些元素组成小的矩阵,并使用()运 算符; 可以通过把矩阵的行或列赋值为空矩阵来删除某行或某列
【例1-15】提取矩阵A的前2行为一个新矩阵B。 >>A=[1 2 3;4 5 6;7 8 9] 删除上例中A的第1,2列 ? >>B=A(1:2,:) >> A(:,[1 2])=[] ? B= ? 1 2 3 ? 4 5 6

diag(X,k): 抽取矩阵X的k条对角线的元素向量。 K=0时即抽取主对角 线; k为正值时抽取上方第k条对角线,为负则抽取下方 diag(X,k):使得向量v为所得矩阵的第k条对角线元素。 K=0时为主对 角线元素 tril(X,k):抽取矩阵X的第k条对角线下面的部分(含第k条对角线)形成 下三角矩阵。 K=0则为主下三角阵 triu(X,k):抽取矩阵X的第k条对角线上面的部分(含第k条对角线)形成 上三角矩阵。 K=0则为主上三角阵
2016/11/8 44

1

6

11

16

21

4
2

10
7

1
12

6
17

2
22

8
3

2
8

9
13

4
18

7
23

A=

7
4

5
9

7
14

1
19

5
24

A(1:5,5) A(:,5) A(21;25)

0
5

3
10

4
15

5
20

4
25

23

13

13

0

3

A(2,3) A(12)
2016/11/8

A(4:5,2:3)
A([ 9 14; 10 15 ])

A(1:5,end) A(:,end) A(21;end)

45 45

4 矩阵的旋转与移动
?

翻转矩阵 1) fliplr左右翻转函数: B= fliplr(A)=flipdim(A,2) 2) flipub上下翻转函数:B= flipub(A)=flipdim(A,1)
>> A = [1 2; 3 4; 5 6] >> B= fliplr(A)

?

移动矩阵 wshift函数: 实现矩阵元素在水平和垂直方向上的移动, Y=wshift(type,X,P) type是字符串,可取“1d’或“1D’, P用来定义移动的量。

>> clear all; x=1:6; X=magic(4); y=wshift(‘1d’,x,2) Y=wshift(‘2d’,X,[-1,2])

5 矩阵旋转

rot90函数:实现矩阵逆时针方向绕中心旋转90度,B= rot90(A,k) k设定旋转角度,为90的整数倍,
46 46

>> A=[1 2 3;4 5 6;7 8 9] 2016/11/8 B=rot90(A)

6矩阵连接
?

?

? ?

? ?

矩阵连接,是联合一个或多个矩阵形成一个新矩阵。方括号[]就可以 作为矩阵连接操作符。表达式A=[B C]就是水平连接矩阵B和C; A=[B;C]就是垂直连接矩阵B,C。 连接矩阵也可以用函数形成一个新矩阵,如cat函数。cat函数调用格 式: 1) C=cat(dim,A,B) Dim指链接方向。Dim的可选值:1,垂直方向;2,水平方向;3, 生成三维数组。 2) C=cat(dim,A1,A2,…) 可以实现连接多个矩阵。

把矩阵A,B分别在垂直方向,水平方向连接,A=[1 2 3],B=[4 5 6]。 ? >> C1=cat(1,A,B) %垂直方向连接 ? C1 = ? 1 2 3 ? 4 5 6 ? >> C2=cat(2,A,B) %水平方向连接 ? C2 = 2016/11/8 ? 1 2 3 4 5 6
?

47

四、数组抽取
?

1、若A为一二维数组,要删除其第34行的 元素,可使用命令 (c)

a)A(34,:)=0 b) A(:,34)=[] c) A(34,:)=[] d) A(:,34)=0

2016/11/8

48

?

2、设矩阵A=[1,2,3,4;3,4,5,6;3,6,1,0;9,12,1,2], 抽取成向量[2;4;6;12], 则使用命令

(a)

a)A(:,2) b) A(2,:)’ c) A([3,4,5,6]) d) A(2,:)

2016/11/8

49

五、数组关系逻辑运算

2016/11/8

50

关系和逻辑运算
MATLAB支持关系和逻辑运算,对于所有关系和逻辑表达式的输入, MATLAB把任何非零数值当作真,把零当做假。对于所有关系和逻辑 表达式的输出,对于真,输出为1;对于假,输出为零。

1)关系操作符
MATLAB关系操作符包括所有常用的比较运算符,主要用来比较两 个相同大小的数组,或用来比较一个数组和一个标量。对于后一种情 况,标量和数组中的每一个元素相比较,结果与数组大小一样。

运算 符
< > ==
2016/11/8

说明
小于 大于 等于

对应函数
lt(A,B) gt(A,B) eq(A,B)

运算 符
<= >= ~=

说明
小于或等 于 大于或等 于 不等于

对应函数
le(A,B) ge(A,B) ne(A,B)
51

2) 逻辑运算
1) 逻辑运算符包括与、非和或运算符。
运算符 & | ~ || 【例】 逻辑操作符的使用 && >> A = [0 1 1 0 1]; >> B = [1 1 0 0 1]; >> A&B ans = 0 1 0 0 1 >> b=28; >> a=21; >> x = (b ~= 0) && (a/b > 18.5) 2016/11/8 x= 0 说明 与 或 非 或,只适用于标量 与,只适用于标量 P66 a=[1:3;4:6;7:9]; x=5; y=ones(3)*5; xa=x<=a b=[0 1 0;1 0 1;0 0 1]; ab=a&b n_b=~b 对应函数 and(A,B) or(A,B) nor(A,B)

52

逻辑关系运算函数
函数 xor any all isequal isfinite find 说明 函数 说明 两矩阵是属于关系取 1,否 则取0 矩阵为空取1,否则取0 质数取1,否则取0 实数取1,否则取0 字符取1,否则取0 转换数值为逻辑型 逻辑或非。不相同取 1 , ismember 否则取0 向量只要有非0就取1,否 isempty 则取0 向量全非0取1,否则取0 isprime 相等取1,否则取0 isreal 元素为有限值取 1 ,否则 ischar 取0 iogical 寻找非0元素坐标

【例】 逻辑运算函数的使用 >> A = [0 0 pi 1]; >> B = [0 -2.4 0 1]; C = xor(A,B) C= 0 1 1 0 >> A = [0 1 2;0 -3 8;0 >> any(A) ans = 0 1 1 >> all(A) 2016/11/8 ans = 0 1 0

5

0];

P67 A=magic(5); A(:,3)=zeros(5,1); A1=all(A(:,1)<10) A2=all(A>3) A11=any(A(:,1)>10) A12=any(A>10) f=find(A) f2=find(abs(A)>20|abs(A)<5) 53 [m,n]=find(abs(A)>20|abs(A)<5) A(f2)

运算符优先级
?

MATLAB在执行含有 运算符 关系运算和逻辑运算 圆括号() 的数学运算时,同样 转置(.’),共轭转置(’),乘方(.^),矩阵乘方(^) 遵循一套优先级原则。 标量加法(+)、减法(-)、逻辑非(~) MATLAB首先执行具 乘法(.*),矩阵乘法(*),右除(./),左除(.\),矩阵右除(/),矩阵左除(\) 有较高优先级的运算, 加法(+),减法(-) 然后执行具有较低优 冒号运算符(:) 先级的运算;如果两 小于(<),小于等于(<=),大于(>),大于等于(>=),等于(==),不等于(~=) 个运算的优先级相同, 则按从左到右的顺序 数组逻辑与(&) 数组逻辑或(∣) 执行。
逻辑与(&&)

逻辑或(∣∣)

2016/11/8

54

五、数组关系逻辑运算
?

?

1、已知A=[0 9 6;1 3 0;3 5 7]; B=[1 4 3;1 5 0;2 5 9], 则A<B

(b)

a)[0 1 1; 1 1 0; 1 1 1] b)[1 0 0; 0 1 0; 0 0 1] c)[1 0 1; 1 0 0; 0 1 1] d)[0 0 1; 0 1 0; 1 0 1]
2016/11/8 55

?

?

2、 已知 A=magic(5),A(:,3)=zeros(5,1), 则all(A(:,1)<10)

(a)

a)0 b)1 c) [0 0 1 0 0] d)[1 1 0 1 1]

2016/11/8

56

六、符号运算与求极限

2016/11/8

57

建立符号表达式
含有符号对象的表达式称为符号表达式。建立符 号表达式有以下3种方法: (1)利用单引号来生成符号表达式。 如:y='1/sqrt(2*x) ‘ (2)用sym函数建立符号表达式。 如:U=sym('3*x^2-5*y+2*x*y+6' ) (3) 使用已经定义的符号变量组成符号表达式。 如:syms x y; V=3*x^2-5*y+2*x*y+6
2016/11/8 58

符号矩阵创建
1) 使用sym函数直接创建或先定义符号变量再输入矩阵 2) 创建子阵的方法创建符号矩阵 3) 将数值矩阵转化为符号矩阵
>> A=sym('[a,b;c,d]') A= >> a=[2/3,sqrt(2),0.222;1.4,1/0.23,log(3)] [ a, b] >> b=sym(a) [ c, d] b= [ 2/3, 2^(1/2), 111/500] >> syms a b c d [ 7/5, 100/23, >> A=[a b;c d] 2473854946935173/2251799813685248] A= [ a, b] >> class(a) [ c, d] ans = Double >> class(b) ans = sym
2016/11/8 59

符号矩阵及表达式的代数运算
1 符号矩阵及表达式的代数运算 ? 1).符号运算中的运算符 符号运算中的运算符有以下2种。 (1)基本运算符。(+,-,*,、^) (2)关系运算符。(==,~=) ? 2).函数运算

(1)三角函数和双曲函数。
(2)指数和对数函数。(exp,expm,log,logm) (3)复数函数。

(4)矩阵代数命令。(‘转置,det,inv,rank,svd,eig)

2016/11/8

60

【例】 求矩阵

?a A ? ? 11 ? a21

a12 ? a22 ? ?

的行列式值、非共轭转置和特征值。

>> syms a11 a12 a21 a22 >> A=[a11 a12;a21 a22] %创建符号矩阵 A= [ a11, a12] [ a21, a22] >> det(A) %计算行列式 ans = a11*a22?a12*a21 >> A.' %计算非共轭转置 ans = [ a11, a21] [ a12, a22] >> eig(A) %计算特征值 ans = [ 1/2*a22+1/2*a11+1/2*(a22^2?2*a11*a22+a11^2+4*a12*a21)^(1/2)] [ 1/2*a22+1/2*a11?1/2*(a22^2?2*a11*a22+a11^2+4*a12*a21)^(1/2)]
2016/11/8 61

【例】 符号表达式f=2x2+3x+4与g=5x+6的代数运算。 >> f=sym('2*x^2+3*x+4') f= 2*x^2+3*x+4 >> g=sym('5*x+6') g= 5*x+6 >> f+g %符号表达式相加 ans = 2*x^2+8*x+10 >> f*g %符号表达式相乘 ans = (5*x+6)*(2*x^2+3*x+4)

2016/11/8

62

符号数值任意精度控制和运算
? 1.Symbolic Math Toolbox中的算术运算方式 在Symbolic Math Toolbox中有3种不同的算术运算。 (1)数值型:MATLAB的浮点运算。 (2)有理数型:精确符号运算。 (3)VPA型:任意精度运算。 ? 2.任意精度控制

任意精度的VPA型运算可以使用digits和vpa命令来实现。
语法: digits(n) %设定默认的精度 %将s表示为n位有效位数的符号对象
63

语法:
S=vpa(s,n)
2016/11/8

【例】 对表达式 进行任意精度控制的比较。 >> a=sym('2*sqrt(5)+pi') a= pi + 2*5^(1/2) >> digits %显示默认的有效位数 Digits = 32 >> vpa(a) %用默认的位数计算并显示 ans = 7.6137286085893726312809907207421 >> vpa(a,20) %按指定的精度计算并显示 ans = 7.6137286085893726313 >> digits(15) %改变默认的有效位数 >> vpa(a) %按digits指定的精度计算并显示 ans = 7.61372860858937
2016/11/8 64

?

Symbolic Math Toolbox中的3种运算方式的比较 【例续】 用3种运算方式表达式比较2/3的结果。 >>a1 =2/3 %数值型 a1 = 0.6667 >>a2 = sym(2/3) %有理数型 a2 = 2/3 >> digits Digits = 32 >> a3 =vpa('2/3',32) %VPA型 a3 = .66666666666666666666666666666667

(1)3种运算方式中数值型运算的速度最快。 (2)有理数型符号运算的计算时间最长和占用内存最大,产生的结果非常准 确。 (3)VPA型的任意精度符号运算比较灵活,可以设置任意有效精度,当保留 的有效位数增加时,每次运算的时间和使用的内存也会增加。 (4)数值型变量a1结果显示的有效位数并不是存储的有效位数,在本书第1 章中曾介绍显示的有效位数由“format”命令控制,如下面修改的format命令就 改变了显示的有效位数: 2016/11/8 65

subs 函数 subs函数可用来对符号表达式中符号变量的替换 语法: subs(s) %用给定值替换符号表达式s中的所有变量 subs(s,new) %用new替换符号表达式s中的自由变量 subs(s,old,new) %用new替换符号表达式s中old的变量
>> f=sym('(x+y)^2+3*(x+y)+5’) f =(x+y)^2+3*(x+y)+5 >> x=5; >> f1=subs(f) %用工作空间中的给定值替换x f1 = (5+y)^2+20+3*y >> f2=subs(f,'x+y','s') %用s替换x+y f2 = ((s))^2+3*((s))+5 >> f3=subs(f,'x+y',5) %用常数5替换x+y f3 = 45 >> f4=subs(f,'x','z') %用z替换x 2016/11/8 f4 = ((z)+y)^2+3*((z)+y)+5

66

【例】 将符号变量 与数值变量进行转换。 >> a1=sym('2*sqrt(5)+pi') a= pi + 2*5^(1/2) >> b1=double(a1) b1 = 7.6137 >> a2=vpa(sym('2*sqrt(5)+pi'),32) a2 = 7.6137286085893726312809907207421 >> b2=double(a2) b2 = 7.6137

%转换为数值变量

%转换为数值变量

2016/11/8

67

符号表达式的化简
(1)多项式形式的表达方式:f(x)=x3+6x2+11x?6 (2)因式形式的表达方式:f(x)=(x?1)(x?2)(x?3) (3)嵌套形式的表达方式:f(x)=x(x(x?6)+11) ?6 【例】 3种形式的符号表达式的表示。 >> f=sym('x^3?6*x^2+11*x?6') f= x^3?6*x^2+11*x?6 >> g= sym('(x?1)*(x?2)*(x?3)') g= (x?1)*(x?2)*(x?3) >> h= sym(' x*(x*(x?6)+11) ?6') h= x*(x*(x?6)+11) ?6

%多项式形式
%因式形式 %嵌套形式

2016/11/8

68

MATLIB提供了pretty 、collect、expand、horner和factor函数,可以对 符号表达式进行化简,如表3.2所示。 函 数 名
pretty

变 换 前
x^3?6*x^2+11*x?6 (x?1)*(x?2)*(x?3)

变 换 后
3 2 x + 6 x + 11 x ? 6 x^3?6*x^2+11*x?6 x^3?6*x^2+11*x?6

备 注
给出排版形式的输出结果

collect expand

表示为合并同类项多项式 表示为多项式形式

(x?1)*(x?2)*(x?3)
x^3?6*x^2+11*x?6 x^3?6*x^2+11*x?6

horner
factor

x*(x*(x?6)+11) ?6
(x?1)*(x?2)*(x?3)

表示为嵌套的形式
表示为因式的形式

2016/11/8

69

syms a b x y; A=a^3-b^3; factor(A) %对A分解因式 ans = -(b-a)*(b^2+b*a+a^2) s=(-7*x^2-8*y^2)*(-x^2+3*y^2);
expand(s) %对s展开 ans = 7*x^4-13*x^2*y^2-24*y^4 collect(s,x) %对s按变量x合并同类项(无同类项) ans = 7*x^4-13*x^2*y^2-24*y^4 factor(sym(‘420’)) ans = (2)^2*(3)*(5)*(7) 2016/11/8 %对符号整数分解因式
70

求反函数和复合函数
1.求反函数 对于函数f(x),若存在另一个函数g(.),使得g(f(x))=x成立,则函数g(.)称 为函数f(x)的反函数。在MATLAB中,finverse函数可以求得符号函数的反函数。 语法: finverse(f,v) %对指定自变量v的函数f(v)求反函数 ? 【例】 求tex的反函数。 >> f=sym('t*e^x') %原函数 f= t*e^x >> g=finverse(f) %对默认自由变量求反函数 g= log(x/t)/log(e) >> g=finverse(f,'t') %对t求反函数 g= t/(e^x) 程序分析:如果先定义t为符号变量,则参数't'的单引号可去掉。 >> syms t 2016/11/8 >> g=finverse(f,t)

71

?

运用函数compose可以求符号函数f(x)和g(y)的复合函数。 语法: compose(f,g) %求f(x)和g(y)的复合函 数f(g(y)) compose(f,g,z) %求f(x)和g(y)的复合函数f(g(z)) 【例】 计算tex与ay2+by+c的复合函数。
>> f=sym('t*e^x'); >> g=sym('a*y^2+b*y+c'); >> h1=compose(f,g) h1 = t*e^(a*y^2+b*y+c) >> h2=compose(g,f) h2 = a*t^2*(e^x)^2+b*e^x+c >> h3=compose(f,g,'z') h3 = t*e^(a*z^2+b*z+c) %创建符号表达式 %创建符号表达式 %计算f(g(x)) %计算g(f(x))

2.求复合函数

%计算f(g(z))

语法: compose(f,g,x,z) compose(f,g,x,y,z)
2016/11/8

%以x为自变量构成复合函数f(g(z)) %以x为自变量构成复合函数f(g(z)),并用z替换y
72

符号表达式的转换
1.符号表达式与多项式的转换 (1)sym2poly函数。sym2poly函数用来将构成多项式的符号表达式转换 为按降幂排列的行向量。 【例3.12】 将符号表达式2x+3x2+1转换为行向量。 >> f=sym('2*x+3*x^2+1') f= 2*x+3*x^2+1 >> sym2poly(f) %转换为按降幂排列的行向量 ans = 3 2 1 >> f1=sym('a*x^2+b*x+c') f1 = a*x^2+b*x+c >> sym2poly(f1) ??? Error using ==> sym/sym2poly Input has more than one symbolic variable. ?
2016/11/8 73

(2)poly2sym函数。poly2sym函数与sym2poly函数相反,用来将按降幂 排列的行向量转换为符号表达式。

【例】 将行向量转换为符号表达式。 >> g=poly2sym([1 3 2]) %默认x为符号变量的符号表达式 g= x^2+3*x+2 >> g=poly2sym([1 3 2],sym('y')) %y为符号变量的符号表达式 g= y^2+3*y+2 ? 2.提取分子和分母
如果符号表达式是1个有理分式(两个多项式之比),可以利用numden函数提 取分子或分母,还可以进行通分。

语法:
[n,d]=numden(f)

2016/11/8

74

【例3.13】 用numden函数提取符号表达式 子、分母。
>> f1=sym('1/(s^2+3*s+2)') f1 = 1/(s^2+3*s+2) >> f2=sym('1/s^2+3*s+2') f2 = 1/s^2+3*s+2 >> [n1,d1]=numden(f1) n1 = 1 d1 = s^2+3*s+2 >> [n2,d2]=numden(f2) n2 = 1+3*s^3+2*s^2 d2 = s^2
2016/11/8

1 s ? 3s ? 2
2



1 ? 3s ? 2 s2

的分

75

lim f ( x )
x→0

符号极限
假定符号表达式的极限存在,Symbolic Math Toolbox提 供了直接求表达式极限的函数limit,函数limit的基本用法如 表所示。

2016/11/8

76

【例】 分别求1/x在0处从两边趋近、从左边趋近和从右边趋近的3个极限值。
>> f=sym('1/x') f= 1/x >> limit(f) ans = NaN >> limit(f,'x',0) ans = NaN >> limit(f,'x',0,'left') ans = ?inf >> limit(f,'x',0,'right') ans = inf

%对x求趋近于0的极限 %对x求趋近于0的极限 %左趋近于0 %右趋近于0

2016/11/8

77

例 求下列极限: sin x tan x x ( e ? 1 ) ? 2 ( e ? 1) (2) (1) lim
x ?a

x?a

2t ? ? lim?1 ? ? x ?? x? ?

3x

(1) syms a x; f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a); limit(f,x,a) ans = (1/2*a*exp(sin(a))+1/2*a-exp(tan(a))+1)/a (2) syms x t; limit((1+2*t/x)^(3*x),x,inf) ans = exp(6*t)
2016/11/8 78

x ???

lim x( x 2 ? 1 ? x)

x ?2

lim ?

x ? 2 ? x?2 x2 ? 4

(3) syms x; f=x*(sqrt(x^2+1)-x); limit(f,x,inf,'left') ans = 1/2 (4) syms x; f=(sqrt(x)-sqrt(2)-sqrt(x-2))/sqrt(x*x-4); limit(f,x,2,'right') ans = -1/2
2016/11/8 79

多变量函数的极限
?

函数

的极限的定义

?

嵌套使用limit()函数 或

?

2016/11/8 11/8/2016

80

六、符号求极限
?

1. 求极限

x ? ln e ? x? ? ? 3 3 2 2 ? lim ? x ? x ? x ? 1 ? x ? x ? 1 x ?? ? ? x ? ?

a)-1/6 b) Inf

(a)

c) –Inf
d)-1
2016/11/8 81

?

2

(c)

a)-1 b) 1/2

c) 0
d)1
2016/11/8 82

七、符号求导

2016/11/8

83

符号微分
函数diff是用来求符号表达式的微分。

diff(f) diff(f,t) diff(f,n) diff(f,t,n)
梯度函数gradient

%求f对自由变量的一阶微分 %求f对符号变量t的一阶微分 %求f对自由变量的n阶微分 %求f对符号变量t的n阶微分

[FX,FY]=gradient(F) %返回矩阵F的数值梯度 [FX,FY]=gradient(F,Hx,Hy) % Hx,Hy指定点间距
多元函数导数

Jacobian(f,v)

%计算数量或向量f对向量v的jacobi矩阵

2016/11/8

84

多元函数的偏导数
?

双变量函数 MATLAB语法 或

求导

?

?

2016/11/8

85

隐函数的偏导数
?

已知隐函数 导数

,其自变量之间的偏

2016/11/8星期日 11/8/2016

86

参数方程的导数
?

参数方程 为





2016/11/8 11/8/2016

87

【例】 已知f(x)=ax2+bx+c,求f(x)的微分。 >> f=sym('a*x^2+b*x+c') f= a*x^2+b*x+c >> diff(f) %对默认自由变量x求一阶微分 ans = 2*a*x+b >> diff(f,'a') %对符号变量a求一阶微分 ans = x^2 >> diff(f,'x',2) %对符号变量x求二阶微分 ans = 2*a >> diff(f,3) %对默认自由变量x求三阶微分 ans = 0
2016/11/8 88

? 2x t2 ? 【例3.15续】 对符号矩阵? x? ?t sin( x) e ?
>> syms t x >> g=[2*x t^2;t*sin(x) exp(x)] g= [ 2*x, t^2] [ t*sin(x), exp(x)] >> diff(g) ans = [ 2, 0] [ t*cos(x), exp(x)] >> diff(g,'t') ans = [ 0, 2*t] [ sin(x), 0] >> diff(g,2) 分 ans = [ 0, [?t*sin(x),

求微分。
%创建符号矩阵

%对默认自由变量x求一阶微分

%对符号变量t求一阶微分

%对默认自由变量x求二阶微

2016/11/8

0] exp(x)]

89

例9-2 求下列函数的导数。 (1) y= 1 ? e x,求y' (2) y= x cos x ,求y'' ,y'''

xe ? x ? a cost (3)? ,求y' ,y'' (4) z= 2 ,求z'x ,z'y y ? y ? b sin t
syms a b t x y z; f1=sqrt(1+exp(x));diff(f1) %求(1) f2=x*cos(x);diff(f2,x,2) %求(2)中y'' diff(f2,x,3) %求(2)中y''' g1=a*cos(t); g2=b*sin(t); diff(g2)/ diff(g1) %求(3)中y' , 下行求y'' (diff(g1)*diff(g2,2)- diff(g1,2)*diff(g2))/ (diff(g1))^3 f4=x*exp(y)/y^2; diff(f4,x) %求(4) diff(f4,y) %求(4)
2016/11/8 90

y

a=[1 2 3 5;4 5 6 3;7 8 9 2] a=

1 2 3 5 4 5 6 3 7 8 9 2 >> [ax,ay]=gradient(a,1,2) ax = 1.0000 1.0000 1.0000 ay = 1.5000 1.5000 1.5000
1.0000 1.0000 1.0000 1.5000 -1.0000 -3.0000 2.0000 -3.0000 -7.0000

1.5000 1.5000 1.5000

1.5000 1.5000 1.5000

-1.0000 -0.7500 -0.5000

2016/11/8

91

例:求下列函数的jacobi矩阵

>> syms x y z >> f=[3*x-cos(x*y)-0.5;x^2-81*(y+0.1)^2+sin(z)+1.06;exp(x*y)+20*z+(10*pi/3+1)] f= 3*x - cos(x*y) - 1/2 sin(z) - 81*(y + 1/10)^2 + x^2 + 53/50 20*z + 1/exp(x*y) + 6458148080111679/562949953421312

>> jacobian(f,[x y z])
ans = [ y*sin(x*y) + 3, x*sin(x*y), 0] [ 2*x, - 162*y - 81/5, cos(z)] [ -y/exp(x*y), -x/exp(x*y), 20] 2016/11/8

92

七、符号求导
?

1求函数在指定点的导数值。
x 0 x2 2 x3 6x f ? x ? ? 1 2 x 3x 2 , x ? 1, 2,3

(a)

a) 6 b) 6 c) 4 d) 4
2016/11/8

24 34 36 30

54 84 54 60
93

?

2 y=

? 2x t2 ? ? x? t sin( x ) e ? ?

,求x=3,t=2时的dy/dx值

(a)

a)[2.0,0;-1.97998,20.0855] b)[2.0,0;-1.98898,20.0865]

c)[2.0,0;-1.96998,20.0655]
d)[2.0,0;-1.98998,20.0855]

2016/11/8

94

八、符号求积

2016/11/8

95

符号积分
积分分为定积分和不定积分。运用函数int可以求得符号表 达式的积分,即找出一个符号表达式F,使得diff(F)=f,也可 以说是求微分的逆运算。

语法: int(f, 't') int(f, 't',a,b) int(f, 't', 'm', 'n')

%求符号变量t的不定积分 %求符号变量t的积分 %求符号变量t的积分

2016/11/8

96

例 求下列积分。
(1)

? | 1 ? x | dx
1

2

(2)
(4)

1 ??? 1 ? x 2 dx
??

(3)

?

3

2

x3 dx 10 ( x ? 1)

?

sin x

2

4x dt t

命令如下:
x=sym('x');t=sym('t'); int(abs(1-x),1,2) %求(1) 1/2 f=1/(1+x^2); int(f,-inf,inf) %求(2) pi f=x^3/(x-1)^10; I=int(f,2,3) %求(3) 138535/129024 int(4*x/t,t,2,sin(x)) %求(4) 4*log(sin(x))*x-4*log(2)*x
2016/11/8 97

【例3.16】 求

? cos( x)



?? cos( x) 的积分。
%求不定积分 %求定积分 %求定积分 %求多重积分

>> f=sym('cos(x)'); >> int(f) ans = sin(x) >> int(f,0,pi/3) ans = 1/2*3^(1/2) >> int(f,'a','b') ans = sin(b) ?sin(a) >> int(int(f)) ans = ?cos(x) diff和int命令也可以直接对字符串f进行运算。 >> f='cos(x)';
2016/11/8

98

【例3.16续】 求符号矩阵

? 2x t2 ? ? x? t sin( x ) e ? ?

的积分。
%创建符号矩阵

>> syms t x >> g=[2*x t^2;t*sin(x) exp(x)] g= [ 2*x, t^2] [ t*sin(x), exp(x)] >> int(g) ans = [ x^2, t^2*x] [?t*cos(x), exp(x)] >> int(g,'t') ans = [ 2*x*t, 1/3*t^3] [ 1/2*t^2*sin(x), exp(x)*t] >> int(g,sym('a'),sym('b')) ans = [ b^2 - a^2, -t^2*(a - b)] [ t*(cos(a) - cos(b)), exp(b) - exp(a)]
2016/11/8

%对x求不定积分

%对t求不定积分

%对x求定积分

99


?

求解积分问题
MATLAB求解

?

2016/11/8 11/8/2016

100

八、符号求积
?

1 符号求积

(c)

a)1/2 b) 1

c) 1/4
d) 1/3
2016/11/8 101

?

2 符号求积

1 ??? 1 ? x 2 dx
??

(a)

a)pi
b)2*pi c)3*pi d)1/2*pi
2016/11/8 102

?

3符号求积

(b)

a) 3.20808 b) 3.10808 c) 3.30808 d) 3.40808
2016/11/8 103

九、方程符号求解

2016/11/8

104

符号方程的求解
代数方程 当方程不存在解析解又无其他自由参数时,MATLAB可以用solve命令给出方 程的数值解。 语法: solve('eq', 'v') %求方程关于指定变量的解 solve('eq1', 'eq2', 'v1', 'v2',…) %求方程组关于指定变量的解 【例】 求方程ax2+bx+c=0和sinx=0的解。
>> f1=sym('a*x^2+b*x+c') f1 = a*x^2+b*x+c >> solve(f1) ans = -(b + (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a) >> f2=sym('sin(x)') f2 = sin(x) >> solve(f2,'x') ans = 2016/11/8 0 %无等号

%求方程的解x

105

【例】 求三元非线性方程组

>> eq1=sym('x^2+2*x+1'); >> eq2=sym('x+3*z=4'); >> eq3=sym('y*z=?1'); >> [x,y,z]=solve(eq1,eq2,eq3) %解方程组并赋值给x、y、z x= ?1 y= ?3/5 z= 5/3 程序分析:输出结果为“结构对象”,如果最后一句为 “S=solve(eq1,eq2,eq3) ”,则结果如下。 S= x: [1x1 sym] y: [1x1 sym] 2016/11/8z: [1x1 sym]

? x2 ? 2x ? 1 ? 0 ? ?4 ? x ? 3z的解。 ? yz ? ?1 ?

106

例 解下列方程和方程组。 ?? ? (1) 2 sin? 3x ? ? ? 1 (2) x ? xe x ? 10 ? 0
? x ? y ? 98 (3) ?3 x ? 3 y ? 2 ?
命令如下: x=solve('2*sin(3*x-pi/4)=1') %解方程(1) x=solve('x+x*exp(x)-10', 'x') %解方程(2) [x y]=solve('x+y-8', 'x^(1/3)+y^(1/3)-2', 'x,y') %解方程组(3)
2016/11/8 107

?

4?

符号常微分方程
MATLAB提供了dsolve命令,可以用于对符号常微分方程进行求解。 语法: dsolve('eq', 'con', 'v') dsolve('eq1,eq2…', 'con1,con2…', 'v1,v2…') (1)当y是因变量时,微分方程'eq'的表述规定为: y的一阶导数 dx 或dt
dn y y的n阶导数 n dx dn y 或n dt

%求解微分方程 %求解微分方程组

dy

dy

表示为Dy; 表示为Dny。

(2)微分初始条件'con'应写成'y(a)=b,Dy(c)=d'的格式;当初始条件少于 微分方程数时,在所得解中将出现任意常数符C1、C2……,解中任意常数符的数目 等于所缺少的初始条件数。

2016/11/8

108

【例

】 求微分方程

d2 y dy x 2 ? 3 ? x2 ,y(1)=0,y(0)=0的解。 dx dx

>> y=dsolve('x*D2y?3*Dy=x^2','x') %求微分方程的通解 y= C3*x^4 - x^3/3 + C2 >> y=dsolve('x*D2y?3*Dy=x^2','y(1)=0,y(0)=0','x') %求微分方程的特解 y= x^4/3 - x^3/3 dx dy ? y , ? ? x 的解。 【例 】 求微分方程组 dt dt >> [x,y]=dsolve('Dx=y,Dy=?x') x= C8*cos(t) + C7*sin(t) y= C7*cos(t) - C8*sin(t)

程序分析:默认的自由变量是t,C1、C2为任意常数,程序也可指定自由变量, 结果相同: >> [x,y]=dsolve('Dx=y,Dy=?x','t')
2016/11/8 109

非线性方程的符号注解
语法: fsolve(‘fun’, x0)
(1)fun为所要求解的函数名,常以M文件形式给出; (2)X0为初始向量或矩阵

Fc.m function y=fc(x) y(1)=x(1)-0.7*sin(x(1))0.2*cos(x(2)); y(2)=x(2)0.7*cos(x(1))+0.2*sin(x(2)); y=[y(1) y(2)]
2016/11/8

x0=[0.5 0.5] >> fsolve('fc',x0)

ans =
0.5265 0.5079
110

九、方程符号求解
?

1 求微分方程 y(0)=0的解

d2 y dy x 2 ? 3 ? x2 dx dx

,y(1)=0,

?

(c)

a)x^4/5 - x^3/4
b)x^3/3 - x^2/3 c) x^4/3 - x^3/3 d) x^4/5- x^3/4

2016/11/8

111

?

2、利用非线性方程组的符号法求解如下方程组:
x1 ? 0.7sin x1 ? 0.2cos x2 ? 0 x2 ? 0.7 cos x1 ? 0.2sin x2 ? 0

(a)

?

在(0.5,0.5)附近的解。 x2=0.5079 x2=0.5265 x2=0.7079 x2=0.6265
112

a) x1=0.5265 b) x1=0.5079 c) x1=0.6265 d) x1=0.7079
2016/11/8

谢谢!


更多相关标签:
一分时时彩 一分时时彩 三分快三计划 极速时时彩平台-官网 分分时时彩走势图-欢迎您 腾讯分分开奖计划-欢迎您 一分时时彩-欢迎您 三分快三计划-欢迎您 三分快三-官网 三分快三-欢迎您 时时彩官网--Welcome 三分快三-欢迎您 三分快三--Welcome 三分快三-官网 三分快三计划 网易彩票网 三分快三计划-欢迎您 亚洲彩票--Welcome 腾讯分分彩官网-欢迎您 三分快三平台-欢迎您 网易彩票app-欢迎您 网易彩票app 亚洲彩票-欢迎您 亚洲彩票-官网 网易彩票app 网易彩票app--Welcome 网易彩票app 时时彩官网 网易彩票app-官网 网易彩票网---腾讯分分彩官网_欢迎您 一分时时彩 时时彩官网--Welcome 幸运时时彩 时时彩官网--Welcome 时时彩官网--Welcome