02 - Matlab数值数组

Download Report

Transcript 02 - Matlab数值数组

Matlab数值数组
一、创建数值数组
二、数组操作函数
三、数组运算
四、矩阵运算
五、数组的访问和赋值
六、与数组相关的函数
七、一维数组在向量运算中的应用
八、一维数组在一元多项式运算中的应用
一、创建数值数组
数值数组(简称为数组)是Matlab中最重要的一种
内建数据类型。
二维数组(array)是由实数或复数排列成矩形而构成的
,从数据结构上看,二维数组和矩阵没有什么区别。当二维数
组带有线性变换含义时,该二维数组就是矩阵(matrix)。
一维数组是矩阵的特殊形式
• 行数组:n个元素排成一行
又称为行向量(row vector)
在Matlab中作为 1 X n 矩阵
• 列数组:m个元素排成一列
又称为列向量(column vector)
在Matlab中作为 n X1 矩阵
• 一个数:
又称为标量
在Matlab中作为 1 X1 矩阵
一般情况下,向量指列向量
Matlab中,标量和向量一般用小写字符字母表示
1、用方括号[ ]创建一维数组
• 整个数组放在方括号里
• 行数组元素用空格或逗号分隔
x = [2, pi/2, sqrt(3), 3+5i]
• 列数组元素用分号分隔
y = [2;pi;3/4;j]
• 标点符号一定要在英文状态下输入
• x = [] 生成空数组
2、用方括号[ ]创建二维数组
1 2 3


例:简单矩阵A   4 5 6  的输入步骤。
7 8 9 
(1)在键盘上输入下列内容
A = [1,2,3; 4,5,6; 7,8,9]
(2)按【Enter】键,指令被执行。
(3)在指令执行后,MATLAB指令窗中将显示以下结果:
A =
1
2
3 说明:直接输入矩阵时,每行元素用
空格或逗号分隔,矩阵行用分号分隔,
4
5
6
整个矩阵放在方括号里,标点符号一
7
8
9 定要在英文状态下输入。二维数组一
般用大写字母表示。
3、用方括号[ ]由一维数组创建二维数组
a = [1,3,5]
b = [2,4,6]
c = [3,5,7]
D = [a;b]
E = [b;c]
F = [D,E]
4、用冒号:创建一维数组
• x = a:b
默认 inc = 1
• x = a:inc:b
a,b必须为实数
x = [a,a+inc,a+2*inc,…]
a是数组x中的第一个元素,b不一定是数组x
的最后一个元素。
5、用linspace()函数创建一维数组
x = linspace(a,b)
x = linspace(a,b,n)
默认 n = 100
在[a,b]区间内生成 n 个数据,包括a和b在内
若a,b为实数,等效于:
x = linspace(0,pi,10)
x = linspace(1+i,100+100*i)
ba
x  a:
:b
n 1
6、用logspace()函数创建一维数组
x = logspace(a,b)
默认n = 50
a
b

在 10 ,10  间生成50个数据
x = logspace(a,b,n)
a
b

在 10 ,10  间生成n个数据
x = logspace(a,pi)
a

在 10 ,   间生成n个数据
7、创建特殊数组的函数
zeros(m,n)
生成一个 m 行 n 列的零矩阵,m=n 时可简写为 zeros(n)
ones(m,n)
生成一个 m 行 n 列的元素全为 1 的矩阵,
m=n 时可写为 ones(n)
eye(m,n)
生成一个主对角线全为 1 的 m 行 n 列矩阵,
m=n 时可简写为 eye(n),即为 n 维单位矩阵
magic(n)
生成魔方数组,各行、列之和 = (1+2+……+n2 )/n
diag(v,k)
v是向量,diag(v,k) 产生以 v 为第k条对角线的矩阵,
k省略时,k = 0
rand(m,n)
产生 0~1 间均匀分布的随机矩阵 m=n 时简写为 rand(n)
randn(m,n)
产生均值为0,方差为1的标准正态分布随机矩阵
m=n 时简写为 randn(n)
diag(v,k)
练习:在matlab中生成二维数组
A=
0
0
0
1
1
1
0
0
0
1
1
1
0
0
0
1
1
1
B=
1
0
0
0
-4
0
0
0
0
2
0
0
0
-3
0
0
0
0
3
0
0
0
-2
0
0
0
0
4
0
0
0
-1
二、数组操作函数
cat(dim, A, B)
把“大小”相同的若干数组,沿“指定维”
方向,串接成高维数组 。行(dim=1), 列
(dim=2)
cat(1,A,B) 等效于[A; B]
cat(2,A,B)等效于[A, B]
diag(A,k)
A 是矩阵,则 diag(A,k) 返回A的第k条对角线
元素组成的列向量,k省略时,k = 0。
flipud(A)
以数组“水平中线”为对称轴,交换上下对
称位置上的数组元素
fliplr(A)
以数组“垂直中线”为对称轴,交换左右对
称位置上的数组元素
kron(A,B)
按Kronecker乘法规则(直积)产生“积”数
repmat(A,m,n)
按指定的“行数、列数”铺放模块数
组,以形成更大的数组
rot90(A,k)
逆时针旋转 k×90 度
在总元素数目不便的前提下,改变数
reshape(A,m,n)
组的“行数、列数”
tril(A)
保留一个矩阵的下三角部分的数据,
其余的数据用0替换
triu(A)
保留一个矩阵的上三角部分的数据,
其余的数据用0替换
练习:试写出下列matlab语句的输出结果,并在
matlab中进行验证。
a = 1:12
B = reshape(a,3,4)
C = rot90(B)
d = diag(C)
E = diag(d)
F = [tril(B);triu(B)]
G = cat(2,tril(C),triu(C))
H = repmat(a,4,1)
I = flipud(G)
J = kron(d,E)
三、数组运算
• 数组运算是Matlab软件定义的运算规则,
其目的是为了数据管理方便、操作简单、
指令形式自然和执行计算的有效。
• 无论在数组上施加什么运算(加减乘除或函
数),总认定那种运算对被运算数组中的每
个元素(Element)进行运算。
1、转置运算
A.’ 对A做转置(行→列,列→行)即AT
†
A’ 对A做共轭转置 即A
xT
若A的元素均为实数,则A.’与A’的结果相同
B = A.’
对数组A做转置运算,将运算结果赋值给变量
B,内存中数组A的内容并没有任何变化。
2、两个维数相同的数组之间的数组运算
•
•
•
•
•
•
A + B:加,对应位置的数组元素相加
A - B:减,对应位置的数组元素相减
A.*B:点乘,对应位置的数组元素相乘
A./B:右点除,对应位置的数组元素相除
A.\B:左点除
A.^B:点幂,对应位置的数组元素做幂运算
运算结果为与A、B同维的数组
3、数组的与标量 的运算
•
•
•
•
•
•
•
A + c :A的每个元素加c
A - c: A的每个元素减c
A.*c 或 A*c:A的每个元素乘c,
A./c 或 A/c: A的每个元素除以c
A.\c 或 A\c:c除以A的每个元素
A.^c:点幂, A的每个元素做幂运算
c.^A:点幂,c做幂运算
运算结果为与A同维的数组
练习:试写出下列matlab语句的输出结果,并在
matlab中进行验证。
A = ones(3)
B = eye(3)
C = zeros(3)
D = (A+B).*(A-B)
E = (D + 1) + (D - 1)*i
F = E.’./E’ + E.’.\E’
G = B.^D + D.^B
4、函数作用在数组上的运算规则
Matlab中的很多函数都可以直接以数组作为输
入参数,函数输出也为数组。
 x11
