2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Проверьте алгоритм на VBA
Сообщение29.01.2008, 21:51 
Добрый день!
Проверьте пожалуйста алгоритм приведения матрицы к ступенчатому виду на языке
VBA.




Sub Syst()
ReDim A(4, 4) As Double
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim p As Integer
Dim t As Integer
Dim m As Integer
Dim c As Double

//Инициализируем матрицу
A(0, 0) = 0
A(0, 1) = 0
A(0, 2) = 2
A(1, 0) = 0
A(1, 1) = 1
A(1, 2) = 1
A(2, 0) = 0
A(2, 1) = 1
A(2, 2) = 0



n = 2 //количество столбцов
m = 2//количество строк
k = 1
r = -1//Число, смысл которого состоит в том,что бы определить номер столбца в котором находится текущий ненулевой элемент
For i = 0 To m - 1
2: q = 0
r = r + 1

If r > n Then GoTo 3

For p = i To m //Цикл, реализующий поиск ненулевого элемента в столбце
If A(p, r) <> 0 Then
For t = 0 To n //цикл, осуществляющий элементарное преобразование 3-го типа. т.е. меняет строки местами если найден ненулевой элемент в просматриваемой предыдущим циклом строке
A(m + 1, t) = A(i, t)
A(i, t) = A(p, t)
A(p, t) = A(m + 1, t)
Next t
q = 1
GoTo 1
End If
Next p


1: If q = 0 Then GoTo 2

For j = i To (m - 1)
c = -(A(j + 1, r)) / A(i, r)
For k = r To m
A(j + 1, k) = c * A(i, k) + A(j + 1, k)
Next k
Next j
Next i

3:
End Sub

-----------------------------------------------------------------------------
Проблема в том, что я запутался в массе текущих индексов, и немогу в голове удержать
правильное их расположение, хотя все проверенные мною примеры давали правильный результат при использовании алгоритма. Кстати, существует ли несколько контрольных примеров, в результате выполнения которых можно было бы наверняка убедится, что алгоритм верен?

И ещё одна проблема: пока думал над этой задачей, у меня в голове графически представлялась одна картина. Теперь мне нужно осуществить "обратный ход" т.е.
привести матрицу не к ступенчатому а к диагональному виду. Я совершенно немогу это в силу инерции сознания осуществить. Не могли бы Вы мне подсказать, что именно мне нужно поменять в текущем алгоритме, что бы осуществить проход не сверху вниз, а наоборот - снизу вверх?

 
 
 [ 1 сообщение ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group