Решение задач в Excel на VBA. Применение программных средств в проектировании автомобильных конструкций. Калядин В.И. - 17 стр.

UptoLike

Составители: 

17
Кроме того методически не правильно применять для решения СЛАУ
более трудоѐмкую процедуру обращения матриц (вычисление
1
A
из
EAA
1
равносильно решению стольких СЛАУ, сколько имеется не-
известных). Поэтому целесообразно пополнить арсенал функций Excel
процедурой эффективного решения СЛАУ с оценкой близости системы
к вырожденной – с оценкой числа обусловленности.
Решение задачи В. Рассмотренный алгоритм решения СЛАУ методом
Гаусса удобно записать на Фортране языке, хорошо подходящем для
записи алгоритма. Упрощѐнный (без оценки числа обусловленности),
но более наглядный, вариант процедуры представлен ниже:
Subroutine KGAUSS(Ab, N, X, IAI)
Real(8) Ab(N,N+1), X(N) ! Описание массивов
IAI=1
Do k=1, N ! <==> For k=1 To N ! Перебор строк - шаги прямого хода
Call CMEHA ! Выбор и анализ гл. элемента
If( IAI == 0 ) Return ! <==> Exit Sub ! Выход, если гл. элемент = 0
Do i=k+1, N ! Перебор строк с k+1-ой по N-ую
Ab(i,k) = Ab(i,k)/Ab(k,k)
Ab(i,k+1:N+1) = Ab(i,k+1:N+1) - Ab(i,k)*Ab(k,k+1:N+1)
End Do
End Do ! <==> Next k
Do k = N, 1,-1 ! Обратная подстановка (обратный ход)
X(k)=Ab(k,N+1)/Ab(k,k)
Ab(1:N-1,N+1) = Ab(1:N-1,N+1) - Ab(1:N-1,k)*X(k)
End Do
Contains ! ------- Внутренние подпрограммы: ----------------------------------------
Subroutine CMEHA ! Процедура выбора гл. элемента и перестановки строк
Real(8) W(N+1) ; Integer L(1) ! Описание массивов
L=MaxLoc(abs(Ab(K:N,K))) ! Опр. номера строки с гл. элементом
W=Ab(K,:); Ab(K,:)=Ab(L(1)+K-1,:); Ab(L(1)+K-1,:)=W ! Перестановки
If(abs(Ab(K,K) )== 0D0) IAI=0 ! IAI - признак вырожденности системы
End Subroutine
End
Замечание. В Фортране примечания записываются справа от знака «!».
Цикл Do End Do Фортрана соответствует циклу For Next Бейсика.
Запись A(i, j1:j2) указывает на элементы с j1-го по j2-ой в i-ой строке, а
запись A(i, : ) - на все элементы i-ой строки матрицы A.
  Кроме того методически не правильно применять для решения СЛАУ
более трудоѐмкую процедуру обращения матриц (вычисление A1 из
AA1  E равносильно решению стольких СЛАУ, сколько имеется не-
известных). Поэтому целесообразно пополнить арсенал функций Excel
процедурой эффективного решения СЛАУ с оценкой близости системы
к вырожденной – с оценкой числа обусловленности.
Решение задачи В. Рассмотренный алгоритм решения СЛАУ методом
Гаусса удобно записать на Фортране – языке, хорошо подходящем для
записи алгоритма. Упрощѐнный (без оценки числа обусловленности),
но более наглядный, вариант процедуры представлен ниже:
 Subroutine KGAUSS(Ab, N, X, IAI)
   Real(8) Ab(N,N+1), X(N)         ! Описание массивов
   IAI=1
   Do k=1, N      ! <==> For k=1 To N ! Перебор строк - шаги прямого хода
     Call CMEHA                             ! Выбор и анализ гл. элемента
     If( IAI == 0 ) Return ! <==> Exit Sub ! Выход, если гл. элемент = 0
      Do i=k+1, N                            ! Перебор строк с k+1-ой по N-ую
         Ab(i,k) = Ab(i,k)/Ab(k,k)
         Ab(i,k+1:N+1) = Ab(i,k+1:N+1) - Ab(i,k)*Ab(k,k+1:N+1)
      End Do
   End Do         ! <==> Next k
   Do k = N, 1,-1                  ! Обратная подстановка (обратный ход)
      X(k)=Ab(k,N+1)/Ab(k,k)
      Ab(1:N-1,N+1) = Ab(1:N-1,N+1) - Ab(1:N-1,k)*X(k)
   End Do
 Contains ! ------- Внутренние подпрограммы: ----------------------------------------
  Subroutine CMEHA ! Процедура выбора гл. элемента и перестановки строк
    Real(8) W(N+1) ; Integer L(1)         ! Описание массивов
    L=MaxLoc(abs(Ab(K:N,K)))              ! Опр. номера строки с гл. элементом
    W=Ab(K,:); Ab(K,:)=Ab(L(1)+K-1,:); Ab(L(1)+K-1,:)=W ! Перестановки
    If(abs(Ab(K,K) )== 0D0) IAI=0 ! IAI - признак вырожденности системы
   End Subroutine
End
Замечание. В Фортране примечания записываются справа от знака «!».
Цикл Do – End Do Фортрана соответствует циклу For – Next Бейсика.
Запись A(i, j1:j2) указывает на элементы с j1-го по j2-ой в i-ой строке, а
запись A(i, : ) - на все элементы i-ой строки матрицы A.


                                          17