x
21

X
 ...

 xm1
x12
x22
...
xm 2
... x1n 

... x2 n 
 xij
... ... 

... xmn 
f  X    f  xij 
 
mn
mn
输入为行数组,则
输出也为行数组
输入为列数组,则
输出也为列数组
X   x1 , x2 ,
, xn 
f  X    f  x1  , f  x2  ,
 y1 
y 
Y   2
 
 
 yn 
,
, f  xn  
 f  y1  


 f  y2  
f Y   



 f  yn  
输入为二维数组,则输出也为二维数组
 a11

A   a21
a
 31
a12
a22
a32
a13 
 f  a11 


a23  , f  A    f  a21 
 f a 
a33 
31

f  a12 
f  a22 
f  a32 
f  a13  

f  a23  
f  a33  
例题:绘制 y = sin(x) 的图像
x = 0:0.1:2*pi
y = sin(x)
函数作用在一维数组上
plot(x,y)
练习:
1.、绘制 y  x sin x 的图像,x   8 ,8  ;
sin x
2、绘制 y 
的图像,x   8 ,8  ;
x
 x  sin 3t

3、绘制 
  的图像,t   0, 2 .

 y  sin  2t  4 



四、矩阵运算
由m  n个数aij 构成的m行n列数表
 a11

a 21

A
 

a m 1
a12
a 22

am 2
 a1n 

 a2n 

 

 a mn 
称为维( 型)是m  n的矩阵(matrix) , 简称为m  n矩阵.
记为
A  (a ij ) mn , Amn
或 A  (a ij ),
其中 a ij 为矩阵的第i行第j列元素.
i称为行标i  1,2,, m,j称为列标j  1,2,, n.
1、方阵的行列式
n 阶行列式的定义:
D
a11
a12
a1n
a21
a22
a2 n
an1
an 2
ann
  (1)
 ( j1 j2
jn )
记
a1 j1 a2 j2
anjn  Det (aij )
 i  a1 j a2 j anj 是取自不同行、不同列的n个元素的乘积;
 ii  行标按自然顺序排列,列标排列的奇偶性  j1 j2 jn 
1
2
n
决定每一项的符号;
 iii  表示对所有的j1 j2
jn构成的n !个排列求和
手工计算行列式是非常繁琐的,特别是高阶行列式。
Matlab中,行列式由函数 det( ) 实现。
练习:求下面的行列式
1 0
1 2
D1 
2 1
1 3
2 5
1 3
0 1
4 2
1 2 2
2
2 2 2
D2  2 2 3
2
2
2 2 2
10
2、矩阵相等
定义
 a11

a 21

A
 

a m 1
设有两个m×n矩阵
a12
a 22

am 2




a1n 

a2n 
 

a mn 
 b11

b21

B
 

bm 1
b12
b22

bm 2




b1n 

b2 n 
 

bmn 
若 aij  bij (i  1,2,, m; j  1,2,, n)
则称矩阵A和B相等. 记作A=B
Matlab中,矩阵相等可用函数 isequal(A,B) 来判断。若两矩阵
相等,则isequal返回逻辑1(true),否则返回逻辑0(false)
3、矩阵转置、共轭转置运算
A’
A.’
矩阵共轭转置
矩阵转置
转置的运算级别比加、减、乘、除等运算高
对称矩阵:一个矩阵与其转置矩阵相等,
反对称矩阵:一个矩阵与其转置矩阵的和为零矩阵
A = [1,2;2,1]
A = [0,1;-1,0]
if ( isequal(A,A.’) == 1)
if ( isequal(A,-A.’) == 1)
disp(‘A是对称矩阵’)
else
disp(‘A不是对称矩阵’)
end
disp(‘A是反对称矩阵’)
else
disp(‘A不是反对称矩阵’)
end
4、矩阵加法
定义
设有两个m×n矩阵
 a11

a 21

A
 

a m 1
a12
a 22

am 2
 a11

a 21

矩阵 C 


a m 1




 b11
 b21

 bm 1
a1n 

a2n 
 

a mn 
 b11

b21

B
 

bm 1
a12  b12
a 22  b22

a m 2  bm 2




b12
b22

bm 2




a1n  b1n
a 2 n  b2 n

a mn  bmn

称为矩阵A与B的和. 记作 C  A  B  aij  bij
Matlab中,矩阵的加法就是 A + B
b1n 

b2 n 
 

bmn 







mn
.
5、矩阵减法
设A   aij 
mn
,  A   aij 
0 0
0 0



0 0
mn
 a11
 a
  21


 am1
a12
a22
am 2
a1n 
a2 n 
称为A的负矩阵


