Ошибка интерполяции GSL, значения должны быть x значения должны монотонно увеличиваться

Привет, моя проблема в том, что мой набор данных монотонно увеличивается, но к концу данных он выглядит так, как это показано ниже, где некоторые из x[i-1] = x[i] как показано ниже. Это приводит к возникновению ошибки в GSL, поскольку он считает, что значения не монотонно увеличиваются. Есть ли решение, исправить или обойти эту проблему?

значения уже имеют двойную точность, этот конкретный набор данных начинается с 9.86553e-06 и заканчивается на .999999

будет ли единственным решением сместить каждое значение в цикле for?

0.999981
0.999981
0.999981
0.999982
0.999982
0.999983
0.999983
0.999983
0.999984
0.999984
0.999985
0.999985
0.999985

0

Решение

У меня была похожая проблема. Я удалил дубликаты простым оператором условия (оператор if), и это не повлияло на конечный результат (проверено MatLab). Хотя, это может быть немного специфично для проблемы.

2

Другие решения

Если вы действительно достигли пределов того, что позволяет двойная точность — ваша дельта < машинный эпсилон — тогда вы ничего не можете сделать с данными такими, какие они есть. Х данные не монотонно возрастающий. Скорее вам придется вернуться туда, где они были сгенерированы, и применить к ним какое-то преобразование, чтобы увеличить различия в хвостах. Или вы можете умножить на скалярный коэффициент, а затем интерполировать между значениями х на лету; и затем разделите фактор обратно, когда вы закончите.

Изменить: tr (x) = (x-0.5) ^ 3 может быть достаточно хорошо, чтобы разнести вещи, или tr (x) = tan ((x-0.5) * pi). Однако в последнем случае нужно остерегаться крайних значений. И, конечно, эти преобразования могут испортить анализ, который вы пытаетесь сделать, поэтому скалярный фактор может быть ответом — это должно быть преобразование, при котором ваш анализ является инвариантным, очевидно. Добавление константы также возможно.

1

По вопросам рекламы [email protected]