2014 dxdy logo

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

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


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

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

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Как провести гладкую кривую?
Сообщение01.02.2014, 17:15 


21/07/11
105
У меня есть некоторая гистограмма, которую хочу приблизить гладкой кривой. Для иллюстрации того, что хочу сделать приведу следующую картинку (извиняюсь за качество):
Изображение

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

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

 Профиль  
                  
 
 Re: Как провести гладкую кривую?
Сообщение01.02.2014, 23:37 
Заслуженный участник
Аватара пользователя


18/01/13
12065
Казань
А у вас что, только два "столбика" в гистограмме? Впрочем, даже та линия, что на рисунке, никак не может быть квадратичной (перегиб!). Но можно взять многочлен большей степени. Или сплайны какие-нибудь.

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


26/05/12
1694
приходит весна?
Прямая, проходящая через центры верхних сторон двух столбиков будет удовлетворять вашему требованию на значение интеграла.

 Профиль  
                  
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 00:02 


21/07/11
105
provincialka, нет, вообще столбиков много. А можно подробнее про сплайны?

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

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


11/06/12
10390
стихия.вздох.мюсли
hello19 в сообщении #821747 писал(а):
А можно подробнее про сплайны?
hello19 в сообщении #821747 писал(а):
интерполировать кусочно-заданной функцией не хочется.
Увы, сплайны — кусочно-заданные функции. Но это отличный вариант; попробуйте.

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


26/05/12
1694
приходит весна?
hello19 в сообщении #821747 писал(а):
Допустим есть два высоких столбца, а между ними один маленький.
Так у вас не два столбца, а больше? Об этом сразу надо говорить.

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

 Профиль  
                  
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 00:38 


21/07/11
105
Aritaborian Меня вполне устроит кусочно-заданная, лишь интеграл не сильно от реальности отличался. Уже читаю про сплайны, но не могу найти простого алгоритма, который можно было бы заимплементить.

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

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


11/06/12
10390
стихия.вздох.мюсли
hello19, какими инструментами вы пользуетесь?

 Профиль  
                  
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 00:42 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
Допустим, Вы проводите через данный час (столбик) плавную линию, выглядит она красиво. Допустим, она возрастает. А ничего, что в действительности в первой половине часа могло быть больше объектов, чем во второй?

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


26/05/12
1694
приходит весна?
hello19 в сообщении #821767 писал(а):
нужны гладкие переходы
Какая степень гладкости требуется? Первая производная кусочно-непрерывна, вторая?

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

-- 02.02.2014, 02:11 --

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

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

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

 Профиль  
                  
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 02:25 


21/07/11
105
svv не нужно зацикливаться на том, почему выбран шаг в час и что за модель.
Сейчас задача проста - построить интерполянту. Нужно как раз, как Вы выразились, простым путем получить "красивую картинку" с условием на интеграл (пусть и не полное равенство, но хотя бы в малых пределах ).

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

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

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


26/05/12
1694
приходит весна?
hello19 в сообщении #821794 писал(а):
степень гладкости - все-равно какая
hello19 в сообщении #821794 писал(а):
простым путем получить "красивую картинку"
Я так понимаю, кусочно-линейная функция будет не достаточно красива? Тогда можно использовать кусочно-квадратичные и кусочно-кубические функции. Обычными сплайнами воспользоваться прям так сходу не получится, потому что в классическом виде эти интерполянты проходят через определённые точки, а не дают под собой заданную площадь (если я не ошибаюсь). Так что придётся их модернизировать под вашу задачу.

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

 Профиль  
                  
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 02:46 
Заслуженный участник
Аватара пользователя


15/10/08
12529
hello19 в сообщении #821794 писал(а):
простым путем получить "красивую картинку" с условием на интеграл

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

 Профиль  
                  
 
 Re: Как провести гладкую кривую?
Сообщение02.02.2014, 02:51 


21/07/11
105
Кусочно-линейная... я думал об этом, но уж как-то действительно не слишком красивая.
Кусочно-квадратичные - почему бы и нет. Кусочно-кубические - то же вариант.

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

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

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

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


15/10/08
12529

(Оффтоп)

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group