amn 
0
0 
O   0 mn
称为m  n零矩阵, 矩阵的减法定义为:


0  mn
a1n  a1n 
 a11  a11 a12  a12
a a

a

a
a

a
22
22
2n
2n 
A  A  A  ( A)   21 21
 O.




a

a
a

a
a

a
m2
m2
mn
mn 
 m1 m1
a1n  b1n 
 a11  b11 a12  b12
Matlab中,矩阵
a b

a22  b22
a2 n  b2 n 
21
21

A  B  A  ( B ) 
减法就是 A - B




a

b
a

b
a

b
m
1
m
1
m
2
m
2
mn
mn


6、数与矩阵的乘法
定义 数k与矩阵A的乘积记作kA或 A k,规定为
 
kA  kaij
m n
运算规律:
 ka11

ka21


 

 kam1
ka12
ka22

kam 2
 ka1n 

 ka2 n 
,

 

 kamn 
(i) k(A+B)=kA+kB
(ii) (k+h)A=kA+hA
(iii) k(h A)=(k h)A
(iv) 1A=A
其中A、B为m╳n 矩阵;k、h为数。
Matlab中,数与矩阵的乘法可写为:c*A 、A*c、
c.*A,A.*c,这里 * 和 .* 的结果是一样的。
7、矩阵的乘法
设矩阵
 
A  a ij
 
,
B

b
ij
m s
.
s n
 
矩阵A与B的乘积是一个m×n矩阵 C  c ij
mn
其中
s
,
c ij  a i 1b1 j  a i 2 b2 j    a is bsj   a ik bkj
i  1,2,, m; j  1,2,, n 
k 1
记作C =AB
Matlab中,矩阵与矩阵的乘法就是 A*B
练习
4
 1
1 0 3 1
求矩阵A  
与B  

2
2 1 0 2 

1
1
1
0
3
0
3 
的乘积AB。
1

4
 1 1 1
1 2 1 
设 A   1 1 1 , B  1 3 1 , 求 (A  B)(A  B)。
 1 1 1
 2 1 4 
答案 :
9 2 1
9 9 11


答案:
4
0 
 0
 2 14 6 


 11 11 17 
 a1 
 
a
2 

列向量a 
, 行向量b   b1 , b2 ,
 
 
 am  m1
a与b的乘积是一个m  n矩阵
 a1b1

a
b
2
1

ab 


 amb1
a1b2
a2b2
amb2
a1bn 

a2bn 


ambn 
, bn 1n
 a1 
 
a
2 

列向量a 
, 行向量b   b1 , b2 ,
 
 
 am  m1
a与b的乘机是一个m  n矩阵
 a1b1

a
b
2
1

ab 


 am b1
a1b2
a2 b2
am b2
a1bn 

a2 bn 


am bn 
, bn 1n .
练习:
1、在matlab中生成如下的二维数值数组
9 sin 0.0 
 sin 0.0 2 sin 0.0


sin 0.1 2 sin 0.1
9 sin 0.1 

Y=




9 sin 6.3 
 sin 6.3 2 sin 6.3
2、执行绘图命令:plot( 0: 0. 1: 6. 3, Y)
3、查看绘图结果。
8、方阵的迹
由n2个数排成的n×n矩阵:
 a11

 a 21
 

 a n1
a12
a 22

an2
 a1n 

 a2n 
  

 a nn 
称为n阶方阵。记作 A=(aij ), i,j=1,2,…,n 或 Ann
由方阵左上角元素到右下角元素表示的位置称为方阵的
主对角线,主对角线元素的和称为方阵的迹,记作:
tr ( A)  a11  a22 
 ann
Matlab中,方阵的迹用函数 trace(A) 实现,
或用sum(diag(A))来实现
9、方阵的幂
定义:设A是一个n阶方阵,k为正整数, Ak  
AA

A



k个
称为A的k次幂.
A k 就是k个A连乘.显然只有方阵的幂才有意义。
规定:A0=E
(i) A k Al=A k+1
(ii) (A k)l=A k l
例如
A 
2 3
其中k、l为正整数.
3
3
 1
1  1
1   0 0 0 0
 
 A   

.






  1  1  1  1  0 0 0 0
6
Matlab中,方阵的幂就是 A^k
练习
1 0 
2
3
设A  
, 求A , A

1 1 
1 1 0 


2
3
4
设B  0 1 1  , 求B , B , B
0 0 1 
10、矩阵多项式
设:f ( x)  am x  am1 x
m
m 1

 a1 x  a0
为x的多项式,A为n阶矩阵,E为n阶单位阵,
称:f ( A)  am A  am1 A
m
m 1

 a1 A  a0 E
为关于A的矩阵多项式。
Matlab中,方阵的多项式用函数
polyvalm(p,A)实现。
例:
已知f ( x )  x  5 x  3,
2
2
A
0
 1
, 求f ( A).

3
2  1 2 2  1 2  1 4  5
A
,A 






0
3
0
3
0
3
0
9




 

4  5 2  1 1 0  3 0 
f ( A)  A  5 A  3 E  
 5
 3





0 9   0 3   0 1   0  3 
2
在matlab中,一个一元多项式用一个行向量
来表示的,向量元素为多项式系数的降幂排列,
其中最后一个元素代表多项式中的0幂项。
p  x   an x  an 1 x
n
p   an , an 1 ,
n 1

 a2 x  a1 x  a0
2
, a2 , a1 , a0 
2 1
p  x   x  5x  3,A  
, 求f ( A)

0 3 
2
p = [1,-5, 3]
A = [2,-1;0,3]
F = polyvalm(p,A)
11、方阵的逆
定义:对于n阶方阵A,如果有一个n阶方阵B,使得
AB=BA=E,则方阵A称为可逆矩阵,简称A可逆。方阵B
称为A的逆矩阵。记为A-1.
注
(1) 这时矩阵B亦可逆,B的逆阵为A.即B-1=A.
(2)如果方阵A可逆,则A的逆矩阵是惟一的.
(3)可逆矩阵也称为非退化阵,也常被称为非奇异阵;
不可逆矩阵称为退化阵,也常被称为奇异阵.
Matlab中,求方阵的逆用函数 inv(A)
实现,也可以用A-1实现,即:A^(-1)
答案
练习
1
1. A  0
0
0
2
2. A  
7
1
1
,
求
A
.

