ВУЗ:
Составители:
Рубрика:
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.
Кроме того методически не правильно применять для решения СЛАУ более трудоѐмкую процедуру обращения матриц (вычисление A1 из AA1 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
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »