Форум сайта python.su
вообщем вот исходник:
# -*- 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
Пожалуста подскажите где я не прав(если это так), а то я уже начинаю сомневаться в познании циклов и вообще в программировании
Офлайн
А вы попробуйте на бумаге расписать кажду итерацию ;)
Все абсолютно верно выдаёт python.
В первой итерации temp = 22.0, а затем выражение gamma*(temp-ts)*deltat всегда равно 0.0.
Получается, что в остальных итерациях цикла, из temp вычитается 0.
Офлайн
Где нелепая чушь? Давайте посчитаем.
Первая итерация цикла
а) 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
продолжать?
Отредактировано (Фев. 19, 2007 20:19:45)
Офлайн
Извиняюсь ступил неподетски, спасибо большое!!! :)
- надо больше спать
P.s. Хороший дружелюбный форум буду сюда чаще заходить, жаль только пока не такой большой как для php, но думаю что все еще впереди! :)
Офлайн
PHP-программисты - это обозлённые от багов и нехватки денеги люди с плохими нервами )))
Шучу, конечно же.
Офлайн
genТы туда нэ ходи, ты сюда ходи. PHP башка пападет… ;)
P.s. Хороший дружелюбный форум буду сюда чаще заходить, жаль только пока не такой большой как для php, но думаю что все еще впереди! smile
Офлайн
Я бы для верности деление из будущего импортировал.
Офлайн
Я просто брежу….
вот очередная АБСОЛЮТНО непонятная мне проблема:
короче вот входная матрица(у меня хранится как список списка значений-короче двумерный массив):
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:17)
Офлайн
а проблема в том что я работаю с двумя списками-один на предъидущей итерации, а другой на данной
matrix_p = matrix делаю независимою копию
далее вычисляю новое значение
matrix = 1.0/4.0*(matrix_p + matrix_p + matrix_p + matrix_p)
поидее(после этого присваивания) matrix не равно matrix_p
а строчка print matrix_p,matrix -выдает идентичные результаты - В ЭТОМ ПРОБЛЕМА
Офлайн