4
2
0
0
0, 求A 1 .
3

1

1. A1   0


0

4
1
2. A  
 7

0 0

1
0

2
1

0
3
1

2
1 2 3 
2


设A   2 2 1  , B  
5

3 4 3
求矩阵 X 使满足 AXB = C
1
1
2
,
C


3
3
3
0,
1 
若A-1,B-1存在,则由A-1左乘上式,B-1右乘上式,有:
A-1AXBB-1=A-1CB-1, (A-1A)X(BB-1 ) =A-1CB-1,
即 X = A-1CB-1.
 1
 3
1
A  
 2
 1

2 
 3 1
5 
1
3
, B 
,

2
 5 2 
1 1
3
 1
 3
1
1
X  A CB   
 2
 1

2 
1 3
1 1 
 2 1 

 3 1 
 3 1 
5 


.
3
2
0

0
2

10

4
  5 2  
  5 2  

2 




 3 1 
0 2 
 10 4 
1 1 
3
练习
2 x1  x2  x3  4

1、用逆矩阵解方程组 3 x1  4 x2  2 x3  11
3x  2 x  4 x  11
2
3
 1
 1 4  2 0 3 1 
2、解矩阵方程 
X




 1 2   1 1  0 1
答案
 3
 
1. X  1 
1 
 
 1 1

2. X   1

0
4

练习
五、数组的访问和赋值
1、引用一维数组中的单个元素
x = 1:5
k=2
a = x(k)
引用数组 x 中的第 k 个元素,将其赋值给变量 a
Matlab中数组元素的下标从 1 开始
b = x(end)
end是数组x的最后一个元素的下标
引用数组 x 中的最后一个元素,将其赋值给变量 b
c = x(8) 会出现什么结果?
2、一维数组中单个元素的赋值
x = 1:5
a = 1.5
k=3
x(k) = 0
将 0 赋值给数组 x 中的第 k 个元素
x(end) = a
将 a 赋值给数组 x 中的最后一个元素
x(8) = 6.5 会出现什么结果?
3、引用一维数组中的子数组
x = linspace(1,5)
a = x([2,5,9])
x = linspace(1,5)
s = [2,5,9]
a = x(s)
引用一维数组x中的第2、5、9个元素,
将其赋值给变量 a
b = x(end:-1:1)
c = x(1:2:end)
d = x(2:2:end)
b=? c=?d=?
4、给一维数组中的子数组赋值
x = linspace(1,5)
x([1,4]) = [2,7]
x = linspace(1,5)
s = [1,4]
a = [2,7]
x(s) = a
将2、7分别赋值给x的第1、4个元素
练习:
已知一维数组x和y:
x  [ x1 , x2 , x3 , x4 , x5 ]  [1, 0, 1, 2,3],
y  [ y1 , y2 , y3 , y4 , y5 ]  [3, 2,1, 1, 2]
在matlab生成下面的二维数组:
 x1

 x2
 x3

 x4
x
 5
1  x12
2
2  x2
2
3  x3
2
4  x4
2
5  x5
x1 y1
x2 y2
x3 y3
x4 y4
x5 y5
y1 /1 x1 y5 

y2 / 2 x2 y4 
y3 / 3 x3 y3 

y4 / 4 x4 y2 
y5 / 5 x5 y1 
5、二维数组单个元素的访问和赋值
(1) A(r,c):“全下标”标识:
即指出是“第几行,第几列”的元素
(2)A(ind):“单下标”标识: Linear Index
只用一个下标来指明元素在数组中的位置:
把二维数组的所有列,按先左后右的次序,首尾相接排
成“一维长列”,然后,自上往下对元素位置进行标号。
(3)“单下标”与“全下标”的转化:
全下标→单下标: ind = sub2ind(siz,r,c)
单下标→全下标: [r,c] = ind2sub(siz,ind)
A = magic(6)
a = A(2,3)
b = A(16)
A(5,3) = 0
A(14) = 8
ind = sub2ind(size(A),2,3)
[a, b] = ind2sub(size(A),19)
6、二维数组的子数组 的引用和赋值
(1)使用“双下标”方式
A(r,:)
由A的“r行”和“全部列”上的元素组
成
A(:,c)
由A的“全部行”和“c列”上的元素组
成
A(r,c)
由A的“r行”和“c列”上的元素组成
对子数组A(r,c)进行赋值:B的“行、列
A(r,c) = B
”必须与A(r,c)的“行、列”相同
(2)使用“单下标”方式
A(:)
A(s)
A(:) = D(:)
A(s) = B
由A的各列按自左到右的次序,首尾相接而生成
的“一维长列”数组
引用A中由一维数组s指定的元素。s若是行(或
列),则A(s)就是长度相同的行(或列)
全元素赋值方式。结果:保持A的“行宽、列长
”不变。条件:A、D两个数组的总元素相等,
但“行宽、列长”不一定相同
对A的部分元素重新赋值。结果:保持A的“行
宽、列长”不变。条件:s单下标数组的长度必
须与“一维数组”B的长度相等,但是s、B不一
定同是“行数组”或“列数组”
(3)子数组 引用和赋值的应用
A. 矩阵初等变换
①对调矩阵的两行(列), 记作ri  rj (ci  c j );
Matlab中:A([i,j],:) = A([j,i],:)
②以数k  0乘某一行(列)中的所有元素, 记作ri  k (ci  k );
Matlab中:A(i,:) = k*A(i,:)
③把某一行(列)所有元素的k倍加到另一行(列)对应
的元素上去, 记作 ri  krj (ci  kc j ).
Matlab中:A(i,:) =A(i,:) + k*A(j,:)
练习:用matlab实现下面的矩阵初等变换
r2r3
r32r1
r43r1
~
r3r4
r42r3
~
 2 1 1 1 2
 1 1  2 1 4
 4  6 2  2 4
 3 6 9 7 9


 1 1 2 1 4 
 0 2 2 2 0 
 0 5 5 3 6 
 0 3 3 4 3 


 1 1 2 1 4 
 0 1 1 1 0 
 0 0 0 1 3 
 0 0 0 02 6

