Скачиваний:
0
Добавлен:
01.03.2025
Размер:
683.01 Кб
Скачать

Разработка алгоритма

Для поиска главного элемента вызываем специальную процедуру. Если выяснится, что система не имеет единственного решения, то для выхода из цикла параметру присваиваем конечное значение.

Рисунок 21. Схема алгоритма процедуры прямого хода метода Гаусса

Разработка исходного текста процедуры

Sub ForwardStage(A() As Double, B() As Double, XOrder() As Long, n As Long, EC As Byte)

Dim i As Long, j As Long, k As Long, C As Double

EC = 0 'Надеемся, что без ошибок

For i = 1 To n 'Для всех диагональных элементов

GlobalMainElement A,B,XOrder,n,i 'Поиск главного элемента

If A(i,i)<>0 Then 'Если главный элемент не равен нулю

For j = i + 1 To n 'Для строк ниже текущего элемента

If A(j,i)<>0 Then 'Если элемент столбца уже не нулевой

C=A(j,i)/A(i,i) 'Вычисляем коэффициент

B(j)=B(j)-B(i)*C 'Вычитаем из обнуляемой строки

For k=i To n 'Для элементов обнуляемой строки

A(j,k)=A(j,k)-A(i,k)*C 'Вычитаем из обнуляемой строки

Next k 'Следующий элемент

End If

Next j 'Следующая строка

ElseIf B(i) = 0 Then 'Если и главный элемент и элемент вектора свободных членов B нулевые

EC = 1 'Система неопределённа

i = n 'Выходим

Else 'Если главный элемент нулевой, а элемент вектора свободных членов B ненулевой

EC = 2 'Система несовместна

i = n 'Выходим

End If

Next i 'Следующий диагональный элемент

End Sub

Процедура поиска главного элемента.

Поиск и перемещение главного элемента состоит в поиске максимального по абсолютной величине элемента среди элементов, находящихся правее и ниже элемента главной диагонали текущего столбца, включая сам этот элемент, и перемещении его на главную диагональ путём перестановки строк и столбцов с текущим диагональным элементом и с найденным максимальным по модулю. Совместно с перестановкой строк переставляются соответствующие элементы вектора свободных членов, с перестановкой столбцов – позиции элементов вектора решения.

Информационная структура

Входные данные

  • n – количество уравнений – целое число >0;

  • A – двумерный массив с матрицей – nxn типа Double;

  • B – одномерный массив с вектором – n чисел типа Double;

  • XOrder – одномерный массив с исходными порядковыми номерами вектора решений – n целых чисел;

  • R – текущий диагональный элемент;

Локальные данные

  • i – номер текущего диагонального элемента массива, под которым будет обнуляться столбец – целое число от 1 до n;

  • j – номер текущей строки массива, в которой обнуляется i-й элемент – целое число от 1 до n;

  • k – номер элемента строки, i-й столбец которой обнуляется – целое число от 1 до n;

  • Max – максимальное значение в области поиска – число типа Double;

  • MaxX – номер строки элемента с максимальным в области поиска значением – целое число;

  • MaxY – номер строки элемента с максимальным в области поиска значением – целое число;

Выходные данные

  • A – двумерный массив после перестановки R-го главного элемента – nxn типа Double;

  • B – одномерный массив вектора свободных членов после перестановки R-го главного элемента – n чисел типа Double;

  • XOrder – одномерный массив с порядковыми номерами вектора решений после перестановки R-го главного элемента – n целых чисел;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]