Подгонка кривой с известными интегралами Python

У меня есть некоторые данные, которые являются интегралами неизвестной кривой в ячейках. Для вашего интереса данные представляют собой энергию океанских волн, а ячейки предназначены для направлений, например. 0-15 градусов. Если возможно, я хотел бы подобрать кривую к данным, которые сохраняют интегралы в ячейках. Я попытался набросать это в блокноте карандашом, и кажется, что это возможно. Кто-нибудь знает какой-либо инструмент для подгонки кривой в Python для этого, например, в подпакете интерполяции scipy?

заранее спасибо

Редактировать:

Спасибо за помощь. Если я это сделаю, похоже, я попробую метод, рекомендованный в разделе 4 этой статьи: http://journals.ametsoc.org/doi/abs/10.1175/1520-0485%281996%29026%3C0136%3ATIOFFI%3E2.0.CO%3B2. Теоретически он в основном использует матрицы для создания «фальшивых» данных из известных интегралов между каждой полосой. При построении эти данные затем создают интерполированный линейный график, который сохраняет интегралы.


person LaurieW    schedule 05.07.2012    source источник


Ответы (4)


Это немного выходит за рамки моего бейливика, но я могу предложить взглянуть на SciKits, чтобы узнать, есть ли там что-нибудь, что может быть полезно. Другими пакетами для просмотра будут pandas и Модели статистики. Удачи!

person ChrisC    schedule 05.07.2012

Если у вас есть кривая f(x), которая является аппроксимацией интеграла другой кривой g(x), то есть f=int(g,x), то они связаны Фундаментальная теорема исчисления, то есть ваша исходная функция является производной первой кривой g = df/dx. Таким образом, вы можете использовать numpy.diff или любой из < href="http://en.wikipedia.org/wiki/Numerical_ Differentiation" rel="nofollow">методы более высокого порядка для аппроксимации df/dx для получения оценки исходной кривой.

person Hooked    schedule 05.07.2012
comment
Спасибо, но проблема в том, что у меня нет функции для кривой - это набор данных. Я должен был сделать это яснее. - person LaurieW; 26.07.2012
comment
@LaurieW Я понимаю, что вы не знаете g, но вы знаете знаете приблизительное значение g, это ваши объединенные данные. Ваша оценка интеграла, конечно, будет приблизительной, но это лучшее, что вы можете сделать! - person Hooked; 26.07.2012

Одна возможность: вычислить кумулятивную сумму объемов бункера (np.cumsum), подогнать к ней интерполирующий сплайн, а затем взять производную, чтобы получить кривую.

У сплайнов scipy есть методы для вычисления производных.

Единственное ограничение, если оно актуально в вашем случае, сплайн через накопленную сумму может быть немонотонным, а производная может быть отрицательной на некоторых интервалах.

Я предполагаю, что в литературе по сглаживанию гистограммы рассматриваются аналогичные ограничения на объем интеграла/бина, но у меня нет готовых ссылок.

person Josef    schedule 07.07.2012
comment
Я думаю, что у меня была похожая идея, но я не знаю, точно ли это сохранит объемы бинов, когда вы перерисовываете кривую. - person LaurieW; 27.07.2012

1/ гистограмма fit2

Ваш вопрос касается подбора гистограммы. Я только что просмотрел документацию для некоторого пакета Python для многовариантного анализа шаблонов, PyMVPA, и предлагается некоторая функция для подбора гистограммы. Пример здесь: ПиМВПА.

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

2/ интегральное вычисление

Как уже упоминалось, следующее решение состоит в том, чтобы аппроксимировать интегральное значение и подогнать модель к результирующему набору данных. Либо вы знаете явное выражение для производной, либо используете вычислительный вывод: конечная разность, аналитический метод.

person kiriloff    schedule 24.01.2013