0


行阶梯形矩阵
r1r2 1 1 2 1 4


r32  2 1 1 1 2 
~
r22
r35r2
r43r2
~
r1r2
r2r3
~
 2 3
3 6

1 1
0 1
0 0
0 0

1 0
0 1
0 0
0 0

1 1 2 
9 7 9 
2 1 4 
1 1 0 
0 2 6 
0 1 3 
1 0 4 
1 0 3 
0 1 3 
0 0 0 
行最简形矩阵
B. 用克莱姆法则解线性方程组
如果 n 元线性方程组:
a11 x1  a12 x2   a1n xn  b1
a x  a x   a x  b
 21 1 22 2
2n n
2


an1 x1  an 2 x2   ann xn  bn
的系数行列式:
D
a11
a21
an1
a12
a22
an 2
a1n
a2 n
ann
Dn
, xn 
D
, n  是把系数
行列式 D 中第 j 列的元素换成
方程组的常数项 b1 , b2 ,
, bn 所
构成的 n 阶行列式,即:
0
则方程组有唯一解:
D1
D2
x1  , x2 
,
D
D
其中D j  j  1, 2,
Dj 
a11
a1, j 1
b1
a1, j 1
a1n
a21
a2, j 1 b2
a2, j 1
a2 n
an1
an , j 1 bn
an , j 1
ann
练习:用克莱姆法则解方程组
2 x1
2 x
 1

3
x
 1
 x1
 2 x2
 6 x 4  2
 x 2  2 x3  4 x 4  2
 x 2  4 x3  4 x 4  3
 x 2  x3  8 x 4  2
六、与数组相关的函数
1、函数的输入参数为一维数组x(x为行或列)
max(x)
返回x中的最大值
[a,b] = max(x) 返回x的最大值(a)及最大值在x中的位置(b)
返回一向量,元素为x,y相同位置上的较大值
max(x,y)
min(x)
[c,d]= min(x)
min(x,y)
返回x中的最小值
返回x的最小值(c)及最小值在x中的位置
返回一向量,元素为x,y相同位置上的较小值
mean(x)
返回x的平均值
median(x)
返回x中元素的中值
std(x)
计算x中的数值的标准差
sum(x)
计算x的所有元素的和
cumsum(x)
返回一个包含x的元素的累加和的向量,
其大小与x相同
prod(x)
计算x的元素的积
cumprod(x)
返回一个包含x的元素的累乘积的向量,
其大小与x相同
sort(x)
返回x中的元素按升序排序的向量
length(x)
返回数组的长度(行数或列数的较大值)
numel(x)
返回数组元素的个数
2、函数的输入参数为二维数组
cmax = max(A)
返回cmax为一个行数组,元素为A中每个列的最大值
rmax = max(A,[],2)
返回rmax为一个列数组,元素为A中每个行的最大值
[cmax,index] = max(A)
返回A中每个列的最大值及其位置,cmax,index为行数组
[rmax,index] = max(A,[],2)
返回A中每个行的最大值及其位置,rmax,index为列数组
max(A,B)
返回一个二维数组,元素为A,B相同位置上的较大值
min(A),min(A,[],2)
[c,d]= min(A),[c,d]= min(A,[],2),min(A,B)
mean(A)
mean(A,2)
返回A中每个列向量的平均值
返回A中每个行向量的平均值
median(A)
median(A,2)
std(A)
std(A,flag)
std(A,flag,dim)
std(A,0,2)
返回A中每个列向量的中值
返回A中每个行向量的中值
返回A中每个列向量的标准差
返回A中每个行向量的标准差
n
1 s 
dim=1,列
dim=2,行
 x  x 
i 1
i
flag  0
n 1
n
 2 s 
2
  xi  x 
i 1
n
2
flag  1
sum(A)
sum(A,2)
计算A中每个列向量的元素的和
计算A中每个行向量的元素的和
cumsum(A)
cumsum(A,2)
A中每个列向量的累加和,维数与A相同
A中每个行向量的累加和,维数与A相同
prod(A)
prod(A,2)
计算A中每个列向量的元素的积
计算A中每个行向量的元素的积
cumprod(A)
cumprod(A,2)
A中每个列向量的累乘积,维数与A相同
A中每个行向量的累乘积,维数与A相同
sort(A)
sort(A,dim)
sort(…,mode)
dim: 1 列 , 2 行
mode: ‘ascend’ 升序(default)
‘descend‘ 降序
sort(A)
对A中列向量进行升序排序
sort(A,’descend’)
对A中列向量进行降序排序
sort(A,2)
对A中行向量进行升序排序
sort(A,2,’descend’) 对A中行向量进行降序排序
当只有一个输出参数时,size函数返
回的是一个行向量,该行向量的第一
sz=size(A)
个元素是数组的行数,第二个元素是
数组的列数。
当有两输出参数时,size函数将数组
[r,c]=size(A) 的行数返回到第一个输出变量,将数
组的列数返回到第二个输出变量。
r=size(A,1)
返回数组 A 的行数
c=size(A,2)
返回数组 A 的列数
length(A)
返回数组的长度(行数或列数的较大值)
numel(A)
返回数组元素的个数
例题:数组相关函数的应用
以线性拟合为例
测得铜导线在温度Ti下的电阻为Ri,编写一个M脚本文
件,用matlab提供的数组函数对数据进行线性拟合,求出斜率
、截距和相关系数。
n
1
2
3
T(℃)
19.1
25.0
30.1
R(Ω)
76.30
77.80
79.25
Yˆ  b0  b1 X
4
5
6
36.0
40.0
45.1
80.80
82.35
83.90
b0  Y  b1 X
7
50.0
85.10
n
b1 
 X
i 1
i
 X Yi  Y 
n
 Xi  X 
n

 X
