Реализация и примеры
В рабочей книге system of linear equation.xls представлен вариант реализации рассмотренных методов.
Задание матрицы коэффициентов, правых частей уравнений и выбор численного метода реализовано с помощью диалогового окна.
Исходные данные задаются с помощью ссылок на ячейки электронной таблицы.
При запуске вычислительной процедуры осуществляется проверка корректности исходных данных (эта часть VBA кода не приведена в листинге ниже).
Полученные корни, выводятся в ячейки электронной таблицы (необходимо указать диапазон вывода корней).
Листинг
'//////////////////////////////////////////////////////////////
'Процедура находит решение системы линейных уравнений по
'методу Гаусса с выбором главного элемента
'//////////////////////////////////////////////////////////////
'a() - исходная расширенная матрица
'n - число строк в матрице а
'x() - массив содержащий корни системы уравнений
'//////////////////////////////////////////////////////////////
Private Sub gauss(a() As Double, n As Integer)
For k = 1 To n
k1 = k + 1
s = a(k, k)
j = k
'поиск главного элемента в строке с номером k
For i = k1 To n
r = a(i, k)
If Abs(r) > Abs(s) Then
s = r
j = i
End If
Next i
If j <> k Then
For i = k To n + 1
r = a(k, i)
a(k, i) = a(j, i)
a(j, i) = r
Next i
End If
'нормализация строки
For j = k1 To n + 1
a(k, j) = a(k, j) / s
Next j
'выполнение шага исключения
For i = k1 To n
r = a(i, k)
For j = k1 To n + 1
a(i, j) = a(i, j) - a(k, j) * r
Next j
Next i
Next k
'опеределение
значений x обратной подставновкой
ReDim x(n)
For i = n To 1 Step -1
s = a(i, n + 1)
For j = i + 1 To n
s = s - a(i, j) * x(j)
Next j
x(i) = s
Next i
End Sub
'//////////////////////////////////////////////////////////////
'Процедура находит решение системы линейных уравнений по
'методу Холесского с выбором главного элемента
'//////////////////////////////////////////////////////////////
'a() - исходная расширенная матрица
'n - число строк в матрице а
'x() - массив содержащий корни системы уравнений
'//////////////////////////////////////////////////////////////
Private Sub holesski(a()
As Double, n As Integer)
'выбор главного элемента
For k = 1 To n
' поиск главного элемента
s = a(k, k)
j = k
For i = k + 1 To n
r = a(i, k)
If Abs(r) > Abs(s) Then
s = r
j = i
End If
Next i
'перестановка строк
If j <> k Then
For i = 1 To n + 1
r = a(k, i)
a(k, i) = a(j, i)
a(j, i) = r
Next i
End If
Next k
'вычисление первой строки
For j = 2 To n + 1
a(1, j) = a(1, j) / a(1, 1)
Next j
'вычисление остальных строк
For l = 2 To n
'вычисление L-того столбца
For i = l To n
s = 0
For k = 1 To l - 1
s = s + a(i, k) * a(k, l)
Next k
a(i, l) = a(i, l) - s
Next i
'вычисление L-той строки
For j = l + 1 To n + 1
s = 0
For k = 1 To l - 1
s = s + a(l, k) * a(k, j)
Next k
a(l, j) = (a(l, j) - s) / a(l, l)
Next j
Next l
'опеределение значений x обратной подставновкой
ReDim x(n)
x(n) = a(n, n + 1)
For m = 1 To n - 1
i = n - m
s = o
For j = i + 1 To n
s = s + a(i, j) * x(j)
Next j
x(i) = a(i, n + 1) - s
Next m
End Sub
Пример
Используя описанные выше методы, найти решение следующей системы уравнений:
3,0x1-1,1x2-2,0x3-1,8x4=1,0
3,2x1+2,1x2+3,2x3+5,2x4=2,0
3,4x1+2,4x2-4,2x3+3,2x4=8,0
2,6x1+2,1x2-3,2x3+3,4x4=1,0
Решение
