全选主元高斯消去法 matlab程序,[VB]全选主元高斯消去法求解线性方程组

功能:  使用全选主元高斯消去法求解线性方程组

'  参数    n     - Integer型变量,线性方程组的阶数

'

dblA   - Double型 n x n 二维数组,线性方程组的系数矩阵

'         dblB   - Double型长度为 n

的一维数组,线性方程组的常数向量,返回方程组的解向量

'  返回值:Boolean型,求解成功为True,无解或求解失败为False

Public Function LEGauss(n As Integer, dblA() As Double, dblB() As Double) As Boolean

' 局部变量

Dim i As Integer, j As Integer, k As Integer

Dim nIs As Integer

ReDim nJs(n) As Integer

Dim d As Double, t As Double

' 开始求解

For k = 1 To n - 1

d = 0#

' 归一

For i = k To n

For j = k To n

t = Abs(dblA(i, j))

If t > d Then

d = t

nJs(k) = j

nIs = i

End If

Next j

Next i

' 无解,返回

If d + 1# = 1# Then

LEGauss = False

Exit Function

End If

' 消元

If nJs(k) <> k Then

For i = 1 To n

t = dblA(i, k)

dblA(i, k) = dblA(i, nJs(k))

dblA(i, nJs(k)) = t

Next i

End If

If nIs <> k Then

For j = k To n

t = dblA(k, j)

dblA(k, j) = dblA(nIs, j)

dblA(nIs, j) = t

Next j

t = dblB(k)

dblB(k) = dblB(nIs)

dblB(nIs) = t

End If

d = dblA(k, k)

For j = k + 1 To n

dblA(k, j) = dblA(k, j) / d

Next j

dblB(k) = dblB(k) / d

For i = k + 1 To n

For j = k + 1 To n

dblA(i, j) = dblA(i, j) - dblA(i, k) * dblA(k, j)

Next j

dblB(i) = dblB(i) - dblA(i, k) * dblB(k)

Next i

Next k

d = dblA(n, n)

' 无解,返回

If Abs(d) + 1# = 1# Then

LEGauss = False

Exit Function

End If

' 回代

dblB(n) = dblB(n) / d

For i = n - 1 To 1 Step -1

t = 0#

For j = i + 1 To n

t = t + dblA(i, j) * dblB(j)

Next j

dblB(i) = dblB(i) - t

Next i

' 调整解的次序

nJs(n) = n

For k = n To 1 Step -1

If nJs(k) <> k Then

t = dblB(k)

dblB(k) = dblB(nJs(k))

dblB(nJs(k)) = t

End If

Next k

' 求解成功

LEGauss = True

End Function

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值