Главная страница

Курс лекций по дисциплине Программирование на языке Фортран


Скачать 0.98 Mb.
НазваниеКурс лекций по дисциплине Программирование на языке Фортран
Дата02.09.2019
Размер0.98 Mb.
Формат файлаdoc
Имя файлаFortran01.doc
ТипКурс лекций
#85698
страница7 из 15
1   2   3   4   5   6   7   8   9   10   ...   15
.

.


Часто возникает необходимость найти определитель матрицы. Например, численное решение системы линейных алгебраических уравнений имеет смысл, если матрица, составленная из неизвестных этой системы невырожденна, т.е. когда ее определитель отличен от нуля. Традиционно определитель находится по формуле: D=a11a22...ann, где aii – ведущие элементы, используемые на каждом шаге метода Гаусса (метод последовательного исключения неизвестных, суть которого состоит в преобразовании системы линейных алгебраических уравнений к системе с треугольной матрицей, из которой затем последовательно (обратным ходом) получаются значения всех неизвестных).

Еще один метод основан на идее представления исходной матрицы в виде произведения двух треугольных матриц.

Дана квадратная матрица n-го порядка: . Представим матрицу Х в виде X=Y*Z, где , . Тогда определитель матрицы Х равен произведению определителей матриц Y и Z: X=Y*Z, при этом Z=1 (произведение диагональных элементов) и X=y11y22...ynn. Перемножая матрицы Y и Z и приравнивая элементы матриц-произведения соответствующим элементам матрицы Х, получим формулы: , при ij1 и z1j=x1j/y11; , при 1
! File: opredel2.for

! Программа нахождения определителя матрицы (n*n), n>2.

! Метод основан на идее представления исходной матрицы в виде

! произведения двух треугольных матриц

Real x(20,20),y(20,20),z,s

Real p ! Значение определителя

Integer*2 n

Integer*2 i,j,k,l

Integer c ! Степень

write(5,*)'Введите размерность матрицы (>2)'

read(5,*)n

write (5,*) 'Введите построчно элементы матрицы'

do i=1,n

read(5,*)(x(i,j),j=1,n)

end do

p=1.

c=0 ! Элементы матриц Z и Y хранятся в Y

do i=1,n ! Цикл по всем строкам

y(i,1)=x(i,1)

do j=2,n ! Цикл по столбцам

if (i.ge.j)then

k=j-1 ! Верхнее предельное значение для матрицы Y

else

k=i-1 ! Верхнее предельное значение для матрицы Z

end if

s=0. ! Сумма

do l=1,k

s=s+y(i,l)*y(l,j)

end do

y(i,j)=x(i,j)-s

if (j.gt.i) y(i,j)=y(i,j)/y(i,i) ! Для матрицы Z

end do

z=y(i,i)

do while(abs(z).lt.1) ! Цикл, пока z<1

z=10.*z ! Увеличиваем z в 10 раз

c=c-1 ! Уменьшаем показатель степени

end do

p=p*z ! Значение определителя, как произведение диагональных элементов

do while(abs(p).gt.10.) ! Цикл, пока p>10

p=0.1*p ! Уменьшаем p в 10 раз

c=c+1 ! Увеличиваем показатель степени

end do

end do

write (5,*) 'Значение определителя D=p*10^c, где'

write (5,*) 'p=',p,',',' c=',c

read*

end

! Свойства определителя

! 1. A=Aт, где Aт-транспонированная матрица A

! 2. Если матрица содержит нулевую строку или столбец, то ее определитель равен нулю

! 3. Определитель, содержащий две пропорциональные строки (столбца), равен нулю

! 4. Определитель не изменяется от прибавления к какой-либо его строке (столбцу) другой его строки (столбца), умноженной на произвольное число

! AB=A*B

Тестовые примеры: ,
1   2   3   4   5   6   7   8   9   10   ...   15


написать администратору сайта