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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

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

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на ФОРТРАН, как общего так и конкретного характера.
Постарайтесь дать как можно больше информации о возникшей проблеме -- это в конце концов в ваших же интересах чтобы вам помогли...

прежде чем просить помощи в задании
платное решение задач

ресурсы этого топика
ссылка на подборку ресурсов, собранных посетителями этого форума
 
то, чем мы решили поделиться
ссылка на страничку программ etc собственного изготовления, которыми любезно делятся наши форумчане


если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим
 
просьба к пишущим и отвечающим все большие листинги оформлять тегом more
и отключать графические смайлики при размещении фортран-кода

Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 18:11 14-01-2007 | Исправлено: akaGM, 09:47 01-03-2020
Vostrikovskiy

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
что у тебя за гессиан, целевая функция / на два параметра задачи?  

Параметров много: просто вторую производную более, чем по двум переменным не возьмешь. Матрица получается порядка 20000*20000 (симметричная, так что достаточно работать только с половиной матрицы), а то и более. А линейная зависимость исключается сингулярным анализом (в данном случае достаточно диагонализации).

Всего записей: 403 | Зарегистр. 19-11-2008 | Отправлено: 17:20 13-06-2012 | Исправлено: Vostrikovskiy, 17:40 13-06-2012
akaGM

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

Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 17:45 13-06-2012
Vostrikovskiy

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
 
Спасибо.
 
Добавлено:
akaGM

Цитата:
да потому что не фиг ньютоном такие задачи считать...

Вы спец в теор. физике?

Всего записей: 403 | Зарегистр. 19-11-2008 | Отправлено: 17:50 13-06-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vostrikovskiy
по-моему, тут речь идёт о численных методах, а что насчёт теор-физики, то я знаю чтО такое перенормировка...
и вообще... сколько поле не квантуй...
и не надо ни на что обижаться, тут только помогают, наезжают в других местах...

Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 18:18 13-06-2012 | Исправлено: akaGM, 18:28 13-06-2012
Vostrikovskiy

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Я не обижаюсь: мною был задан конкретный вопрос по поводу алгоритмов элементарных операций повышенной точности, а Вы мне начали рассказывать про нечто другое.

Всего записей: 403 | Зарегистр. 19-11-2008 | Отправлено: 20:22 13-06-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vostrikovskiy
жаль что не так подробно...
для чего считается гессиан? оптимизация? сколько параметров?
 
и по моему глубокому убеждению теор. физика заканчивается тогда когда мы оставляем бумагу с ручкой и садимся за компьютер писать на фортране. программирование -- искусство приближённых вычислений...

Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 20:47 13-06-2012 | Исправлено: akaGM, 20:49 13-06-2012
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vostrikovskiy
Я, может, буду нести дурь, но численное определение производных от функции нескольких переменных на практике я программировал для того, чтобы получить обратную матрицу (по отношению к ковариационной), и с ее помощью найти некие оптимальные значения параметров функции, подгоняемой под эксперимент. Метод Ньютона-Рафсона, или его разновидности. У Вас параметров - аж 200 штук? Я тихо сползаю на пол в углу, задавленный сей картиной. При таком количестве параметров просто не реально получить их значения с приемлемой точностью.  
 
Кстати: Вы учли, что матрица вторых производных должна быть нормирована? Или хотя бы псевдо-нормирована: все значения должны быть одного порядка? Иначе обратная матрица (уверен, что Вы ее вычисляете) будет абсолютно не точной.

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 14:10 14-06-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPEHOMETP

Цитата:
Я, может, буду нести дурь

да нет, правильно ты говоришь
нельзя такие задачи чистым ньютоном брать...

Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 01:51 15-06-2012
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Теория скажет, что можно! Для практики в этом случае нужно как можно точнее выполнить численное дифференцирование. Классическая схема - по три точки на каждую переменную для первой-второй производных, плюс по точке на смешанную производную второго порядка, она при таком количестве параметров точно даст ужас, летящий на крыльях ночи, чисто из-за погрешностей такого примитивного дифференцирования. Если построить разумную схему с увеличенным количеством точек, возможно, и прокатит.
 
ЗЫ: А может, метод сопряженных градиентов? (а может быть, корова?)

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 14:35 15-06-2012 | Исправлено: XPEHOMETP, 14:38 15-06-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
а может быть, корова?

