Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FORTRAN неправильно работает с матрицами!

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

simplermethod

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее... [/more]

Всего записей: 5 | Зарегистр. 16-05-2014 | Отправлено: 13:25 26-05-2014
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проверить очень просто - перемножив прямую и обратную матрицы должна получиться единичная матрица.
Путем расчета на калькуляторе у меня получился определитель 712, обратную матрицу на калькуляторе трудно )  
Смотрите свою MINV и правильность входных данных, может, у вас строки со столбцами перепутаны.

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 14:38 26-05-2014
simplermethod

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Исходники MINV взял из 2-х мест (см. ниже) - считают одинаково.
1) http://www.cyberforum.ru/fortran/thread168070.html
2) Сборник научных программ на Фортране
 
"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
 
 
Добавлено:
2) Сборник научных программ на Фортране
http://mirknig.com/knigi/programming/1181545162-sbornik-nauchnyh-programm-na-fortrane.html
 
Добавлено:
"разноцветный" код можно посмотреть здесь:  
http://dxdy.ru/topic84682.html

Всего записей: 5 | Зарегистр. 16-05-2014 | Отправлено: 14:48 26-05-2014
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот как работает твоя программа без каких-либо изменений...
 
выдача на консоль:
Код:
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  3  1  712.000
OM:  -0.093   0.090   0.042
OM:   0.090  -0.163   0.096
OM:   0.042   0.096  -0.065

 
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  3  1  712.000
OM:  -0.093   0.090   0.042
OM:   0.090  -0.163   0.096
OM:   0.042   0.096  -0.065

Всего записей: 24122 | Зарегистр. 06-12-2002 | Отправлено: 15:21 26-05-2014
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я не увидел в тексте ни одного явного указания используемого типа данных, например, REAL*8.


----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 15:22 26-05-2014
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
с именами там всё в порядке, целые -- это целые, плавающая точка вся глобально или риал или даблы...
это дурной тон, но так можно делать...
 
вообще-то такие вопосы
http://forum.ru-board.com/topic.cgi?forum=33&topic=7860#1
вот здесь обсуждаются...
 
а вообще за такой стиль написания надо руки вырывать...
в основной программе L -- единичное целое, а в п/п шлётся и обрабатывается там да ещё возвращается как массив...
 
тaк что прежде чем кричать
Цитата:
FORTRAN неправильно работает с матрицами!
посмотри на себя и на свой код...

Всего записей: 24122 | Зарегистр. 06-12-2002 | Отправлено: 15:28 26-05-2014 | Исправлено: akaGM, 16:58 26-05-2014
simplermethod

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
 
Ниче не понимаю!
кстати, в Subroutine MINV матрица похоже идет в виде одномерного массива
(в фортране по умолчанию сначала меняется строка, потом столбец).
 
Gold Member    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот как работает твоя программа без каких-либо изменений...  
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  3  1  712.000  
OM:  -0.093   0.090   0.042  
OM:   0.090  -0.163   0.096  
OM:   0.042   0.096  -0.065
 
Добавлено:
akaGM
в основной программе L -- единичное целое, а в п/п шлётся и обрабатывается там да ещё возвращается как массив...  
 
Спасиб!
Да! L и M - это массивы!!!

Всего записей: 5 | Зарегистр. 16-05-2014 | Отправлено: 17:08 26-05-2014
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     program test_f
...
      L=N
первое появление L в основной программе...
какого она типа и что из себя представляет?
 
      CALL MINV(OM,N,DD,L,M)
 
...
 
      SUBROUTINE MINV(A,N,D,L,M)
      DIMENSION A(1),L(1),M(1)
а здесь?
 
      DO 80 K=1,N
      NK=NK+N
      L(K)=K
да ещё вот так...

Всего записей: 24122 | Зарегистр. 06-12-2002 | Отправлено: 17:17 26-05-2014 | Исправлено: akaGM, 17:18 26-05-2014
simplermethod

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сидел всю ночь - видать мозги стали отключаться ((
 
Добавлено:
Проблема решена!
 
L,M - массивы!
Dimension L(N),M(N)
 
Матрица A подается в п/п в виде линейного массива

Всего записей: 5 | Зарегистр. 16-05-2014 | Отправлено: 17:19 26-05-2014
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
возьми себе за правило описывать _все_ переменные _до_ их использования...

Всего записей: 24122 | Зарегистр. 06-12-2002 | Отправлено: 20:57 26-05-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FORTRAN неправильно работает с матрицами!


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru