Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Вычисления матриц 
:(
    Опции темы
f999t1
Дата 13.11.2008, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 11.4.2006

Репутация: нет
Всего: нет



в чем может быть проблема
вычисляю значения матрицы phiQ , по следующей формуле

PhiQ(l)=(ww(l)*G(l)+bet(l)*z(l)/co(l)**2)/(0.5-G(l))

тип real*8

в одной программе вычисляются значения матриц справа
и заносятся в файл, кроме того в этой же программе вычисляется phiQ

Затем в другой проге считываются значения матриц из файла 
и вычисляется PhiQ по тойже формуле,
но результаты не совпадают (разница где-то на 1,0 но это существенно)!!!!!!!!!!

лишь при последних элементах в матрице они начинают быть близки друг у другу
в чем может быть проблема?

читает файл вроде правильно( пытался читать его во второй проге и сразу выводить 
то что прочитал, вроде все верно читает).

PM MAIL   Вверх
popovda
Дата 15.11.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 9.6.2006
Где: Москва

Репутация: нет
Всего: 6



Гм...
Во-первых, если массивы комфорны (одного размера), то почему бы не написать так
Код

PhiQ=(ww*G+bet*z/co**2)/(0.5-G),

тем самым избавившись от цикла по l, а вы наверняка вводите данные в нём.

Во-вторых, вы не указали формат записи: пишите ли вы в файл только PhiQ или что-то ещё?

Я бы лично написал бы так:
Код

open(f_id, file = fname, status = 'replace')
write(f_id,"('f20.10')") (PhiQ(i), i=1,N)
close(f_id, status = 'keep')

если надо каждый элемент обязательно вписать на каждую строку,
или так - если хотим гарантировать однообразность ввода-вывода
Код

open(f_id, file = fname, status = 'replace')
write(f_id,*) PhiQ;
close(f_id, status = 'keep')


Не забывайте, что в Фортране массивы расположены в памяти по СТОЛБЦАМ, поэтому если у вас кол-во элементов PhiQ равно, скажем, N, и кол-во переменных - векторов размера N, которые вы пишите в файл так же N, то у вас просто могут данные считаться не в том порядке

Пример:

A = (/a1, a2, a3, a4/)
B = (/b1, b2, b3, b4/)
C = (/c1, c2,  c3, c4/)
D = (/d1, d2, d3, d4/)

Цикл записи выглядит так:

Код

do i=1,4
      write(fid,"(4(f15.7,1x))") a(i),b(i),c(i),d(i)
end do


В файле будет 
Код

a1 b1 c1 d1
a2 b2 c2 d2
a3 b3 c3 d3
a4 b4 c4 d4


А если прочитаем просто
read(fid,*) a,b,c,d
То 
A = (/a1,b1,c1,d1/)
B = (/a2,b2,c2,d2/)
и т.д.

И ещё. Если вы используете нестандартный формат (не *) для записи, то и читать вы должны именно с таким форматом.
PM MAIL   Вверх
Cr@$h
Дата 19.1.2009, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



Цитата(f999t1 @  13.11.2008,  02:03 Найти цитируемый пост)
тип real*8

Запись или(и) чтение проводите не той точности.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.