| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Fortran > [General] Вычисления матриц |
| Автор: f999t1 13.11.2008, 01:03 |
| в чем может быть проблема вычисляю значения матрицы phiQ , по следующей формуле PhiQ(l)=(ww(l)*G(l)+bet(l)*z(l)/co(l)**2)/(0.5-G(l)) тип real*8 в одной программе вычисляются значения матриц справа и заносятся в файл, кроме того в этой же программе вычисляется phiQ Затем в другой проге считываются значения матриц из файла и вычисляется PhiQ по тойже формуле, но результаты не совпадают (разница где-то на 1,0 но это существенно)!!!!!!!!!! лишь при последних элементах в матрице они начинают быть близки друг у другу в чем может быть проблема? читает файл вроде правильно( пытался читать его во второй проге и сразу выводить то что прочитал, вроде все верно читает). |
| Автор: popovda 15.11.2008, 13:51 | ||||||||||
| Гм... Во-первых, если массивы комфорны (одного размера), то почему бы не написать так
тем самым избавившись от цикла по l, а вы наверняка вводите данные в нём. Во-вторых, вы не указали формат записи: пишите ли вы в файл только PhiQ или что-то ещё? Я бы лично написал бы так:
если надо каждый элемент обязательно вписать на каждую строку, или так - если хотим гарантировать однообразность ввода-вывода
Не забывайте, что в Фортране массивы расположены в памяти по СТОЛБЦАМ, поэтому если у вас кол-во элементов PhiQ равно, скажем, N, и кол-во переменных - векторов размера N, которые вы пишите в файл так же N, то у вас просто могут данные считаться не в том порядке Пример: A = (/a1, a2, a3, a4/) B = (/b1, b2, b3, b4/) C = (/c1, c2, c3, c4/) D = (/d1, d2, d3, d4/) Цикл записи выглядит так:
В файле будет
А если прочитаем просто read(fid,*) a,b,c,d То A = (/a1,b1,c1,d1/) B = (/a2,b2,c2,d2/) и т.д. И ещё. Если вы используете нестандартный формат (не *) для записи, то и читать вы должны именно с таким форматом. |
| Автор: Cr@$h 19.1.2009, 07:25 |
Запись или(и) чтение проводите не той точности. |