2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 Как провести гладкую кривую?
Сообщение01.02.2014, 17:15 
У меня есть некоторая гистограмма, которую хочу приблизить гладкой кривой. Для иллюстрации того, что хочу сделать приведу следующую картинку (извиняюсь за качество):
Изображение

Нужно провести эту кривую так, чтобы интеграл от нее был хотя бы приблизительно равен интегралу столбца. Поясню: Интеграл столбца от середины отрезка [c;d] до точки d равен $= b*\frac{d-c}{2}$
Кривая на этом же отрезке должна быть хотя бы приблизительно равна этому значению.

Как можно провести эту кривую?
Думал провести что-то типа квадратичной функции... Условия на равенство интеграла явно недостаточно

 
 
 
 Re: Как провести гладкую кривую?
Сообщение01.02.2014, 23:37 
Аватара пользователя
А у вас что, только два "столбика" в гистограмме? Впрочем, даже та линия, что на рисунке, никак не может быть квадратичной (перегиб!). Но можно взять многочлен большей степени. Или сплайны какие-нибудь.

 
 
 
 Re: Как провести гладкую кривую?
Сообщение01.02.2014, 23:45 
Аватара пользователя
Прямая, проходящая через центры верхних сторон двух столбиков будет удовлетворять вашему требованию на значение интеграла.

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 00:02 
provincialka, нет, вообще столбиков много. А можно подробнее про сплайны?

B@R5uk, интерполировать кусочно-заданной функцией не хочется. Да и потом, с чего вдруг интеграл должен сойтись?
Допустим есть два высоких столбца, а между ними один маленький. Тогда интеграл от кусочно-заданной функции будет явно больше.

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 00:10 
Аватара пользователя
hello19 в сообщении #821747 писал(а):
А можно подробнее про сплайны?
hello19 в сообщении #821747 писал(а):
интерполировать кусочно-заданной функцией не хочется.
Увы, сплайны — кусочно-заданные функции. Но это отличный вариант; попробуйте.

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 00:26 
Аватара пользователя
hello19 в сообщении #821747 писал(а):
Допустим есть два высоких столбца, а между ними один маленький.
Так у вас не два столбца, а больше? Об этом сразу надо говорить.

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

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 00:38 
Aritaborian Меня вполне устроит кусочно-заданная, лишь интеграл не сильно от реальности отличался. Уже читаю про сплайны, но не могу найти простого алгоритма, который можно было бы заимплементить.

B@R5uk, гистограмма - это распределение некоторых объектов во времени.
Ширина столбца - это один час. Высота столбца - количество объектов за этот час.
Мне же нужно уйти от почасового распределения к поминутному.
Просто "разбить" почасовой столбец равномерно на 60 минут не вариант - нужны гладкие переходы между часами.

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 00:40 
Аватара пользователя
hello19, какими инструментами вы пользуетесь?

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 00:42 
Аватара пользователя
Допустим, Вы проводите через данный час (столбик) плавную линию, выглядит она красиво. Допустим, она возрастает. А ничего, что в действительности в первой половине часа могло быть больше объектов, чем во второй?

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 01:05 
Аватара пользователя
hello19 в сообщении #821767 писал(а):
нужны гладкие переходы
Какая степень гладкости требуется? Первая производная кусочно-непрерывна, вторая?

И ещё, вы же в курсе, что аппроксимировать одни и те же данные можно множеством способов. И каждый будет удовлетворять вашим требованиям.

-- 02.02.2014, 02:11 --

svv в сообщении #821771 писал(а):
А ничего, что в действительности в первой половине часа могло быть больше объектов, чем во второй?
Кстати, тонкий вопрос. С одной стороны, если распределение событий во времени более-менее "хорошее", то соседние столбики будут коррелировать, и то, что вы описали, не случиться.

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

Поэтому, ещё раз повторяю вопрос: есть ли какая-то модель, описывающая то, как изменяется частота событий во времени? Или же требуется самым простым путём получить красивую картинку?

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 02:25 
svv не нужно зацикливаться на том, почему выбран шаг в час и что за модель.
Сейчас задача проста - построить интерполянту. Нужно как раз, как Вы выразились, простым путем получить "красивую картинку" с условием на интеграл (пусть и не полное равенство, но хотя бы в малых пределах ).

P.S. Если в первой половине часа (т.е. в левой половине столбца) и оказалось меньше объектов, чем во второй, то это значит, что соседний столбец слева выше текущего. Т.е. получается, что тренд убывающий.
Еще раз повторяю, что, хотелось бы несильно отбиваться от интеграла.

B@R5uk, степень гладкости - все-равно какая. Нужно чтобы алгоритм был не слишком сложным, чтобы было легко написать код (решать огромные слу для поиска коэффициентов полинома не стоит).
Если есть способ приблизить

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 02:39 
Аватара пользователя
hello19 в сообщении #821794 писал(а):
степень гладкости - все-равно какая
hello19 в сообщении #821794 писал(а):
простым путем получить "красивую картинку"
Я так понимаю, кусочно-линейная функция будет не достаточно красива? Тогда можно использовать кусочно-квадратичные и кусочно-кубические функции. Обычными сплайнами воспользоваться прям так сходу не получится, потому что в классическом виде эти интерполянты проходят через определённые точки, а не дают под собой заданную площадь (если я не ошибаюсь). Так что придётся их модернизировать под вашу задачу.

Хотя я бы на вашем месте подгонял не интерполянту под данные, а модель под данные. Это и полезнее, и нагляднее, и осмысленнее.

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 02:46 
Аватара пользователя
hello19 в сообщении #821794 писал(а):
простым путем получить "красивую картинку" с условием на интеграл

Ну, это просто. Берём произвольную функцию, вычисляем площадь под ней, растягиваем в такое число раз, чтобы площадь стала в точности равна заказанной, наслаждаемся.

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 02:51 
Кусочно-линейная... я думал об этом, но уж как-то действительно не слишком красивая.
Кусочно-квадратичные - почему бы и нет. Кусочно-кубические - то же вариант.

Как-то думал провести кусочно-квадратичную вот так (еще раз извиняюсь за художество):
Изображение
Думал о равенстве интерполянты функции в середине столбца ($ \frac{в-с}{2} ;b $) и в середине границы столбца ($ d ; \frac{в}{2} $)
Но это дает 2 уравнения, а неизвестных 3...

Можно ли как-то проще провести кусочно-квадратичные?

Хочется, чтобы была простая формула вычисления всех коэффициентов, чтобы реализовать простой код. Как-то попутно высчитывать интеграл не хочется

 
 
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 02:54 
Аватара пользователя

(Оффтоп)

Поскольку ТС сам не понимает чего он хочет, предрекаю теме более 30 страниц.

 
 
 [ Сообщений: 22 ]  На страницу 1, 2  След.


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