Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2012, 17:19   #1
meigas
 
Регистрация: 29.05.2012
Сообщений: 5
По умолчанию нахождение определителя методом Гаусса (VBA)

Нужно написать макрос который сможет найти определитель матрицы (n*n) используя метод Гаусса (вводится матрица с листа экселя).
Вот процедура решения СЛАУ методом Гаусса, но как с её помощью найти определитель - не могу понять, буду благодарен за помощь.
Код:
Sub TrSolve()   ' Решение СЛАУ с верхней треугольной матрицей  (метод Гаусса)
Dim TR As Range
Dim N As Integer
For Each TR In Selection.Areas
  NM = TR.Count
  i1 = TR.Row: j1 = TR.Column
  ' N = (-1 + Sqr(1 + 4 * NM)) / 2   ' Способ первый
  N = 0: mn = 0                                 ' Способ  второй:
  Do While mn < NM:    N = N + 1: mn = N * (N + 1):   Loop
  ' Cells(i1, j1 + N + 1) = 999
  Dim b() As Double
  ReDim b(N)
   For i = 1 To N:  b(i) = TR.Cells(i, N + 1): Next
   For k = N To 1 Step -1
       Cells(i1 + N, j1 + k - 1) = b(k) / TR.Cells(k, k)
       S = 0
       For i = 1 To N - 1
          b(i) = b(i) - TR.Cells(i, k) * Cells(i1 + N, j1 + k - 1)
       Next i
  Next k
Exit For
Next
End Sub
 
Sub E()     '  Ctrl+Shift+E  - создать единичную матрицу
Dim TR As Range
Dim N As Integer
For Each TR In Selection.Areas
  N = Sqr(TR.Count)
   i1 = TR.Row: j1 = TR.Column
  TR = 0
  For i = 1 To N: Cells(i1 + i - 1, j1 + i - 1) = 1: Next
Next
End Sub
 
Sub Lk()  ' Нормирование ведущего столбца  (без наддиагонали) по шагам:
' Скопировать в E  ведущий столбец  (без наддиагонали) и  запустить по Ctrl+Shift+L макрос!
Dim TR As Range
Dim N As Integer
For Each TR In Selection.Areas
  N = TR.Count
  i1 = TR.Row: j1 = TR.Column
  For i = i1 + 1 To i1 + N - 1
      Cells(i, j1) = -Cells(i, j1) / Cells(i1, j1)
  Next i
   Cells(i1, j1) = 1
Next
End Sub

Последний раз редактировалось meigas; 29.05.2012 в 19:48.
meigas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определитель матрицы методом Гаусса VBA Екатерина5119 Помощь студентам 0 22.05.2012 15:36
Нахождение определителя матрицы La`Fleur C++ Builder 0 10.05.2011 22:34
Нахождение определителя dyusha2006 Помощь студентам 0 23.11.2010 21:18
обращение матрицы и вычисление определителя по схеме гаусса dacsa Паскаль, Turbo Pascal, PascalABC.NET 2 21.07.2010 21:50
вычисление определителя по схеме Гаусса Ника__ Помощь студентам 1 15.08.2009 16:49