Питонический способ создания последовательности из линейной разностиPython

Программы на Python
Ответить
Anonymous
 Питонический способ создания последовательности из линейной разности

Сообщение Anonymous »

У меня есть определение последовательности
xn+1 = f( xn , xn-1)
Где x< sub>n — это x, вычисляемый во времени тн. Любое значение в последовательности определяется некоторой функцией двух предыдущих значений (и временного шага, но на данный момент оно постоянное). Я хотел бы сгенерировать первые значения N в этой последовательности, учитывая x0 и x1 .
Какой самый питонический способ сделать это?
Мой текущий подход — просто зациклиться. Я создаю массив numpy.ones правильного размера, а затем просматриваю его по индексу. Если индекс = 0 или 1, я меняю значение с 1 на x0 / x 1 соответственно. Для больших индексов я просматриваю предыдущие значения в массиве и применяю функцию.
Но мне кажется, что здесь не используются методы массива numpy, поэтому мне интересно, если есть лучший подход?
Код
В моем коде есть функция createSequence, которая принимает определение xn+1, а также граничные условия и временной шаг и выводит последовательность, соответствующую этим правилам. Обратите внимание: я новичок в Python, поэтому буду признателен за любые общие советы!
import numpy as np

def x_next(x_current,x_previous,dt):
"""Function to return the next value in the sequence
x_current and x_previous are the values at tn and tn-1 respectively
dt is the time step
"""
return (x_current - x_previous)/dt #as an example

def createSequence(x_next,x0,x1,start,stop,dt):
""" Function to create sequence based on x_next function, and boundary conditions"""
num = (stop-start)/dt
x_array = np.ones(int(num))
x_array[0] = x0
x_array[1] = x1
for index in range(len(x_array)):
if index == 0:
x_array[index] = x0
elif index == 1:
x_array[index] = x1
else:
x_current = x_array[index - 1]
x_previous = x_array[index - 2]
x_array[index] = x_next(x_current,x_previous,dt)
return x_array

print(createSequence(x_next=x_next,x0=0.1,x1=0.2,start=0,stop=20,dt=0.1))


Подробнее здесь: https://stackoverflow.com/questions/479 ... difference
Ответить

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

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

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

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

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