2
i 1
n
r
(X
i 1
n
(X
i 1
i
i
i 1
n
 X)
i 1
n
 (Y  Y )
i 1
i
 X  Yi
 Xi  X 
 X )(Yi  Y )
2
i
2
2
附:直线拟合(直线回归)模型的数学知识
Y与X具有统计
关系而且是线性
其中,(X
建立
回归模型
Yi=β0+β1Xi+εi
(i=1,2,···,n)
i,Yj)表示(X,Y)的第i个观测值,
β0 ,β1为参数,β0+β1Xi为反映统计关系直线的分量,
εi为反映在统计关系直线周围散布的随机分量,
εi~N (0,σ2), εi 服从正态分布
Yi=β0+β1Xi+εi
β0和β1均未知
根据样本数据
对 β 0和 β 1
进行估计
β0和β1的估计
值为b0和b1
建立一元线性回归方程
Yˆ  b0  b1 X
一般而言,所求的b0和b1应能使每个样本观测点
(Xi,Yi)与回归直线之间的偏差尽可能小。
越小越好
一元线性回归方程
Y与X之间
为线性关系
最小
二乘法
least square method
选出一条最能反
映Y与X之间关系
规律的直线
n
令
Q   Yi   b0  b1 X i 
2
i 1
Q达到最小值
b0和b1称为最小二乘估计量
微积分中
极值的必要条件
n
Q
 2 Yi   b0  b1 X i    0
b0
i 1
n
Q
 2 Yi   b0  b1 X i   X i  0
b1
i 1
n
b1 
 X
i 1
i
 X Yi  Y 
n
 X
i 1
i
X
2
n

 X
i 1
n
 X
i 1
 X  Yi
i
i
X
2
b0  Y  b1 X
残差
residuals
ei  Yi  Yˆi  Yi   b0  b1 X i 
代表观测点对于回归线的误差
确定系数
coefficient of determination
残差越小,各观测值聚集在回归
直线周围的紧密程度就越大,说
明直线与观测值的拟合越好,定
义确定系数(COD)为:
n
n

可以证明: Yi  Y    Yi  Yˆi
2
i 1
i 1

n
所以:R 2  1 
i 1
n

 Y  Y 
i 1
0  R2  1
Yi  Yˆi
i
R2 
i 1
n
i 1
n
2
i 1
i
2
i
n
 1
2
e
i
i 1
n
 Y  Y 
i 1
2
i
 Y  Y 
   Yˆ  Y 
2
2
 Yˆ  Y 
n
2
i
一般情况下,R 2的值越大,拟合的越好
2
直线拟合的相关系数
Correlation coefficient
ˆ
Y

Y



n
r   R2   1 
i 1
n
i
i
 Y  Y 
i 1
r与斜率取相同的符号
1  r  1
r  1: 完全正相关
r  1: 完全负相关
r  0 : 无线性关系
i
2
2
七、一维数组在向量运算中的应用
在Matlab中,三维空间里的
三维向量(或点):
a  ax i  a y j  az k
b  bxi  by j  bz k
c  cx i  c y j  cz k
可表示为行向量
(或列向量):
a   ax , a y , az 
b  bx , by , bz 
c  cx , c y , cz 
1、向量的模(长度)
a  ax i  a y j  az k
a  a a a
2
x
2
y
2
z
a = [4,3,1]
d = sqrt(sum(a.*a))
或:
d = sqrt(sum(a.^2))
2、两点之间的距离
两点:A  ax , a y , az  ,B  bx , by , bz 
AB  a - b 
 ax  bx    ay  by    az  bz 
2
a = [4,3,1]
b = [5,2,3]
AB = sqrt(sum((a - b).^2))
2
2
3、向量的方向角与方向余弦,单位向量
a  ax i  a y j  az k
 ax a y az 
 cos ,cos  , cos     , , 
a a a 
ay
az
a ax
e0   i 
j  k   cos ,
cos  , cos  
a
a
a
a
a = [4,3,1]
d = sqrt(sum(a.^2))
e0 = a./d
4、向量的线性运算
a + b   ax  bx  i   a y  by  j   az  bz  k
a - b   ax  bx  i   a y  by  j   az  bz  k
 a    ax  i    a  y j    az  k
直接利用matlab的数组运算规则即可进行运算
a = [4,3,1]
b = [5,2,3]
c = 1.6
p=a+b
s=a–b
d = c*a
5、两向量的数量积(内积/点积/点乘)
Matlab中提供了 dot() 函数实现两向量的数量积
a  ax i  a y j  az k
b  bxi  by j  bz k
a • b  a b cos   axbx  a y by  az bz
a  a a a
2
x
2
y
2
z
= sqrt(dot(a,a))
= dot(a,b)
6、两个向量之间的夹角
axbx  a y by  az bz
a •b
cos  

a b
ax2  a y2  az2 bx2  by2  bz2
tmp = dot(a,b)/sqrt(dot(a,a))/sqrt(dot(b,b))
theta = acos(tmp)
7、两向量的向量积(叉乘)
Matlab中提供了 cross() 函数实现两向量的向量积
a  axi  a y j  az k
b  bx i  by j  bz k
i
a  b  ax
bx
j
ay
bx
k
az = cross(a,b)
bz
8、向量的混合积:
a  ax i  a y j  az k
b  bx i  by j  bz k
c  cx i  c y j  cz k
ax
 abc    a  b   c  bx
ay
by
az
bz
cx
cy
cz
= dot(cross(a,b),c)
上机练习:
1. 设a  3i  j  2k , b  i  2 j  k , 求
1 a  b及a  b
 2  2a   3b及a  2b
 3 a、b的夹角的余弦
2. 已知三点M 1,1,1 、A  2, 2,1 和B  2,1, 2  , 求AMB
  / 3
3.以A(1,2,3),B(2,0,5),C(4,2,-1)为顶点的三角形
的面积。
1
S  AB  AC  7.0711
2
4.求以A(0,0,2),B(3,0,5),C(1,1,0),D(4,1,2)为
顶点的四面体的体积。
1
V   AB  AC   AD  0.500
6
八、一维数组在一元多项式运算中的应用
p  x   an x  an1x
n
n1

 a2 x  a1x  a0
