![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Регистрация: 16.05.2014
Сообщений: 4
|
![]()
Провел разными способами расчет обращения матрицы,
Результаты - не совпадают! Чему верить? Входная матрица |1.0|7.|11.| |7.0|3.|9.0| |11.|9.|5.0| 1. Расчет на сайте http://matrixcalc.org/ Определитель = 712.000 Обратная матрица (-1) |-0.093|00.090|00.042| |00.090|-0.163|00.096| |00.042|00.096|-0.065| 2. Расчет на Fortran п/п MINV (см. код ниже) ------------------ Определитель = 316.364 Обратная матрица (-1) |000.043|-0.153|00.644| |-00.095|00.237|-0.392| |-10.545|-0.009|00.056| !============================== ! Обращение матрицы (общего вида) ! A - входная матрица, заменяется обратной ! N - порядок матрицы A ! D - вычисляемый определитель ! L,M - рабочие векторы размерности (N) SUBROUTINE MINV(A,N,D,L,M) DIMENSION A(1),L(1),M(1) D=1.0 NK=-N DO 80 K=1,N NK=NK+N L(K)=K M(K)=K KK=NK+K BIGA=A(KK) DO 20 J=K,N IZ=N*(J-1) DO 20 I=K,N IJ=IZ+I 10 IF( ABS(BIGA)- ABS(A(IJ))) 15,20,20 15 BIGA=A(IJ) L(K)=I M(K)=J 20 CONTINUE J=L(K) IF(J-K) 35,35,25 25 KI=K-N DO 30 I=1,N KI=KI+N HOLD=-A(KI) JI=KI-K+J A(KI)=A(JI) 30 A(JI) =HOLD 35 I=M(K) IF(I-K) 45,45,38 38 JP=N*(I-1) DO 40 J=1,N JK=NK+J JI=JP+J HOLD=-A(JK) A(JK)=A(JI) 40 A(JI) =HOLD 45 IF(BIGA) 48,46,48 46 D=0.0 RETURN 48 DO 55 I=1,N IF(I-K) 50,55,50 50 IK=NK+I A(IK)=A(IK)/(-BIGA) 55 CONTINUE DO 65 I=1,N IK=NK+I HOLD=A(IK) IJ=I-N DO 65 J=1,N IJ=IJ+N IF(I-K) 60,65,60 60 IF(J-K) 62,65,62 62 KJ=IJ-I+K A(IJ)=HOLD*A(KJ)+A(IJ) 65 CONTINUE KJ=K-N DO 75 J=1,N KJ=KJ+N IF(J-K) 70,75,70 70 A(KJ)=A(KJ)/BIGA 75 CONTINUE D=D*BIGA A(KK)=1.0/BIGA 80 CONTINUE K=N 100 K=(K-1) IF(K) 150,150,105 105 I=L(K) IF(I-K) 120,120,108 108 JQ=N*(K-1) JR=N*(I-1) DO 110 J=1,N JK=JQ+J HOLD=A(JK) JI=JR+J A(JK)=-A(JI) 110 A(JI)=HOLD 120 J=M(K) IF(J-K) 100,100,125 125 KI=K-N DO 130 I=1,N KI=KI+N HOLD=A(KI) JI=KI-K+J A(KI)=-A(JI) 130 A(JI)=HOLD GO TO 100 150 RETURN END !============================== program test_f dimension OMI(9),OM(3,3) ! Cчитывание из файла "input.txt" линейного массива OMI(9) open(11,file='C:\test_f\input.txt', status='old') read(11,*)OMI close(11) ! Преобразование линейного массива OMI(9) в массив OM(3,3) II=0 DO 21 I1=1,3 DO 21 J1=1,3 II=II+1 21 OM(I1,J1)=OMI(II) N=3 L=N M=N ! Вывод в файл входных данных open(12, file='C:\test_f\output.txt') print 53,N,L,M write (12,53)N,L,M DO 22 I1=1,3 ! Печать входной матрицы OM(3,3) write (12,55)(OM(I1,J1),J1=1,3) 22 print 55,(OM(I1,J1),J1=1,3) ! Вызов п/п обращения матрицы OM(3,3) CALL MINV(OM,N,DD,L,M) ! Обращение матрицы (общего вида) print 54,N,L,M,DD write (12,54)N,L,M,DD ! Печать обратной матрицы OM(3,3) DO 23 I1=1,3 print 55,(OM(I1,J1),J1=1,3) 23 write (12,55)(OM(I1,J1),J1=1,3) close(12) 53 format ('N,L,M=',3i3) 54 format ('N,L,M,D=',3i3,f9.3) 55 format ('OM:',99f8.3) end program test_f |
![]() |
![]() |
![]() |
#2 |
Регистрация: 16.05.2014
Сообщений: 4
|
![]()
L и M - это массивы!!!
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 16.05.2014
Сообщений: 4
|
![]()
Проблема решена!
L,M - массивы! Dimension L(N),M(N) Матрица A подается в п/п в виде линейного массива |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Макрос работает неправильно | AllenJ | Microsoft Office Word | 0 | 13.04.2011 21:17 |
Неправильно работает запрос | Lokos | БД в Delphi | 7 | 15.12.2010 06:49 |
неправильно работает сортировка | Brabus | Помощь студентам | 1 | 30.05.2010 14:25 |
Неправильно работает поиск | Власов А.С. | БД в Delphi | 5 | 12.10.2009 05:59 |
Скрипт неправильно работает | aleksa76 | JavaScript, Ajax | 4 | 21.05.2008 17:47 |