|
|
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
Провел разными способами расчет обращения матрицы, Результаты - не совпадают! Чему верить? Входная матрица |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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 13:15 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
simpler.methodПровел разными способами расчет обращения матрицы, Результаты - не совпадают! Чему верить? Более чем лень смотреть Вашу тусклую портянку, но сходу мне помнится, что в Фортране был какой-то прикол с индексацией многомерных массивов. То ли индексы в необычном порядке, то ли что-то подобное. Посмотрите, не путаются ли у вас иксы с игреками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 14:48 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
Исходники MINV взял из 2-х мест (см. ниже) - считают одинаково. 1) http://www.cyberforum.ru/fortran/thread168070.html 2) Сборник научных программ на Фортране http://mirknig.com/knigi/programming/1181545162-sbornik-nauchnyh-programm-na-fortrane.html Вот входной файл "input.txt" 1.,7.,11.,7.,3.,9.,11.,9.,5. "output.txt" Вот так сформировалась входная матрица: N,L,M= 3 3 3 OM: 1.000 7.000 11.000 OM: 7.000 3.000 9.000 OM: 11.000 9.000 5.000 Вот результаты расчета: N,L,M,D= 3 2 1 316.364 OM: 0.043 -0.153 0.644 OM: -0.095 0.237 -0.392 OM: -10.545 -0.009 0.056 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 14:56 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
"разноцветный" код можно посмотреть здесь: http://dxdy.ru/topic84682.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 14:58 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
"Разноцветный" код можно и тут показать. Используй кнопку SRC Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 15:13 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
On 26.05.2014 15:48, softwarer wrote: > Более чем лень смотреть Вашу тусклую портянку, но сходу мне помнится, > что в Фортране был какой-то прикол с индексацией многомерных массивов. > То ли индексы в необычном порядке, то ли что-то подобное. Посмотрите, не В fortran-е матрицы храняться по строкам. Это значит, что соседние в строке элементы матрицы храняться в смежных адресах памяти. А соседные в столбце -- не в смежных. В С наоборот. Но это имеет значение только тогда, когда программа написна на смеси языков, например, C & Fortran. Если всё написано на Fortran-е, то это всё не важно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 16:15 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
Сори, MasterZivВ fortran-е матрицы храняться по строкам. В fortran-е матрицы храняться по столбцам . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 16:19 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
MasterZivВ fortran-е матрицы храняться по строкам. Точно, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 16:20 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
simpler.method Чему верить? Входная матрица |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 Себе верить, ручками посчитайте. Матрица не 10 на 10 чтобы программы писать. 712. Второе выделение-детерминант не целый, очевидно недоработка в программе, у матрицы с целыми числами, очевидно будет целый определитель. авторВ fortran-е матрицы храняться по строкам. Это значит, что соседние в строке элементы матрицы храняться в смежных адресах памяти. А соседные в столбце -- не в смежных. В С наоборот. Но это имеет значение только тогда, когда программа написна на смеси языков, например, C & Fortran. Если всё написано на Fortran-е, то это всё не важно. в любом случае определитель транспонированной матрицы равен определителю обычной. Не вникая в код, у вас вероятно проблема в алгоритме, тип данных вероятно, ибо при операция с целыми числами (если у вас нет деления, те я не говорю про обратную матрицу), вы не получили бы такой определитель. Код ужасный. Изучите лучше Си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 09:37 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
Если бы в топик зашёл настоящий Фортранщик - он бы скрежетал зубами топал ногами, прочтя только одно название. Самый математичный ЯП на котором написаны самые лучшие библиотеки для математики, оказывается "неправильно работает с матрицами"! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 12:38 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
так кто же работает неправильно - фортран или топикстартер? simpler.method http://dxdy.ru/topic84682.html Судя по тому топику, фортран-таки правильно работает с матрицами ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 09:12 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
On 27.05.2014 13:38, mayton wrote: > Самый математичный ЯП на котором написаны самые лучшие библиотеки > для математики, оказывается "неправильно работает с матрицами"! НЕправда. Самый математичный язык -- лисп. В fortran нет дробей (недесятичных). В Common Lisp -- есть. 1/3 в лиспе считается без погрешности, в отличие от fortran-а. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 12:43 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
Моё мнение заимствовано от коллег которые в старые мохнатые времена работали в НИИ и КБ с фортраном. Вики также плюсует. wikiОдно из преимуществ современного Фортрана — большое количество написанных на нём программ и библиотек подпрограмм[1]. Среди учёных, например, ходит такая присказка, что любая математическая задача уже имеет решение на Фортране, и, действительно, можно найти среди тысяч фортрановских пакетов и пакет для перемножения матриц, и пакет для решения сложных интегральных уравнений, и многие, многие другие. Ряд таких пакетов создавался на протяжении десятилетий и популярен в научной среде по сей день, например — IMSL (англ.). Большинство таких библиотек является фактически достоянием человечества: они доступны в исходных кодах, хорошо документированы, отлажены и весьма эффективны. Поэтому изменять, а тем более переписывать их на других языках программирования накладно, несмотря на то, что регулярно производятся попытки автоматического конвертирования FORTRAN-кода на современные языки программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 13:32 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
On 28.05.2014 14:32, mayton wrote: > Одно из преимуществ современного Фортрана — большое количество > написанных на нём программ и библиотек подпрограмм[1]. Среди учёных, На самом деле, это -- единственное достоинство этого замечательного языка программирования. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 18:35 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
В fortran-е матрицы храняться по строкам. Это значит, что соседние в строке элементы матрицы храняться в смежных адресах памяти. А соседные в столбце -- не в смежных. В С наоборот. Но это имеет значение только тогда, когда программа написна на смеси языков, например, C & Fortran. Если всё написано на Fortran-е, то это всё не важно. Это откель такое? Что в фортране, что в С, матрицы хранятся в том порядке в каком программист положит их в массив. Не составляет никакого труда хранить матрицу в программе написанной на фортране по строкам и по столбцам в программе написанной на С. Не стоит отождествлять математическую абстракцию "матрица" и двумерный массив в ЯП. в любом случае определитель транспонированной матрицы равен определителю обычной ТС считал определители прямой и обратной матриц. Обратная матрица и транспонированная матрица совпадают только для очень узкого класса ортогональных матриц. Не знаю как вам, мне навскидку не очевидно что прямая матрица у ТС ортогональна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 03:19 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
mikhail_nSSв любом случае определитель транспонированной матрицы равен определителю обычной ТС считал определители прямой и обратной матриц. Обратная матрица и транспонированная матрица совпадают только для очень узкого класса ортогональных матриц. Не знаю как вам, мне навскидку не очевидно что прямая матрица у ТС ортогональна. мда. я прекрасно понял что и кто имел ввиду. Внимательней читайте по какому поводу был тот комментарий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 04:31 |
|
||
|
FORTRAN неправильно работает с матрицами!
|
|||
|---|---|---|---|
|
#18+
Раз уж тема все еще жива, добавлю что в случае симметричных матриц (а в примере ТС именно симметричная), есть более эффективные алгоритмы для обращения, чем алгоритмы общего вида. Эффективные - значит более быстрые, а также с меньшей потерей точности при вычислениях. При этом, матрица записывается в виде одномерного массива (очевидно, достаточны данные от главной диагонали и ниже/выше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 11:02 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38653077&tid=1341345]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
155ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 442ms |

| 0 / 0 |