2
借助matlab提供的函数,处理多项式是一件非常简单的事
情,很容易对多项式进行积分、微分以及求根的操作。
一元多项式在代数中占有非常重要的地位。在实际应用
中如对实验数据的插值、微商和曲线拟合等,都要大量用到多
项式;在矩阵分析时,也要用到一元多项式的概念。多项式函
数是形式最简单的函数,也是最容易计算的函数,从理论上讲
,它可以表示绝大多数复杂函数。在许多计算机的计算和编程
中,很多函数值如sin(x),cos(x)等的计算都是先将函数进行Tailor
展开为多项式进行逼近计算的,并且都能达到很高的精度。
1、多项式的表示和创建
在matlab中,一个一元多项式用一个行向量
来表示的,向量元素为多项式系数的降幂排列,
其中最后一个元素代表多项式中的0幂项。
p  x   an x  an 1 x
n
p   an , an 1 ,
n 1

 a2 x  a1 x  a0
2
, a2 , a1 , a0 
p  x   x 12x  25x 116
4
3
p = [1,-12,0,25,116]
2、多项式的符号表示
poly2sym() 把系数向量表示的多项式转为符号表示
poly2sym(p)
poly2sym(p,’v’)
用默认字符’x’来表示多项式的变量
用字符‘v’来表示多项式的便量
p = [1,-12,0,25,116]
px = poly2sym(p)
pt = poly2sym(p,’t’)
3、计算多项式的值
y = polyval(p,x)
计算多项式p在x处的值,x
可以是标量,或数值数组
p  x  12 x  25 x  116
4
3
1 求x  2.3时,p的值;
3,
7时,p的值。
 2  求x分别为  1,
p = [1,-12,0,25,116];
x1 = 2.3;
x2 = [-1,3,7];
p1 = polyval(p,x1);
p2 = polyval(p,x2);
4、求多项式的根
r = roots(p)
此函数返回多项式p的根组成的向量
p = [1,-12,0,25,116]
r = roots(p)
多项式和多项式的根都是用向量表示的,
为加以区别,多项式的根表示成列向量。
对于系数为实数的多项式,如果其根出现
复数,则复数必是成对出现的。
5、由根创建相应的多项式
p = poly(r)
r = [1;2;-1;3;7]
p = poly(r)
r是一个向量,构造一个多项式,其根为r
由根构造多项式时,所得到
的多项式的第一项为1
由于matlab在进行数据处理时存在截断误差,因此,poly函数的返回
值有可能在该出现0的位置出现了一个非常接近0的数,有时还会使某些系数
带有一个很小的虚部。因此建议对poly函数的输出结果再进行一次处理,从而
消除有可能出现的数据错误。例如,可以通过比较将绝对值极小的数强制置0,
或利用real函数将实部从结果中提取出来,取消错误虚部的影响。
练习
求下列多项式的根及 x  0,
时多项式的值
3
5
7
x
x
x
1 x   
3! 5! 7!
x2 x4 x6
 2 1   
2! 4! 6!
   
,
,
,
6 4 3 2
,
6、多项式的加法和减法
Matlab没有专门的函数执行多项式加法(减法)
如果两个多项式的阶次相同,其系数向量的长度相等,
多项式的加法就是将两个多项式向量直接相加(相减)。
当两个多项式的阶次不同时,其系数向量的长度也不同,
这时需要先将低阶多项式的系数向量前边补上足够的0,
以便使它和高阶多项式具有相同的长度,然后再执行加
法(减法)运算。
练习:
已知:f  x   1.35  0.668 x  0.436 x 2  0.69552 x3
g  x   2.3  0.453x  2.342 x3
求:f  x   g  x  , f  x   g  x 
7、多项式的乘法
w = conv(u,v) 此函数返回多项式u和v的乘积
多项式的乘法就是多项式系数向量之间的卷积(convolution)
y1  x  2 x  3x  4 , y2  x  4 x  9 x  16
3
2
3
2
y  y1  y2  ?
y1 = [1,2,3,4]
y2 = [1,4,9,16]
y = conv(y1,y2)
y = poly2sym(y)
如果要执行多个多项式之间的乘法运算,需要重复使用conv()函数
b1
b2
b3
a1 a1b1
a1b2
a1b3
a2 a2 b1
a2 b2
a2 b3
a3 a3b1
a3b2
a3b3
长度为m的向量a和长度为n的向量b的卷积定义为:
k
w ( k )   a ( j ) b( k  1  j )
j 1
式中向量w的长度为k  m  n  1
w 1  a1b1 , w  2   a1b2  a2 b1 ,
练习:利用多项式乘法完成下面的计算
数学物理方法(陆全康 赵惠芬,第二版,高等教育出版社,2003)P87
8、多项式的除法
[q,r] = deconv(b,a )
q:用来存储b/a的商多项式,
r:用来存储b/a的余数多项式
此函数表示多项式b除以多项式a得到商多项式q和
余数多项式r,如果r的元素全部为0,则表示多项式b可
以整除多项式a。
多项式的除法就是多项式系数向量之间进行解卷积运算
余数通常都与除数和被除数中较长的那个向量等
长,因此r的前面一般有若干个0
练习
求有理分式R 
 3x
3
 x  x  5
3
2
3
2
x

2
x

2
5
x

2
x
 1


的商多项式和余多项式
9、多项式的微分(求导)
polyder( )
多项式微分
k = polyder(p)
求多项式p的微分多项式
k = polyder(a,b)
求a x b的微分
[q,d] = polyder(b,a):求有理分式b/a的微分
q:分子多项式
d:分母多项式
10、多项式的积分
q = polyint(p,k)
q = polyint(p)
对多项式p积分,k为积分常数
对多项式p积分,积分常数为0
p = [1,6,20,48,69,72,44]
h = polyder(p)
q = polyint(h,44)
11、部分分式展开(留数计算)
b  x  bs x s 
如果多项式a  x  不含重根,则
= t
a  x  at x 
b  x
r
r
 1  2 
a  x  x  p1 x  p2
p1 , p2 ,
r1 , r2 ,
 b1 x  b0
