高斯—若当消元法
2008-05-05 13:17
393 查看
[align=left]文章转载自:http://www.tyut.edu.cn/kecheng/jisff/dzja/ch3/ch3-3.htm
http://blog.excelhome.net/user1/northwolves/archives/2006/710.html
[/align][align=left]
[/align][align=left]高斯消元法始终是消去对角线下方的元素,如果在每次消元过程中,首先将主元素化为1, 并消去对角线上方与下方的元素,这种方法称为高斯—若当(Gauss-Jordan)消元法.它不需要回代过程即可求得线性方程组的解.[/align]
[align=left]例1 用高斯—若当消元法求解线性方程组[/align]
[align=left]解 方程组的增广矩阵经高斯—若当消元法,得[/align]
[align=left]故原方程的解为[/align]
设用高斯—若当消元法已完成
步,于是线性方程组
化为等价方程组
,其中
[align=left]满足[/align]
,
次消元后,得原方程组的解为
[align=left]与高斯消元法相同,高斯—若当消元法也可进行全主元素消元法及列主元素消元法.?[/align]
初看起来,似乎高斯—若当消元法比高斯消元法好,然而只要我们稍作分析就会发现它的运算量比高斯消元法要大.
使用公式(1)—(5),对每一个
需要
次除法,
次乘法,及
次减法,故乘除法总运算量是
加减法总运算量是
在第二节中我们曾指出,高斯消元法的运算量,乘除法次数为
,加减法的次数为
,从而,高斯—若当消元法比高斯消元法的运算量乘除法多
次,加减法多
次。当
值较大时,高斯消元法比高斯—若当消元法节省
次乘除法和加减法,这个运算量是十分可观的.
二 逆矩阵
高斯—若当消元法对求 一个矩阵的逆矩阵,或对求解仅常数项不同的很多方程组及矩阵方程是非常有用的.
?求矩阵
的逆矩阵
,即求
阶矩阵
,使
,其中
为
阶单位矩阵.?将矩阵分块
于是,求解
等价于求解
个方程组
由线性代数理论,我们有下面结论.
定理 设
为非奇异矩阵,方程组
的增广矩阵为
,如果对
应用高斯-若当方法化为
,则
例2
[/b]用高斯—若当消元法求
的逆矩阵
.
[align=left]解 [/align]
[align=left]所以[/align]
为
了节省存储单元,可不必将单位矩阵存放起来.作为第一步结果的式(9)中第1列已无用处,而第4列又相当于逆矩阵所求第1列的中间结果,把它移到第1列不
影响简化过程的实质.而且第5、6两列的常数项可取消,它们对简化也无实质影响,所以,最终按原位记法(9)式的结果可存放为
同理,式(10)中的
阶矩阵将第4列移到第1列,第5列移到第2列,取消第6列,则按原位记法为
[align=left] [/align]
式(11)的原位结果为
即为我们所要求的逆矩阵
,所以在计算中求逆矩阵的过程可简记为
=
一般地,逆矩阵的计算公式为
式(12)—(15)就是求逆矩阵的基本计算公式,对应于每一个
值就是完成了一个消元过程,在消元过程进行中
和
变量在规定的范围内进行循环.
我们知道,只要矩阵
的行列式
,则
总
是可逆的,然而,当主元素为零或绝对值太小时,按上述方法计算机可能要溢出,因此,在约化的过程中也应采用选主元素的方法,如果互换矩阵的两行,对方程组
的解来说,这样的对换对结果没有影响;而对求逆矩阵来说,这样的对换改变了所要求的逆矩阵.事实上,是逆矩阵也作了相应两列的互换,所以,计算逆矩阵也可
以
通过列主元素消元法,只要记住行的交换,然后在结果中施行相应的列交换即可.
高斯消元法进行多元一次方程组的求解
假设SHEET1中,A1:D3(上面的示例数据) 的数据代表一个 三元一次方程组:
x1+x2+x3=6
2x1-x2+3x3=5
4x1+2x2-3x3=3
求x1,x2,x3
Function Determinant(ByRef factor) As Single
Dim i As Long, j As Long, k As Long, row As Long, order As Long
Dim r As Long, c As Long, Pivot As Single, Pivot2 As Single, temp() As Single
Determinant = 1
Dim m
m = factor
row = UBound(m, 1)
If Not UBound(m, 2) = row + 1 Then MsgBox "无解或不定解!": Exit Function
ReDim temp(1 To row)
For i = 1 To row
Pivot = 0
For j = i To row
For k = i To row
If Abs(m(k, j)) > Pivot Then
Pivot = Abs(m(k, j))
r = k: c = j
End If
Next k
Next j
If Pivot = 0 Then Determinant = 0: Exit Function
If r <> i Then
order = order + 1
For j = 1 To row
temp(j) = m(i, j)
m(i, j) = m(r, j)
m(r, j) = temp(j)
Next j
End If
If c <> i Then
order = order + 1
For j = 1 To row
temp(j) = m(j, i)
m(j, i) = m(j, c)
m(j, c) = temp(j)
Next j
End If
Pivot = m(i, i)
Determinant = Determinant * Pivot
For j = i + 1 To row
Pivot2 = m(j, i)
If Pivot2 <> 0 Then
For k = 1 To row
m(j, k) = m(j, k) - m(i, k) * Pivot2 / Pivot
Next
End If
Next
Next
Determinant = Determinant * (-1) ^ order
End Function
Sub getresult(ByVal r As Range, Optional ByRef answer As String)
Dim row As Integer, i As Integer, D0 As Single
Dim m
Dim factor
Dim result() As String
factor = r
row = UBound(factor, 1)
ReDim result(1 To row)
D0 = Determinant(factor)
If D0 = 0 Then MsgBox "无解!": Exit Sub
For i = 1 To row
m = factor
For j = 1 To row
m(j, i) = factor(j, row + 1)
Next
result(i) = "X" & i & "= " & Format(Determinant(m) / D0, "0.00") ' Di/D0
Next
answer = Join(result, vbCrLf)
End Sub
Sub solver()
Dim answer As String
getresult [a1:d3], answer
MsgBox answer, 0, "答案"
End Sub
附件:http://down.51cto.com/data/2349864
http://blog.excelhome.net/user1/northwolves/archives/2006/710.html
[/align][align=left]
[/align][align=left]高斯消元法始终是消去对角线下方的元素,如果在每次消元过程中,首先将主元素化为1, 并消去对角线上方与下方的元素,这种方法称为高斯—若当(Gauss-Jordan)消元法.它不需要回代过程即可求得线性方程组的解.[/align]
[align=left]例1 用高斯—若当消元法求解线性方程组[/align]
[align=left]解 方程组的增广矩阵经高斯—若当消元法,得[/align]
[align=left]故原方程的解为[/align]
设用高斯—若当消元法已完成
步,于是线性方程组
化为等价方程组
,其中
[align=left]满足[/align]
,
次消元后,得原方程组的解为
[align=left]与高斯消元法相同,高斯—若当消元法也可进行全主元素消元法及列主元素消元法.?[/align]
初看起来,似乎高斯—若当消元法比高斯消元法好,然而只要我们稍作分析就会发现它的运算量比高斯消元法要大.
使用公式(1)—(5),对每一个
需要
次除法,
次乘法,及
次减法,故乘除法总运算量是
加减法总运算量是
在第二节中我们曾指出,高斯消元法的运算量,乘除法次数为
,加减法的次数为
,从而,高斯—若当消元法比高斯消元法的运算量乘除法多
次,加减法多
次。当
值较大时,高斯消元法比高斯—若当消元法节省
次乘除法和加减法,这个运算量是十分可观的.
二 逆矩阵
高斯—若当消元法对求 一个矩阵的逆矩阵,或对求解仅常数项不同的很多方程组及矩阵方程是非常有用的.
?求矩阵
的逆矩阵
,即求
阶矩阵
,使
,其中
为
阶单位矩阵.?将矩阵分块
于是,求解
等价于求解
个方程组
由线性代数理论,我们有下面结论.
定理 设
为非奇异矩阵,方程组
的增广矩阵为
,如果对
应用高斯-若当方法化为
,则
例2
[/b]用高斯—若当消元法求
的逆矩阵
.
[align=left]解 [/align]
[align=left]所以[/align]
为
了节省存储单元,可不必将单位矩阵存放起来.作为第一步结果的式(9)中第1列已无用处,而第4列又相当于逆矩阵所求第1列的中间结果,把它移到第1列不
影响简化过程的实质.而且第5、6两列的常数项可取消,它们对简化也无实质影响,所以,最终按原位记法(9)式的结果可存放为
同理,式(10)中的
阶矩阵将第4列移到第1列,第5列移到第2列,取消第6列,则按原位记法为
[align=left] [/align]
式(11)的原位结果为
即为我们所要求的逆矩阵
,所以在计算中求逆矩阵的过程可简记为
=
一般地,逆矩阵的计算公式为
式(12)—(15)就是求逆矩阵的基本计算公式,对应于每一个
值就是完成了一个消元过程,在消元过程进行中
和
变量在规定的范围内进行循环.
我们知道,只要矩阵
的行列式
,则
总
是可逆的,然而,当主元素为零或绝对值太小时,按上述方法计算机可能要溢出,因此,在约化的过程中也应采用选主元素的方法,如果互换矩阵的两行,对方程组
的解来说,这样的对换对结果没有影响;而对求逆矩阵来说,这样的对换改变了所要求的逆矩阵.事实上,是逆矩阵也作了相应两列的互换,所以,计算逆矩阵也可
以
通过列主元素消元法,只要记住行的交换,然后在结果中施行相应的列交换即可.
高斯消元法进行多元一次方程组的求解
1 | 1 | 1 | 6 |
2 | -1 | 3 | 5 |
4 | 2 | -3 | 3 |
x1+x2+x3=6
2x1-x2+3x3=5
4x1+2x2-3x3=3
求x1,x2,x3
Function Determinant(ByRef factor) As Single
Dim i As Long, j As Long, k As Long, row As Long, order As Long
Dim r As Long, c As Long, Pivot As Single, Pivot2 As Single, temp() As Single
Determinant = 1
Dim m
m = factor
row = UBound(m, 1)
If Not UBound(m, 2) = row + 1 Then MsgBox "无解或不定解!": Exit Function
ReDim temp(1 To row)
For i = 1 To row
Pivot = 0
For j = i To row
For k = i To row
If Abs(m(k, j)) > Pivot Then
Pivot = Abs(m(k, j))
r = k: c = j
End If
Next k
Next j
If Pivot = 0 Then Determinant = 0: Exit Function
If r <> i Then
order = order + 1
For j = 1 To row
temp(j) = m(i, j)
m(i, j) = m(r, j)
m(r, j) = temp(j)
Next j
End If
If c <> i Then
order = order + 1
For j = 1 To row
temp(j) = m(j, i)
m(j, i) = m(j, c)
m(j, c) = temp(j)
Next j
End If
Pivot = m(i, i)
Determinant = Determinant * Pivot
For j = i + 1 To row
Pivot2 = m(j, i)
If Pivot2 <> 0 Then
For k = 1 To row
m(j, k) = m(j, k) - m(i, k) * Pivot2 / Pivot
Next
End If
Next
Next
Determinant = Determinant * (-1) ^ order
End Function
Sub getresult(ByVal r As Range, Optional ByRef answer As String)
Dim row As Integer, i As Integer, D0 As Single
Dim m
Dim factor
Dim result() As String
factor = r
row = UBound(factor, 1)
ReDim result(1 To row)
D0 = Determinant(factor)
If D0 = 0 Then MsgBox "无解!": Exit Sub
For i = 1 To row
m = factor
For j = 1 To row
m(j, i) = factor(j, row + 1)
Next
result(i) = "X" & i & "= " & Format(Determinant(m) / D0, "0.00") ' Di/D0
Next
answer = Join(result, vbCrLf)
End Sub
Sub solver()
Dim answer As String
getresult [a1:d3], answer
MsgBox answer, 0, "答案"
End Sub
附件:http://down.51cto.com/data/2349864
相关文章推荐
- 高斯-若尔当消元法(线性代数)
- C/C++语言实现矩阵求逆运算—高斯约化/消元法
- 高斯消元法,高斯约旦消元法
- 高斯-约当(Gauss-Jordan)消元法
- 高斯-约当消元法(随机程序,UVA 10828)
- 高斯消元法 & 高斯-约当 (Gauss-Jordan) 消元法
- 高斯消元法(Gauss Elimination) 分析 & 题解 & 模板——czyuan原创
- 高斯列主元消元法求解线性方程组
- 高斯消元法 模板
- 选主元的高斯-约旦(Gauss-Jordan)消元法解线性方程组/求逆矩阵
- C语言 高斯-若尔当消元法
- 高斯消元法 模板
- POJ3185 The Water Bowls【高斯消元法】
- 浮点数高斯约当消元法模板
- 矩阵分析-线性系统-2 高斯消元法、高斯-若尔当消元法
- 矩陣分析-線性系統-2 高斯消元法、高斯-若爾當消元法
- 高斯消元法模板
- 高斯消元法(高斯·约当消元法)(浮点)
- 选主元的高斯-约当(Gauss-Jordan)消元法解线性方程组和求逆矩阵
- 高斯消元法,高斯约旦消元法