gen
Фев. 19, 2007 19:59:42
вообщем вот исходник:
# -*- coding: cp1251 -*-
temp,gamma,ts,t1,t2,deltat = 83.0,1.0,22.0,0,15,1.0
final = int((t2-t1)/deltat) + 1
for i in xrange(final):
temp -= gamma*(temp-ts)*deltat
print temp
выдает какуюто-нелепую чушь!(это должен быть элементарный ДифУр)
я уже голову сломал, почему так!?
вот:
>>> 22.0
22.0
22.0
22.0
22.0
22.0
22.0
22.0
22.0
22.0
22.0
22.0
22.0
22.0
22.0
конфа(на всякий случай) Win32(Xp) Python 2.5 wxPython2.8-win32-ansi-2.8.1.1-py25 IDE: PythonWin 209.1
Пожалуста подскажите где я не прав(если это так), а то я уже начинаю сомневаться в познании циклов и вообще в программировании
Mkdir
Фев. 19, 2007 20:13:13
А вы попробуйте на бумаге расписать кажду итерацию ;)
Все абсолютно верно выдаёт python.
В первой итерации temp = 22.0, а затем выражение gamma*(temp-ts)*deltat всегда равно 0.0.
Получается, что в остальных итерациях цикла, из temp вычитается 0.
Mkdir
Фев. 19, 2007 20:18:10
Где нелепая чушь? Давайте посчитаем.
Первая итерация цикла
а) gamma*(temp-ts)*deltat = 1.0*(83.0 - 22.0)*1.0 = 61.0
б) вычитаем значение 61.0 из temp (temp в этот момент равен 83.0). 83.0 - 61.0 = 22.0
Вторая итерация цикла
a) gamma*(temp-ts)*deltat = 1.0*(22.0 - 22.0)*1.0 = 1.0*0*1.0 = 0.0
б) вычитаем значение 0.0 из temp (temp в этот момент равен 22.0). 22.0 - 0.0 = 22.0
Третья итерация цикла
a) gamma*(temp-ts)*deltat = 1.0*(22.0 - 22.0)*1.0 = 1.0*0*1.0 = 0.0
б) вычитаем значение 0.0 из temp (temp в этот момент равен 22.0). 22.0 - 0.0 = 22.0
продолжать?
gen
Фев. 19, 2007 20:58:00
Извиняюсь ступил неподетски, спасибо большое!!! :)
- надо больше спать
P.s. Хороший дружелюбный форум буду сюда чаще заходить, жаль только пока не такой большой как для php, но думаю что все еще впереди! :)
Mkdir
Фев. 19, 2007 21:09:44
PHP-программисты - это обозлённые от багов и нехватки денеги люди с плохими нервами )))
Шучу, конечно же.
slivlen
Фев. 19, 2007 21:17:14
gen
P.s. Хороший дружелюбный форум буду сюда чаще заходить, жаль только пока не такой большой как для php, но думаю что все еще впереди! smile
Ты туда нэ ходи, ты сюда ходи. PHP башка пападет… ;)
jan2ary
Фев. 20, 2007 08:58:20
Я бы для верности деление из будущего импортировал.
gen
Фев. 24, 2007 18:00:57
Я просто брежу….
вот очередная АБСОЛЮТНО непонятная мне проблема:
короче вот входная матрица(у меня хранится как список списка значений-короче двумерный массив):
10 10 10 10 10 10 10 10 10 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 4 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 10 10 10 10 10 10 10 10 10
вообщем в моей проге внешняя граница фиксирована те все крайние точки неизменны, а значение внутренних получается как
c=a
цикл в цикле:
a=0.25*(c+c+c+c)
вот исходник
import fileinput
matrix =
# parse matrix file
for line in fileinput.input('input.txt'):
matrix.append(list(float(a) for a in line.split('\n').split(' ')))
epsilon = 0.001
e = epsilon + 1
k = 0
while e>epsilon:
e = 0
print e
k += 1
matrix_p = matrix
for i in xrange(1,len(matrix_p)-1):
for j in xrange(1,len(matrix_p)-1):
matrix = 1.0/4.0*(matrix_p + matrix_p + matrix_p + matrix_p)
print matrix_p,matrix
if (matrix_p - matrix)/matrix_p > e :
e = (matrix_p - matrix)/matrix_p
print e
print matrix,k,e
raw_input('press any key')
вот файл input.txt из которого читается матрица
10 10 10 10 10 10 10 10 10 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 4 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 0 0 0 0 0 0 0 0 10
10 10 10 10 10 10 10 10 10 10
зы вообще это учебная прога, которую я решил делать на питоне, чтобы в нем немного разобраться, так что не пинайте больно ;)
Александр Кошелев
Фев. 24, 2007 18:09:03
А в чем проблема то?
gen
Фев. 24, 2007 18:38:43
а проблема в том что я работаю с двумя списками-один на предъидущей итерации, а другой на данной
matrix_p = matrix делаю независимою копию
далее вычисляю новое значение
matrix = 1.0/4.0*(matrix_p + matrix_p + matrix_p + matrix_p)
поидее(после этого присваивания) matrix не равно matrix_p
а строчка print matrix_p,matrix -выдает идентичные результаты - В ЭТОМ ПРОБЛЕМА