可以写成:
 a1 x  a0
rn

 k  x ,其中:
x  pn
, pn 称为极点,
, rn 称为留数,
[r,p,k] = residue(b,a)
k  x  称为直项,
留数和极点的个数n满足:
n  length  a   1  length  r   length  p 
如果b  x 的次数小于a  x 的次数,则直项的系数向量的系数为空,
否则,它们之间满足:
length  k   length  b   length  a   1
如果a  x  含有m重根p j 
rj
x  pj

rj 1
x  p 
j
2


 p j  m 1 , 则展开的这m项应该写成:
rj  m 1
x  p 
m
j
p j为极点,
rj为极点p j 对应的留数。
若已知r,p,k的值, residue()函数还可以求出分
子多项式b(x)和分母多项式a(x),调用格式为:
[b,a] = residue(r,p,k)
2x  1
分解为部分分式
2
x  5x  6
2x  1
2x  1
A
B
解:设 2



x  5 x  6 ( x  2)( x  3) x  2 x  3
2x 1
怎么求  2
dx
x  5x  6
例:将
方法1:上式两端去分母后,得:
2 x  1  A( x  3)  B( x  2) 1
或: 2 x  1  ( A  B) x  (3 A  2 B)
比较上式两端同次幂的系数,得:
A  B  2
,从而解得:A  3 , B  5

(3 A  2 B)  1
方法2:在恒等式 1中,依次代入某些特殊值,从而求出待定常数,
例如,在恒等式 1中:
令x  2,得A  3 令x  3,得B  5
2x  1
3
5
2


x  5x  6 x  2 x  3
b=[2,-1]
a=[1,-5,6]
[r,p,k]=residue(b,a)
1
例题:将
分解为部分分式
2
x( x  1)
1
A
B
C
解:设
 

2
x x  1 ( x  1) 2
x( x  1)
有重根的例子
上式两端去分母,得:
1  A( x  1) 2  Bx(1  x)  Cx
令x  0,得A  1,令x  1,得B  1
再令x  1,得C  1,因此,得
1
1
1
1
 

2
x x  1 ( x  1) 2
x( x  1)
练习:用residue函数确定A、B、C的值。
练习:用residue函
数求解本题。
12、多项式拟合
p = polyfit(x,y,n)
多项式曲线拟合(最小二乘法)
n=1就是进行线性拟合
p   p1 , p2 ,
, pn , pn 1 
p  x   p1 x  p2 x
n
n 1

 pn x  pn 1
x
0
0.2
0.6
1
1.3
1.6
1.7
1.8
1.9
2.2
2.3
2.5
2.6
2.9
y
0
-2.5
-4
-5.7
-3.5
-2
-1
2
3.5
4
7
7.5
9.9
10.9
x
y
3.1
3.4
3.8
4.1
4.4
4.7
4.8
4.9
5
5.1
5.3
11.9
13.5
13
11.9
9
6.5
4
1.5
0
-2.5
-5
某同学实验测得数据如表所示,
设y和x之间满足:
y  b0  b1 x  b2 x 2 
 bk x k。
分别就k  3和k  4两种情况,
1. 用polyfit函数对表中的数据进行
多项式拟合,求出b0 , b1 , b2 ,
, bk;
n
2. 计算R 2  1 
2
ˆ
(
y

y
)
 i i
i 1
n
2
(
y

y
)
 i
;
i 1
3. 绘制数据的散点图和拟合曲线。
多项式拟合时的注意事项
从数学原理上,n+1个数据点可以惟一定义一个n次曲线(或n
阶多项式)。
在进行曲线拟合时对多项式阶次的选择是任意的。
虽然高阶的多项式可以更准确地拟合数据(仅指该曲线与给定
的数据之间的均方误差最小),但在进行曲线拟合时,并不需
要采用太高阶的多项式,这主要基于以下原因:
1、越是高阶的多项式其数值特性越差,计算起来也越耗时;
2、随着多项式阶次的升高,拟合的曲线变的越来越不平滑,通常会出现用
户不愿意看到的局部波形;
3、由于数据本身的近似性,因此在进行数据拟合时没有必要仅仅考虑使拟
合的曲线无限接近数据点,而要在曲线的阶次合均方误差之间综合考虑,
因为越是高阶的多项式在物理实现时越困难。
多项式拟合的数学知识
给定数据点:  xi , yi 
i  1, 2, ,m,
求一多项式函数pn  x   a0  a1 x  a2 x 2 
n
 an x n   ak x k ,  n  m  1
k 0
2
 n

k
使得: I    pn  xi   yi      ak xi  yi   min
i 1
i 1  k  0

满足 1 式的pn  x  称为最小二乘拟合多项式。
m
2
m
1
特别地,当n  1时,称为线性拟合或直线拟合。
2
 n

k
显然I     ak xi  yi  为a0 , a1 , , an的多元函数.
i 1  k  0

因此上述问题即为求I  I  a0 , a1 , , an 的极值问题。
m
由多元函数求极值的必要条件,得:
m
I
 n
 j
k
 2   ak xi  yi  xi  0,
a j
i 1  k  0

j  0,1,
,n
 2
整理  2  式可得:
m
 m jk 
j
x
a
=
x
yi ,
j  0,1, , n



i
k
i


k  0  i 1
i 1

 3 是关于a0 , a1 , , an的线性方程组,用矩阵表示为:
n
m
m
 m 0 0 m 01



0 n
0
x
x
x
x
y


i
i
 i

 i i 
i 1
i 1
 i 1
  a0   i 1

m
m
m
m




1 0
11
1 n  
1
xi
xi   a1    xi yi 


  xi

i 1
i 1
 i 1
    i 1


  

m
  an   m

m
m
nn 
  x n  0  x n 1
 x n y 
x

i
i
 i 1 i

 i 1 i i 
i 1
i 1
式  3 或式  4  称为正规方程组或法方程组。
 3
 4
可以证明,方程组  4 的系数矩阵是一个对称正定矩阵,故存在唯一解。
练习:根据(4)式,编写matlab程序,实现前面的多项式拟合