目前项目进入尾声,我目前的任务是往平台中插入一些测试数据。
我选择的专题是数值计算专题。
我往其中插入了一些数值计算专题的学习资料,markdown格式。
下面是其中的一个例子:
雅可比法
给定一个n×n的线性方程组
A
x
=
b
{\displaystyle A\mathbf {x} =\mathbf {b} }
Ax=b
其中:
A
=
[
a
11
a
12
⋯
a
1
n
a
21
a
22
⋯
a
2
n
⋮
⋮
⋱
⋮
a
n
1
a
n
2
⋯
a
n
n
]
,
x
=
[
x
1
x
2
⋮
x
n
]
,
b
=
[
b
1
b
2
⋮
b
n
]
.
{\displaystyle A={\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1n}\\a_{21}&a_{22}&\cdots &a_{2n}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nn}\end{bmatrix}},\qquad \mathbf {x} ={\begin{bmatrix}x_{1}\\x_{2}\\\vdots \\x_{n}\end{bmatrix}},\qquad \mathbf {b} ={\begin{bmatrix}b_{1}\\b_{2}\\\vdots \\b_{n}\end{bmatrix}}.}
A=⎣⎢⎢⎢⎡a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1na2n⋮ann⎦⎥⎥⎥⎤,x=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤,b=⎣⎢⎢⎢⎡b1b2⋮bn⎦⎥⎥⎥⎤.
可以分解成对角部分D和剩余部分R:
A
=
D
+
R
其 中
D
=
[
a
11
0
⋯
0
0
a
22
⋯
0
⋮
⋮
⋱
⋮
0
0
⋯
a
n
n
]
,
R
=
[
0
a
12
⋯
a
1
n
a
21
0
⋯
a
2
n
⋮
⋮
⋱
⋮
a
n
1
a
n
2
⋯
0
]
{\displaystyle A=D+R\qquad {\text{其 中}}\qquad D={\begin{bmatrix}a_{11}&0&\cdots &0\\0&a_{22}&\cdots &0\\\vdots &\vdots &\ddots &\vdots \\0&0&\cdots &a_{nn}\end{bmatrix}},\qquad R={\begin{bmatrix}0&a_{12}&\cdots &a_{1n}\\a_{21}&0&\cdots &a_{2n}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &0\end{bmatrix}}}
A=D+R其 中D=⎣⎢⎢⎢⎡a110⋮00a22⋮0⋯⋯⋱⋯00⋮ann⎦⎥⎥⎥⎤,R=⎣⎢⎢⎢⎡0a21⋮an1a120⋮an2⋯⋯⋱⋯a1na2n⋮0⎦⎥⎥⎥⎤
线性方程组可以重写为:
D
x
=
b
−
R
x
{\displaystyle D\mathbf {x} =\mathbf {b} -R\mathbf {x} }
Dx=b−Rx
雅可比法是一种迭代方法。在每一次迭代中,上一次算出的x被用在右侧,用来算出左侧的新的x。这个过程可以如下表示:
x
(
k
+
1
)
=
D
−
1
(
b
−
R
x
(
k
)
)
.
{\displaystyle \mathbf {x} ^{(k+1)}=D^{-1}(\mathbf {b} -R\mathbf {x} ^{(k)}).}
x(k+1)=D−1(b−Rx(k)).
对每个元素可以用以下公式:
x
i
(
k
+
1
)
=
1
a
i
i
(
b
i
−
∑
j
≠
i
a
i
j
x
j
(
k
)
)
,
i
=
1
,
2
,
…
,
n
.
{\displaystyle x_{i}^{(k+1)}={\frac {1}{a_{ii}}}\left(b_{i}-\sum _{j\neq i}a_{ij}x_{j}^{(k)}\right),\quad i=1,2,\ldots ,n.}
xi(k+1)=aii1⎝⎛bi−j=i∑aijxj(k)⎠⎞,i=1,2,…,n.
注意计算 xi(k+1)需要x(k)中除了自己之外的每个元素。 不像高斯-赛德尔迭代,我们不能用 xi(k+1)覆盖xi(k),因为在接下来的计算中还要用到这些值。这是雅可比和高斯-塞德尔方法最显著的差别,也是为什么前者可以用并行算法而后者不能的原因。最小需要的存储空间是两个长度为n的向量。
高斯-赛德尔迭代
对于一个含有n个未知量及n个等式的如下线性方程组
a
11
⋅
x
1
+
a
12
⋅
x
2
+
…
+
a
1
n
⋅
x
n
=
b
1
,
a
21
⋅
x
1
+
a
22
⋅
x
2
+
…
+
a
2
n
⋅
x
n
=
b
2
,
⋮
=
⋮
a
n
1
⋅
x
1
+
a
n
2
⋅
x
2
+
…
+
a
n
n
⋅
x
n
=
b
n
.
{\displaystyle {\begin{aligned}a_{11}\cdot x_{1}+a_{12}\cdot x_{2}+\ldots +a_{1n}\cdot x_{n}&=b_{1},\\a_{21}\cdot x_{1}+a_{22}\cdot x_{2}+\ldots +a_{2n}\cdot x_{n}&=b_{2},\\\vdots \qquad \qquad \qquad &=\vdots \\a_{n1}\cdot x_{1}+a_{n2}\cdot x_{2}+\ldots +a_{nn}\cdot x_{n}&=b_{n}.\end{aligned}}}
a11⋅x1+a12⋅x2+…+a1n⋅xna21⋅x1+a22⋅x2+…+a2n⋅xn⋮an1⋅x1+an2⋅x2+…+ann⋅xn=b1,=b2,=⋮=bn.
为了求这个方程组的解
x
⃗
{\displaystyle {\vec {x}}}
x,我们使用迭代法。k用来计量迭代步数。给定该方程组解的一个近似值
x
⃗
k
∈
R
n
{\displaystyle {\vec {x}}^{\,k}\in \mathbb {R} ^{n}}
xk∈Rn。在求k+1步近似值时,我们利用第m个方程求解第m个未知量。在求解过程中,所有已解出的k+1步元素都被直接使用。这一点与雅可比法不同。对于每个元素可以使用如下公式
x
m
k
+
1
=
1
a
m
m
(
b
m
−
∑
j
=
1
m
−
1
a
m
j
⋅
x
j
k
+
1
−
∑
j
=
m
+
1
n
a
m
j
⋅
x
j
k
)
,
1
≤
m
≤
n
.
{\displaystyle x_{m}^{k+1}={\frac {1}{a_{mm}}}\left(b_{m}-\sum _{j=1}^{m-1}a_{mj}\cdot x_{j}^{k+1}-\sum _{j=m+1}^{n}a_{mj}\cdot x_{j}^{k}\right),\quad 1\leq m\leq n.}
xmk+1=amm1(bm−j=1∑m−1amj⋅xjk+1−j=m+1∑namj⋅xjk),1≤m≤n.
重复上述的求解过程,可以得到一个线性方程组解的近似值数列:
x
⃗
0
,
x
⃗
1
,
x
⃗
2
,
…
{\displaystyle {\vec {x}}^{0},{\vec {x}}^{1},{\vec {x}}^{2},\ldots }
x0,x1,x2,…
在该方法收敛的前提下,此数列收敛于
x
⃗
{\displaystyle {\vec {x}}}
x. 可以证明数列收敛若线性方程组系数矩阵为对称正定矩阵
(
s
y
m
m
e
t
r
i
c
p
o
s
i
t
i
v
e
d
e
f
i
n
i
t
e
m
a
t
r
i
x
)
(symmetric positive definite matrix)
(symmetricpositivedefinitematrix)或对角优势矩阵
(
d
i
a
g
o
n
a
l
l
y
d
o
m
i
n
a
n
t
m
a
t
r
i
x
)
(diagonally dominant matrix)
(diagonallydominantmatrix)。
为了保证该方法可以进行,主对角线元素 a m m {\displaystyle a_{mm}} amm需非零。
明天将会整理项目有关文档。