2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Дискретная производная
Сообщение19.03.2015, 13:32 
Вопрос к знатокам методов вычислений.

Я сделал класс на C++ для работы с матрицами, заточенный на обработку информации, поступающей от различных внешних устройств (датчики и т.п.). Если кому интересно, то вот этот класс: DMatrix.

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

Вопрос в том, как правильно считать дискретные производные.

Может, кто подскажет правильный подход, что почитать и т.д.?

 
 
 
 Re: Дискретная производная
Сообщение19.03.2015, 13:49 
oleg777 в сообщении #992430 писал(а):
то есть взятие n-ой производной получается эквивалентно взятию первой производной на менее подробной решетке, то есть с меньшей частотой дискретизации. Что-то я сомневаюсь, что это правильно.
Правильно сомневаетесь. Во-первых, уберите двойку из знаменателя (откуда она там взялась?), во-вторых, корректно раскройте скобки.

 
 
 
 Re: Дискретная производная
Сообщение19.03.2015, 14:09 
Строите интерполяционный полином по любому (лучше нечетному) количеству точек, берете его производную аналитически в центральной точке, приводите подобные/упрощаете выражение и получаете красивые формулы для производных любых порядков при любой желаемой ширине окна (количеству точек). Там получится линейная фильтрация - линейная комбинация отсчетов окна с зеркально равными или инверсными коэффициентами относительно центральной точки (при равномерной сетке, что у вас, судя по всему и есть). И да, лучше считать ее в предположении единичного интервала дискретизации, получая для этого случая числовые коэффициенты фильтра, а потом просто нормировать результат.

 
 
 
 Re: Дискретная производная
Сообщение19.03.2015, 14:32 
Pphantom в сообщении #992438 писал(а):
Правильно сомневаетесь. Во-первых, уберите двойку из знаменателя (откуда она там взялась?), во-вторых, корректно раскройте скобки.


Очень извиняюсь, ерунду написал. Вообще-то это для меня не характерно, как-то второпях навалял. Формулу стер, вопрос остался.

-- Чт мар 19, 2015 14:36:07 --

_Ivana в сообщении #992447 писал(а):
Строите интерполяционный полином по любому (лучше нечетному) количеству точек, берете его производную аналитически в центральной точке, приводите подобные/упрощаете выражение и получаете красивые формулы для производных любых порядков при любой желаемой ширине окна (количеству точек). Там получится линейная фильтрация - линейная комбинация отсчетов окна с зеркально равными или инверсными коэффициентами относительно центральной точки (при равномерной сетке, что у вас, судя по всему и есть). И да, лучше считать ее в предположении единичного интервала дискретизации, получая для этого случая числовые коэффициенты фильтра, а потом просто нормировать результат.


Спасибо за наводку, а литературу не подскажете?

И еще: а что, если не полиномами аппроксимировать, а чем-то еще? Гармониками не лучше будет? Или дробями Паде? Рассмотрю все предложения :)

 
 
 
 Re: Дискретная производная
Сообщение19.03.2015, 14:56 
oleg777 в сообщении #992455 писал(а):
И еще: а что, если не полиномами аппроксимировать, а чем-то еще? Гармониками не лучше будет? Или дробями Паде? Рассмотрю все предложения :)
Для этого нужно знать характер зависимости. В общем случае ответ только один - лучше обойтись без численного дифференцирования, если это возможно. :D

 
 
 
 Re: Дискретная производная
Сообщение19.03.2015, 19:18 
Аватара пользователя
Как писали выше, лучше обойтись, поскольку численное дифференцирование - некорректная задача. Если без этого никак, то есть такой экзотический способ (иногда помогает, особенно, если фильтр хороший придумать). $$\frac{d f(x)}{d x}=\int \frac{dk}{2\pi} \exp(-ikx)ikF(k),$$где $F(k)=\int dx \exp(ikx)f(x)$. Реализуется на быстрых преобразованиях Фурье.

 
 
 
 Re: Дискретная производная
Сообщение19.03.2015, 20:09 
Pphantom,
Большое спасибо за подробный ответ!

-- Чт мар 19, 2015 20:29:55 --

Amon,

очень интересно. У меня есть класс, который я сам написал, он здорово молотит БПФ. Поэтому хочется хоть немного поподробнее.

 
 
 
 Re: Дискретная производная
Сообщение19.03.2015, 20:55 
Аватара пользователя
_Ivana в сообщении #992447 писал(а):
любых порядков
Любых порядков лучше не надо. Начиная с третьей производной цифровые дифференциаторы становятся очень чувствительны к точности задания коэффициентов.

oleg777 в сообщении #992455 писал(а):
Гармониками не лучше будет?
Зависит всё от того, что считать лучшим. Если сравнивать АЧХ дифференцирующего фильтра с АЧХ идеального дифференциатора, то гармониками не лучше. Книги, которые вас интересуют, имеют название "Цифровая обработка сигналов" и связанные с ним названия. Вот тут http://dsp-book.narod.ru/books.html их много. Мне нравится первая в списке.

 
 
 
 Re: Дискретная производная
Сообщение15.05.2015, 18:37 
_Ivana в сообщении #992447 писал(а):
Строите интерполяционный полином по любому (лучше нечетному) количеству точек, берете его производную аналитически в центральной точке, приводите подобные/упрощаете выражение и получаете красивые формулы для производных любых порядков при любой желаемой ширине окна (количеству точек). Там получится линейная фильтрация - линейная комбинация отсчетов окна с зеркально равными или инверсными коэффициентами относительно центральной точки (при равномерной сетке, что у вас, судя по всему и есть). И да, лучше считать ее в предположении единичного интервала дискретизации, получая для этого случая числовые коэффициенты фильтра, а потом просто нормировать результат.


В некоторых случаях разумно вместо полинома строить аппроксимацию Паде. То есть отношение двух полиномов. Это хорошо, если Ваш процесс - не слишком гладкий.

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group