Python Nolds: как получить правильное значение для системы Лоренца

В настоящее время я использую следующий код для генерации серии Лоренца

def generate(x, stop=10000, s=10, b=8/3, r=28):
    def lor(v):
        return np.array([s * (v[1] - v[0]), v[0] * (r - v[2]) - v[1], v[0] * v[1] - b * v[2]])
    ret = []
    step = 0.1
    xtemp = x.copy()
    for i in range(stop):
        k1 = lor(xtemp)
        k2 = lor(xtemp + step / 2 * k1)
        k3 = lor(xtemp + step /2 * k2)
        k4 = lor(xtemp + step * k3)
        xtemp += step/6 * (k1 + 2 * k2 + 2 * k3 + k4)
        ret.append(xtemp[0])
    return np.array(ret)

но nolds.lyap_r выдает недопустимое значение (я предполагаю, что valid равен 0,91)

import nolds l = generate([1, 0, 0]) nolds.lyap_r(l, tau=0.1, emb_dim=5) 1.0030932070169234

Любая идея, где я сделал ошибку?

0 ответов

Ошибка заключается в том, что вы предполагаете, что координата x динамики Лоренца соответствует первому показателю Ляпунова. Обратите внимание на то, что вы принимаете:

ret.append(xtemp[0])

Однако первый показатель Ляпунова определяет скорость расходимости в более нестабильном направлении неустойчивого многообразия.

Как я вижу, вы оцениваете только первый показатель Ляпунова координаты x. Более того, в этом подходе для каждой координаты {x,y,z} показатель Ляпунова будет положительным, поскольку это "тривиальное" разложение не захватывает устойчивое многообразие. Тогда вы никогда не найдете 3-й показатель Ляпунова (отрицательный) таким образом.

Решение состоит в том, чтобы использовать процесс Грама-Шмидта, чтобы получить правильные направления расширения и сжатия вашей динамики и, следовательно, вычислить все показатели Ляпунова. Максимум - это именно показатель Ляпунова, который вы ищете (примерно 0,9). Тем не менее, некоторые статьи больше интересуют качественный результат (+,0,-), чем величина, так что, возможно, вы найдете какие-то другие статьи, показывающие немного другие значения для максимального показателя Ляпунова.

Примечательно, что, если мы рассматриваем сумму каждой переменной, чтобы построить новый сигнал, наибольшая экспонента Ляпунова, связанная с этим новым сигналом, достигает ожидаемого значения. Я рисую для сигнала от 8000 до 10000 точек и получаю график, приложенный к этому сообщению.

Другие вопросы по тегам