во-во, генетически клонированная (я серьёзно)
а вообще ASA жжот :)

Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 14:57 15-06-2012 | Исправлено: akaGM, 15:12 15-06-2012
Vostrikovskiy

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
Еще раз спасибо за ссылки: к сожалению, ничего нового по сравнению с основополагающей статьей Деккера 1971 года не придумали, так что запрограмированный мною в свое время алгоритм для extended-extended (т.е. число представлено двумя числами extended - мне точности double_size:128 не хватает) остается в силе.
 
P.S.
кого интересует эта тема, могут скачать в инете довольно объемистую книженцию 2009 года Handbook of Floating-Point Arithmetic

Всего записей: 403 | Зарегистр. 19-11-2008 | Отправлено: 13:05 16-06-2012 | Исправлено: Vostrikovskiy, 13:07 16-06-2012
sergsh_sergsh

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

Цитата:
 
terminat0r:
 а что дальше предполагается делать с рисунком в фортране?  
я бы не заморачивался на вашем месте с фортраном генерируя интерфейсы к функциям с libtiff.h а нaписал бы на C  необходимую функцию которая считывает файл в массив а уже потом используя interoperability с С передал бы этот массив в фортран.  

 
Нужно прочитать файл TIFF RGB , на 14.5 mpix и посчитать локальную корреляцию между пикселами R, G  и  B,  с шагом от 3 до 30 по всему массиву. Массив получается 4500*3500*3, почти 47 000 000  
В Matlab от читается на раз. А считается потом долго.
 
Вот и хотел посчитать фортраном, т.к. таких массивов 4500*3500*3 много сотен и на Matlab  их обсчет займет годы.
Но фортран не читает TIFF.  
 
Хотел передать из Matlab  бинарным файлом. Тоже не получается, форматы бинарного файла в фортране и в Matlab  сильно разные. Свои они читают , а чужие не хотят никак.
 
Поэтому пока путь такой - сделать параллельный расчет в Matlab,   используя   PARFOR и pmode.
 
Готовой функции чтения TIFF  на С я не нашел, сам пока написать не могу ...  
 

Всего записей: 31 | Зарегистр. 09-01-2012 | Отправлено: 13:30 22-06-2012
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sergsh_sergsh
Раз уж вы работаете с Matlab и знаете Fortran то Matlab Compiler вам в руки, пишете функцию на фортране, подключаете и радуетесь полученному результату

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 13:55 22-06-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sergsh_sergsh

Цитата:
Хотел передать из Matlab бинарным файлом

А в чём несовместимость-то?
И ещё - обязательно бинарным? Может, текстовым попробовать - там файл не более 200Мб получится при 8 бит на канал - не намного больше, чем бинарник...

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 15:53 22-06-2012
sergsh_sergsh

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

Цитата:
 
FuzzyLogic
Раз уж вы работаете с Matlab и знаете Fortran то Matlab Compiler вам в руки, пишете функцию на фортране, подключаете и радуетесь полученному результату

 
Спасибо за совет, но Matlab Compiler вроде бы только для C  программ ?
 
Если знаете как им компилить фортран - напишите пример строки вызова компилятора в терминале ?
 
У меня не подключается компилятор фортрана к Matlab Compiler, хотя gfortran установлен и работает.
 
 
 
Добавлено:
 

Цитата:
А в чём несовместимость-то?  
И ещё - обязательно бинарным? Может, текстовым попробовать - там файл не более 200Мб получится при 8 бит на канал - не намного больше, чем бинарник...

 
Если бы я знал в чем несовместимость то возможно уже передал бы массив в бинарном виде.
100 чисел double можно записать в Matlab -   и прочитать тоже можно.
А вот фортран при чтении такого файла говорит что достигнут конец файла, при этом не читает ни одного числа.
А когда я 100 чисел double пишу в бинарник из фортрана - то могу потом и прочитать их же.
В HEX  редакторе видно что файлы имеют разную внутреннюю структуру, хотя записаны одни и те же 100 чисел.  
 
Если передавать текстовым файлом - у меня получается при записи 47 000 000 чисел файл на 2,5 Гб. То есть текстовым не годится.

Всего записей: 31 | Зарегистр. 09-01-2012 | Отправлено: 17:22 22-06-2012
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sergsh_sergsh

Цитата:
У меня не подключается компилятор фортрана к Matlab Compiler, хотя gfortran установлен и работает.  

Поддерживает только Intel
 
А ваша "проблема совместимости" решается одним запросом в гугле.
Ну раз уж вы вроде как новичок то вот....

Код:
 
size=3;
A=magic(size)+0.5;
display(A);
 
fid=fopen('mytest.mat','wb');
fwrite(fid,size,'int32');
fwrite(fid,A,'float32');
fclose(fid);
 


