Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2014, 13:34   #1
simplermethod
 
Регистрация: 16.05.2014
Сообщений: 4
По умолчанию FORTRAN неправильно работает с матрицами!

Провел разными способами расчет обращения матрицы,
Результаты - не совпадают!
Чему верить?

Входная матрица
|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
simplermethod вне форума Ответить с цитированием
Старый 26.05.2014, 17:18   #2
simplermethod
 
Регистрация: 16.05.2014
Сообщений: 4
По умолчанию L и M - это массивы!!!

L и M - это массивы!!!
simplermethod вне форума Ответить с цитированием
Старый 26.05.2014, 17:45   #3
simplermethod
 
Регистрация: 16.05.2014
Сообщений: 4
По умолчанию

Проблема решена!

L,M - массивы!
Dimension L(N),M(N)

Матрица A подается в п/п в виде линейного массива
simplermethod вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос работает неправильно 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