Документ взят из кэша поисковой машины. Адрес оригинального документа : http://wasp.phys.msu.ru/forum/lofiversion/index.php?t9850.html
Дата изменения: Unknown
Дата индексирования: Mon Apr 11 11:28:39 2016
Кодировка: Windows-1251
Студенческий форум Физфака МГУ > Метод Гаусса
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Метод Гаусса
Студенческий форум Физфака МГУ > Наука физика > Есть проблема
Нейт
Нужна программа
peregoudov
Погуглите "Numerical Recipes".
Developer
1) Получение матрицы [math]$A^{-1}$[/math], обратной данной матрице [math]$A$[/math] (их произведение есть единичная матрица), называется обращением матрицы и осуществляется по простому алгоритму, реализованному, например на бейсике:
15 input 'Размерность матрицы N='n : dim a(n,n), p(n,n)
20 dim b(n),c(n,n),g(n),x(n)
' двойной цикл ввода элементов исходной матрицы
25 for i=1 to n : for j=1 to n
30 ? 'A('i','j')=': input a(i,j)
35 p(i,j)=a(i,j): next j: next i
40 for j2=1 to n: for i=1 to n
50 b(i)=0: next i
60 b(j2)=1
70 for j3=1 to n: for j4=1 to n
80 a(j3,j4)=p(j3,j4): next j4: next j3
85 gosub 100: for i=1 to n
90 ? 'X('i','j2')='x(i)
95 next i: next j2: stop
100 n1=n-1: for k=1 to n1
110 if abs(a(k,k))>0 goto 200
120 k1=k+1: for m=k1 to n
130 if abs(a(m,k))>0 goto 150
140 goto 165
150 for l=1 to n: v=a(k,l): a(k,l)=a(m,l)
160 a(m,l)=v: next l
165 next m
170 v=b(k): b(k)=b(m): b(m)=v
200 g(k)=b(k)/a(k,k): k1=k+1
210 for i=k1 to n: b(i)=b(i)-a(i,k)*g(k)
220 for j1=k to n: j=n-j1+k: c(k,j)=a(k,j)/a(k,k)
225 a(i,j)=a(i,j)-a(i,k)*c(k,j)
230 next j1: next i: next k
240 m=n: x(m)=b(m)/a(m,m)
250 m=m-1: s=0: for l=m to n1
260 s=s+c(m,l+1)*x(l+1): next l
270 x(m)=g(m)-s: if m>1 goto 250
280 return: end

Несложно перевести эту программу на турбо-паскаль или турбо-бейсик без использования нумерации строк и переходов по goto

2) Алгоритм взят из книги Дьяконова В.П. "Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ". Метод Гаусса с выбором главного элемента по столбцу, строке или по всей матрице сводится к тому, что перед преобразованием в исходной матрице выбирают наибольший по модулю (главный) элемент, допустим [math]$A_{ij}$[/math], и далее переставляют первую строку матрицы с i-й строкой (это выбор главного элемента по строке), а первый столбец переставляют с j-м (выбор главного элемента по столбцу). При каждой такой перестановке знак определителя меняется, поэтому результат нужно умножить на [math]$(-1)^p$[/math], где p- число перестановок.
Нейт
Спасибо огромное за помощь))я уже вроде написала сама))но все равно спасибо! respect.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2016 IPS, Inc.