Код:
 
program readnum                                                                                                                        
                                                                                                                                       
  implicit none                                                                                                                        
                                                                                                                                       
  integer*4 :: size                                                                                                                    
  real*4,dimension(3,3) :: A                                                                                                                                                                                                                                        
 
  open(unit=100,file='mytest.mat',form='binary');                                                                                      
  read(100) size                                                                                                                        
  read(100) A                                                                                                                          
  close(unit=100)                                                                                                                      
                                                                                                                                       
  print *,'Size=',size                                                                                                                  
  print *,'A=',A                                                                                                                        
                                                                                                                                       
end program readnum  
 

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 21:04 22-06-2012 | Исправлено: FuzzyLogic, 21:05 22-06-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sergsh_sergsh

Цитата:
у меня получается при записи 47 000 000 чисел файл на 2,5 Гб

А потому что в матлабе перед записью в файл надо множить компоненты RGB-матрицы на 255, и руками привести к целочисленному типу. Тогда получится (при 8 бит/канал) как раз 180Мб - проверял.
 
Или же сделать как FuzzyLogic тебе подсказал.

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 21:09 22-06-2012 | Исправлено: dimitriy7, 21:12 22-06-2012
sergsh_sergsh

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

Цитата:
Ну раз уж вы вроде как новичок то вот....  
 
Код:
 
size=3;  
A=magic(size)+0.5;  
display(A);  
 
fid=fopen('mytest.mat','wb');  
fwrite(fid,size,'int32');  
fwrite(fid,A,'float32');  
fclose(fid);  
 
 
 
Код:
 
program readnum                                                                                                                          
                                                                                                                                         
  implicit none                                                                                                                          
                                                                                                                                         
  integer*4 :: size                                                                                                                      
  real*4,dimension(3,3) :: A                                                                                                                                                                                                                                          
 
  open(unit=100,file='mytest.mat',form='binary');                                                                                        
  read(100) size                                                                                                                        
  read(100) A                                                                                                                            
  close(unit=100)                                                                                                                        
                                                                                                                                         
  print *,'Size=',size                                                                                                                  
  print *,'A=',A                                                                                                                        
                                                                                                                                         
end program readnum  
 

 
 
Спасибо !!!!!!!!!!!!!
Жалко тут нельзя плюсы ставить, я бы вам поставил 100 штук !
в Гугле я искал долго, нашел несколько примеров и ни один у меня не заработал
 
Ваш фортран код заработал на Intel
 
а на gfortran написал ошибку
ошибка: FORM specifier in OPEN statement at (1) has invalid value 'binary'
но если сделать так :
   open(unit=100,file='mytest.mat',form='unformatted', access='stream')  
то и в GFORTRAN все читается
 
Intel Fortran  у меня стоит, но Matlab его не видит.
Его переменные я запускаю "локально" : >source /opt/intel/bin/compilervars.sh intel64
 и их Matlab видимо не находит
можно ли их как то указать явно (глобально) ?

Всего записей: 31 | Зарегистр. 09-01-2012 | Отправлено: 22:35 22-06-2012 | Исправлено: sergsh_sergsh, 23:38 22-06-2012
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sergsh_sergsh
Угу, я тут в путешествиях, компилятора под рукой не было, написал как помнил, хорошо что вообще скомпилировалось
Про гугл, я имел в виду что чуть чуть почитав вы сразу поймёте в чем несовместимость, фортран по умолчанию пишет данные "записями" и кроме самих данных там лежит информация о длине, итд. Кстати, учтите что писать читать надо на одинаковой архитектуре (скажем интелы), иначе бинарники могут и отличаться (big/little endian).
 
IFC+Matlab могу посмотреть через недельку когда будет какой-нить терпимый интернет, чтоб подцепиться к какому-нить рабочему компьютеру, я с ним уже лет *дцать не возился.
Единственное что бросается в глаза это "source ... .sh", по идее должно быть .csh если вы в tcsh сидите. Но думаю там надо ещё чего-нить в matlab'e покрутить.

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 07:44 23-06-2012
Vostrikovskiy

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sergsh_sergsh

Цитата:
Но фортран не читает TIFF.

А что мешает преобразовать TIFF в один из примитивных форматов, в которых изображение хранится в виде двухмерного (одномерного) массива, и потом обращаться к этому массиву напрямую из фортрана?

Всего записей: 403 | Зарегистр. 19-11-2008 | Отправлено: 09:46 23-06-2012 | Исправлено: Vostrikovskiy, 09:47 23-06-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

Компьютерный форум 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