Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 19, 2007 19:59:42

gen
От:
Зарегистрирован: 2007-02-19
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

какой-то глупый косяк

вообщем вот исходник:

# -*- 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

Пожалуста подскажите где я не прав(если это так), а то я уже начинаю сомневаться в познании циклов и вообще в программировании



Офлайн

#2 Фев. 19, 2007 20:13:13

Mkdir
Зарегистрирован: 2006-06-30
Сообщения: 211
Репутация: +  0  -
Профиль   Отправить e-mail  

какой-то глупый косяк

А вы попробуйте на бумаге расписать кажду итерацию ;)
Все абсолютно верно выдаёт python.

В первой итерации temp = 22.0, а затем выражение gamma*(temp-ts)*deltat всегда равно 0.0.
Получается, что в остальных итерациях цикла, из temp вычитается 0.



Офлайн

#3 Фев. 19, 2007 20:18:10

Mkdir
Зарегистрирован: 2006-06-30
Сообщения: 211
Репутация: +  0  -
Профиль   Отправить e-mail  

какой-то глупый косяк

Где нелепая чушь? Давайте посчитаем.

Первая итерация цикла
а) 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)

Офлайн

#4 Фев. 19, 2007 20:58:00

gen
От:
Зарегистрирован: 2007-02-19
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

какой-то глупый косяк

Извиняюсь ступил неподетски, спасибо большое!!! :)
- надо больше спать
P.s. Хороший дружелюбный форум буду сюда чаще заходить, жаль только пока не такой большой как для php, но думаю что все еще впереди! :)



Офлайн

#5 Фев. 19, 2007 21:09:44

Mkdir
Зарегистрирован: 2006-06-30
Сообщения: 211
Репутация: +  0  -
Профиль   Отправить e-mail  

какой-то глупый косяк

PHP-программисты - это обозлённые от багов и нехватки денеги люди с плохими нервами )))
Шучу, конечно же.



Офлайн

#6 Фев. 19, 2007 21:17:14

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

какой-то глупый косяк

gen
P.s. Хороший дружелюбный форум буду сюда чаще заходить, жаль только пока не такой большой как для php, но думаю что все еще впереди! smile
Ты туда нэ ходи, ты сюда ходи. PHP башка пападет… ;)



Офлайн

#7 Фев. 20, 2007 08:58:20

jan2ary
От:
Зарегистрирован: 2006-11-21
Сообщения: 49
Репутация: +  0  -
Профиль   Отправить e-mail  

какой-то глупый косяк

Я бы для верности деление из будущего импортировал.



Офлайн

#8 Фев. 24, 2007 18:00:57

gen
От:
Зарегистрирован: 2007-02-19
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

какой-то глупый косяк

Я просто брежу….

вот очередная АБСОЛЮТНО непонятная мне проблема:
короче вот входная матрица(у меня хранится как список списка значений-короче двумерный массив):

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


зы вообще это учебная прога, которую я решил делать на питоне, чтобы в нем немного разобраться, так что не пинайте больно ;)



Офлайн

#9 Фев. 24, 2007 18:09:03

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

какой-то глупый косяк

А в чем проблема то?



Отредактировано (Фев. 24, 2007 18:09:17)

Офлайн

#10 Фев. 24, 2007 18:38:43

gen
От:
Зарегистрирован: 2007-02-19
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

какой-то глупый косяк

а проблема в том что я работаю с двумя списками-один на предъидущей итерации, а другой на данной
matrix_p = matrix делаю независимою копию
далее вычисляю новое значение
matrix = 1.0/4.0*(matrix_p + matrix_p + matrix_p + matrix_p)
поидее(после этого присваивания) matrix не равно matrix_p
а строчка print matrix_p,matrix -выдает идентичные результаты - В ЭТОМ ПРОБЛЕМА



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version