Небольшая разница в вычислениях PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Небольшая разница в вычислениях Python

Сообщение Anonymous »

Я решаю ODE с использованием scipy.solve_ivp , где я явно определяю выходные данные. Я сохраняю массив данных и времени в файле и открываю его в другой программе для анализа. Поскольку я сохраняю только часть данных, чтобы сохранить дисковое пространство, я воссоздаю весь массив времени в коде анализа. Это, используя идентичные выражения, я в конечном итоге стал временным шагами, немного разными. Это из -за ошибок с плавающей запятой, некоторого другого артефакта или может быть способ воспроизведения временного массива? Программа, в которой я решаю ODE I Определяю массив времени следующим образом np.linspace (0, n_freq_sweep*dt, n_freq_sweep) с < /p>

Код: Выделить всё

omega_z = 422500*2*np.pi

n_dt = 1000 # Resolution (number of time-steps for one omega_z period)
dt = 2*math.pi/(n_dt*omega_z) # Time-step duration
i_init  = 2000  # number of periods
n_init  = n_dt*i_init # Number of time-steps in total

time_simu = np.linspace(0,n_init*dt,n_init)

sol = solve_ivp(derivs,
t_span = [time_simu[0], time_simu[-1]],
y0 = [2e-6,0],
method='RK45',
t_eval=time_simu,
rtol = 1e-6)

np.savez(filename,
time_simu = time_simu[limits[0]:limits[1]],
r_z  = sol.y[0][limits[0]:limits[1]],
v_z  = sol.y[1][limits[0]:limits[1]])
, где производные - это функция, вычисляющая производные r_z и v_z на следующем шаге с учетом начальных условий (). Затем я сохраняю Sol , используя np.savez , только между двумя ограничениями, которые я где -то определяю. Обратите внимание, что я показываю вам только часть программы, следующим шагом является SOLVE_IVP для 41 других периодов времени с различными условиями, это сделало бы GB данных, поэтому я так solve_ivp () + savez ( ) в a for loop. Таким образом, массив времени не завершен от 0 до конца времени SIMU. , v_z и time_simu . Мне нужно «заполнить пробелы» временного массива, чтобы иметь возможность отслеживать фазу r_z и v_z в отношении некоторой частоты. Я воссоздаю массив времени как < /p>

Код: Выделить всё

omega_z = 422500*2*math.pi
n_dt = 1000
dt = 2*math.pi/(n_dt*omega_z)

i_init = 2000
n_init = n_dt*i_init

time_secular = np.linspace(0,n_init*dt,n_init)
# time_simu is the time imported from the data array
< /code>
 Сравнение временных шагов < /h2>
Затем, если я сравню временный шаг, я получаю из массива данных (time_simu
) со временем, которое я получаю из кода анализа (

Код: Выделить всё

time_secular
) Они различаются на 2,8820544184511335E-19 .

Код: Выделить всё

print(time_simu[2] - time_simu[1])
print(time_secular[2] - time_secular[1])
< /code>
Выходы < /p>
2.366865088469783e-09
2.3668650887579883e-09
#          ^^^^^^^
обсуждение
Таким образом, разница составляет 2,8820544184511335e-19 , что слишком много, чтобы быть недостающимся точкой в ​​линпрофонах, a + или - 1 в i_init , в Linspace, или когда еще. Я выполнил операцию в том же порядке, так же, чтобы избежать разных ошибок с плавающей запятой, но, возможно, я что -то упускаю. solve_ivp не может быть причиной, потому что он выводит только x и v , но время я сохраняю его непосредственно от массива. Можно ли быть np.savez ?

Подробнее здесь: https://stackoverflow.com/questions/794 ... mputations
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Небольшая разница в вычислениях Python
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Небольшая разница в вычислениях Python
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Как сгруппировать текст по строкам, если есть небольшая разница в положении Y
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как заставить Python использовать в вычислениях более 15 десятичных знаков?
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Потеря точности с плавающей запятой в вычислениях Python numpy
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»