Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Wolfram Mathematica | Математика

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Открыть новую тему     Написать ответ в эту тему

xy



ХУдератор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Wolfram Mathematica 14

Загрузка и поиск "лекарств"в "Варезнике"


 
Здесь обсуждаем вопросы языка Mathematica и программы, которая ИМХО лучше других выполняет свою задачу и, кроме, того очень точно соответствует своему названию, хотя там не забыли и про физиков и химиков и всех остальных:)

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 16:00 01-12-2003 | Исправлено: zAlAn711, 18:21 10-01-2024
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrew10
Да, Вы правы.

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 13:14 12-04-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lesnikforum
Цитата:
Хотелось бы надеяться что с Кудой можной ускорить счёт. Постараюсь посмотреть, скажу.

Возможно, окажутся полезными только что выложенные на оффсайте материалы семинара "GPU Computation Using Mathematica and OpenCL":
http://library.wolfram.com/infocenter/Conferences/7801/
 
Добавлено:
А 4-го мая планируется бесплатный онлайновый семинар "Advanced GPU Programming Using Mathematica and CUDA":
http://www.wolfram.com/services/education/seminar.cgi

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 17:27 16-04-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У кого-нибудь есть опыт общения с их службой поддержки Wolfram.com в области ценовой политики?
Послал к ним запрос на цену пакета (т.к. цены одного из продуктов нет на сайте - только через запросы) .. и неделю тишина .. потом второй раз .. тож без результата .. хотя может на мелкий бизнес они косо смотрят.. или вопросы webMathematica делигированны в основном Японскому подразделению а у них там заботы немного более глобально-локального плана..?

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 19:57 16-04-2011
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
Спасибо за информацию про Evaluated, а также про семинар ocl — очень интересно! Как раз буду экспериментировать скоро. Никак не могу добиться, чтобы FindRoot систему двух уравнений {f(x,y)=0, g(x,y)=0} в заданных пределах по x и y решал. По сути, {x = arccot(y), y = arccot(x)}, только параметров куча, поэтому много вариантов, как они изгибаться и/или смещаться могут (саму эту систему без проблем решает, чуть более усложнённую решает, а вот ещё более усложнённую — уже нет, хотя визуально качественно ничего не изменилось). Графически всё видно, FindRoot же либо «нулевую» точку пересечения находит, либо выдаёт заданные границы по x, y. Уже все встроенные методы и приходящие в голову параметры для них опробовал. Думаю, просто равномерной сеткой покрывать, и отправлять на gpu. Сейчас смотрю, может быть есть умные методы, как отбрасывать неподходящие области.
 
vikkiv,
Мне первый раз тоже долго отвечали. Но с самим wolfram можно более гибко договориться (хотя я от вуза писал).

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 22:34 16-04-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TomasVercetti
В нестандартных случаях бывает проще самому написать реализацию алгоритма поиска корней уравнения конкретно под свою задачу, чем возиться со встроенными функциями. Но конкретно в данном случае, думаю, полезно попробовать спросить в официальной группе новостей - на такие вопросы там отвечают многие и охотно, включая самих разработчиков. Поэтому, тщательно продумав формулировку вопроса, можно получить очень грамотный ответ. Рекомендую попробовать - возможно, сэкономите время и получите красивое решение.
 
P.S. Вот рекомендации по грамотному формулированию вопросов от одного из разработчиков:
On how to write a high quality question for MathGroup.

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 09:06 18-04-2011 | Исправлено: popkov, 09:09 18-04-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть массив с данными в виде:
data =
{{{2011, 3, 29, 22, 1, 2}, 15},
 {{2011, 3, 29, 22, 11, 38}, 900},
 {{2011, 3, 29, 22, 14, 21}, 654},
 {{2011, 3, 29, 22, 18, 3}, 1},
 {{2011, 3, 29, 22, 20, 31}, 934},
 {{2011, 3, 29, 22, 30, 36}, 11},
 {{2011, 3, 29, 22, 38, 16}, 72},
 ... ... ... ...
 {{2011, 3, 29, 23, 39, 36}, 258},
 {{2011, 3, 29, 23, 51, 51}, 31},
 {{2011, 3, 29, 23, 57, 57}, 939},
 {{2011, 3, 29, 23, 58, 33}, 513},
 {{2011, 3, 29, 23, 59, 4}, 178}}
 
Т.е. первая колонна время начала события, вторая - продолжительность.
 
Как построить график из колонн где ширина колонны это диапазон например в 30 минут а высота колонны это общая продолжительность событий в диапазоне.
 
Изначально данные через DateListPlot[] выглядят так:
   
 
Нужно добавить BarChart[] или другую альтернативу (которая собстенно и ищется)
   
 
Для получения следующего результата:
   
 
Основная проблема в том что как только событий становится больше пары тысяч - стандартные методы расчёта высоты колонны суммируя группу значений попадающих в необходимый диапазон // через Total[Table[Select[data,end[_n]>=#[[1]]>=start[_n]&],{n,1,..}][[All,2]]] // занимает слишком много времени на какие-то преобразования (частично думаю из-за преобразования с оператором AbsoluteTime[{2011, 3, 29, 23, 59, 4}] для подгонки возможности параметров сравнения попадания в диапазон)
 
Я реализовывал через следующие операции:
 
Начало и первый график:
"end time";
et0d={{2011,3,30,0,0,0}};
 
"start time";
st0d={DateList[et0d[[1]]-{0,0,0,2,0,0}]};
 
"to absolute time";
dataabs=Transpose[{Table[AbsoluteTime[data[[All,1]][[n]]],{n,1,Length[data]}],data[[All,2]]}];
 
"Plot with dots";
DateListPlot[dataabs,PlotRange->{{st0d[[1]],et0d[[1]]},{0,1000}},PlotStyle->{Red},Filling->Axis,FillingStyle->Directive[Red,Opacity[0.3]]]
 
Второй график:
"------------- start of time/duration conversion to bars (via total)------------";
bar=Table[Select[dataabs,AbsoluteTime[st0d[[1]]]+((n-1)*(AbsoluteTime[et0d[[1]]]-AbsoluteTime[st0d[[1]]])/4)<=#[[1]]<=AbsoluteTime[st0d[[1]]]+(n*(AbsoluteTime[et0d[[1]]]-AbsoluteTime[st0d[[1]]])/4)&],{n,1,4}];
barb=Table[Total[bar[[n]][[All,2]]],{n,1,4}];
BarChart[barb]
"---------------end of time/duration conversion to bars (via total)--------------";
 
Реализация третьего графика:
DateListPlot[dataabs,
__PlotRange->{{st0d[[1]],et0d[[1]]},{0,1000}},
__ImageSize->{400,250},
__PlotStyle->{Red},
__Filling->Axis,
__FillingStyle->Directive[Red,Opacity[0.3]],
__Prolog->Inset[
____BarChart[barb,
____ImageSize->{400,225},
____Axes->{False,True},
____AxesOrigin->{Length[barb],0},
____AxesStyle->Directive[Blue,Opacity[0.7]],
____ChartStyle->Directive[Opacity[0.15],Blue,EdgeForm[]]
___],Scaled[{0.5,0.48}]],
__Epilog->{Inset[Style["Duration",Red,Opacity[0.7]],Scaled[{0.08,0.94}]],
_________ Inset[Style["Total time",Blue,Opacity[0.8]],Scaled[{0.865,0.95}]]
__}]
 
Какие есть альтернативы (кроме вставки PerformanceGoal->"Speed" ) быстрого получения из данных с датой и продолжительностью в что-то похожее на такой BarChart.
 
Спсб.

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 19:46 18-04-2011 | Исправлено: vikkiv, 21:10 18-04-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vikkiv
Зачем внутрь кода добавлены символы "_", делая невозможным его использование? Для копирования из Mathematica просто выделите код/ячейки, и в контекстном меню выберите Copy As -> Plain text.  
 

Цитата:
Какие есть альтернативы  

Ваш код, конечно, можно оптимизировать. Во первых, сразу переведем все даты в удобный вид с помощью AbsoluteTime, чтобы не делать этого каждый раз при обращении к данным, и упорядочим по возрастанию:
 
dataabs = Sort[{AbsoluteTime@First@#, Last@#} & /@ data]
 
Далее выбираем границы интервалов для bar chart (количество интервалов, генерируемых FindDivisions, лишь примерно равно numberOfIntervals, т.е. может отличаться):
 
numberOfIntervals = 6;
intervals =  
 FindDivisions[{dataabs[[1, 1]], Plus @@ dataabs[[-1]]},  
  numberOfIntervals]
 
Теперь разбиваем элементы на группы, соответствующие каждому интервалу:
 
inBins = BinLists[dataabs, {intervals}, {{0, Infinity}}]
 
Рассчитываем высоты для каждого интервала:
 
heights = Plus @@@ inBins[[All, 1, All, 2]]
 
Ну а теперь строим наш bar chart:
 
Graphics[{EdgeForm[Black], LightBlue,
  Table[Rectangle[{intervals[[i]], 0}, {intervals[[i + 1]],  
     heights[[i]]}], {i, 1, Length[heights]}]},  
 AspectRatio -> 1/GoldenRatio, Frame -> True,  
 FrameTicks -> {{#, Rotate[DateString@#, Pi/2]} & /@ intervals,  
   Automatic}]

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 07:13 19-04-2011 | Исправлено: popkov, 14:30 19-04-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
Спасибо, разовая замена в AbsoluteTime сократила временные затраты основной части продцедуры примерно в 5 раз (при длинах массивов выше 15'000) .. Погонял несколько вариантов реализаций через AbsoluteTiming[Table[testoperation,{n,1,50}];]
 
{AbsoluteTime@First@#,Last@#}&/@data - Докрутил по аналогии (не так хорошо знаю системый язык, больше Front-End) до - {AbsoluteTime@@First@#,Last@#}&/@data - т.к. с базы данных формат времени приходит например на запрос  
SQLExecute[connection,"SELECT CURRENT_TIMESTAMP"][[1]][[1]]
 .. отвечает: SQLDateTime[{2011, 4, 25, 4, 39, 45.}]
вместо стандартно-ожидаемого вектора: {2011, 4, 25, 4, 39, 45.}
тоже самое с получением таблиц содержащими колоны со временем .. каждое значение содержит SQLDateTime[]  
.. причём если выполнять через SQLSelect[....,"GetAsStrings"->True] , то всё равно формат времени без шманства/доп.форматирования не берётся .. (выдаёт {2011-03-29 22:11:38.0})
 
От FindDivisions пришлось отказаться заменив более простым и точным алгоритмом деления, т.к. длинна интервалов в моём случае всё-таки довольно значимая величина - на динамику объёма событий в фиксированных интервалах оценка решения опирается, а изменение длинны сильную погрешность вводит (хотя надо будет ещё додумать алгоритм как разделись каждое событие с началом и продолжительностью по разным интервалам, напр. если событие длится 2 часа а ширина опорных интервалов по 15 минут)
..
Ещё в BinLists[dataabs,{intervals},{{0, Infinity}}] последнюю безконечность пришлось менять на более определённое значение (естественно покрывающее продолжительность всех событий), т.к. почему-то в начальной форме система выкидывала ошибку:
'Interpolation::indat: "Data point {-Infinity,0} contains abscissa -Infinity, which is not a real number."'
 
BarChart на Graphics тоже придётся наверное менять ..т.к. webMathematica (MSPShow[..]) по какой-то причине нулевые концы BarChartа при совмещении с другими графическими объектами куда-то изчезают, то растягивая то сжимая график .. то-ли их алгоритм непредсказуемо себя ведёт , то-ли я что-то намудрил..
 
П.С. символы в код добавил пожертвовав удобностью копирования в пользу более визуально-различимого вида .. почему-то через оперу форум пробелы вначале строк проглатывает.
 
П.П.С. Завтра буду копать как отобразить плотность количества одновременных событий из этого-же массива данных (т.е. начало и продолжительность) в любой момент времени.. сегодня уже совсем не думается.

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 07:41 25-04-2011 | Исправлено: vikkiv, 07:57 25-04-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vikkiv

Цитата:
webMathematica по какой-то причине нулевые концы BarChartа при совмещении с другими графическими объектами куда-то проглатывает, то растягивая то сжимая график .. то-ли их алгоритм непредсказуемо себя ведёт , то-ли я что-то намудрил..
Возможно, стоит поиграть с такими опциями, как PlotRangeClipping, PlotRangePadding, ImagePadding.  

Цитата:
почему-то в начальной форме система выкидывала ошибку:
'Interpolation::indat: "Data point {-Infinity,0} contains abscissa -Infinity, which is not a real number."'  
У меня не выкидывала (Mathematica 7.01). Странная ошибка: зачем внутри BinLists могла понадобиться Interpolation?

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 07:57 25-04-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
У меня Mathematica 8.0.1 / webMathematica 3.0
Да в принципе заморачиваться оно не стоит, альтернатива / замена вполне себя адекватно ведёт... по крайней мере для этой частной задачи.

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 08:01 25-04-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
(не так хорошо знаю системый язык, больше Front-End)

Интересно! Все, что касается Front-End, плохо документировано - или совсем не документировано! У меня и у самого есть ряд вопросов по Front-End, на которые мало кто может дать ответ. Вы действительно разбираетесь в этой области?

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 08:02 25-04-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В области моего "с ней сотрудничества" - вполне достаточно (да ещё сторонние источники, форумы..), но насколько я понял по дискуссиям выше у вас весьма специфичные требования (более математические) .. так глубоко я навряд-ли когда-либо копать буду. В этом смысле Математика в принципе наверное с запасом покрывает процентов 90 нужд своих пользователей из сегмента рынка кто не совсем математик ..
Чтобы было более наглядно Я пару раз открыл файл с расширением .m и вес дальнейший интерес/любопытство тут-же пропало..

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 08:11 25-04-2011 | Исправлено: vikkiv, 08:12 25-04-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vikkiv
Например, очень мало информации о реальных возможностях использования встроенных во FrontEnd функций, даже их список я не знаю, где найти!  
Я имею в виду функции, которые можно выполнять, например, через UsingFrontEnd.
 
Также очень мало информации о том, каковы правила и алгоритмы форматирвоания выражений во FrontEnd и как это происходит. Плохо понятно, как работают опции отображения ячеек, даже такая простая опция как ShowStringCharacters и то имеет малопонятные особенности работы.
 
В отношении этих вещей вы можете прояснить что-либо?

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 08:19 25-04-2011 | Исправлено: popkov, 08:19 25-04-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хммм.. Не встречал таких нюансов.. и как простой пользователь не углублялся в то что происходит между подачей задания и получением результата.. хотя на выходе и не всегда получается ожидаемое, тогда естественно ищется альтернатива либо докручивание изпользуемого инструмента.
 
По "Front End"
Если по простому то список функций здесь "guide/AlphabeticalListing" (в строке поиска по F1)
Есть так-же кнопка "Function Navigator" где функции разбиты на группы/подгруппы по области применения (в той-же помощи естественно).
 
И у каждой функции на странице описания примеры применения, набор "Properties"/"Options".. и есть список/строка наиболее связанных/близких.. из примеров по аналогиям уже ищу приемлемую реализацию задуманного.. т.е. через то что реально/наглядно доступно..
Но я так подозреваю что уровень вопроса лежит в намного выше.. С такими нюансами вряд-ли смогу помочь.. разве что с теми 5% функций с которыми в чём-то сталкивался.
 
Может такая ситуация частично из-за ваших корней работы с Математикой - от сюда путь развития по уже наработанным схемам, я начал с 7-й когда она уже была более User Friendly для широких масс, и только через Front End с её системой помощи, и в задаче как по другому находить информацию - не особо была необходимость.
 
В моих задачах слишком низка вероятность наткнутся на проблемный нюанс работы.. Поэтому погружение во внутренние алгоритмы было-бы не очень неразумным.. даже по линии оптимизации/ускорения работы .. хотя на перспективу может оно того стоило-бы..
 
В той-же webMathematicе если на завершающих этапах прихотися использовать функции обращения во Front End - то полученный в описаниях их примеров результат вполне приемлем, далее чистое копирование примера и может подгонка уже описанных опций.
 
В общем если нет в описании то я ищу решение эксперементальным путём/перебором альтернатив нежели концентрацией на пробитие вопроса до его полного разрешения обязательно по исходному пути.

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 16:32 25-04-2011 | Исправлено: vikkiv, 16:34 25-04-2011
karl_karlsson



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vikkiv

Цитата:
(хотя надо будет ещё додумать алгоритм как разделись каждое событие с началом и продолжительностью по разным интервалам, напр. если событие длится 2 часа а ширина опорных интервалов по 15 минут)

Процесс Pab имеет представление
Pab = H(t-a)H(b-t)
H(x) - функция Хевисайда
Сума всех процессов P
P = сумма Pab
Продолжительность всех процессов на промежуток t1 - t2 получается интегрированием P на том же промежутке.

Всего записей: 2027 | Зарегистр. 14-03-2007 | Отправлено: 17:07 25-04-2011 | Исправлено: karl_karlsson, 17:08 25-04-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karl_karlsson
Ну да, теоретически то оно так, а как будет выглядеть практическая реализация на языке Mathematica следующего задания:
 
Имеется временной диапазон (например в секундах) с началом времени 1800 и окончанием в 9000.
Так-же есть поток событий в формате {время начала , продолжительность}.
{{1862,15},{2498,900},{2661,654},{2883,1},{3031,934},{3636,11},{4096,72},{4288,51},{4321,11},{4355,34},{4380,17},{4403,116},{4411,6},{4448,27},{4450,26},{4488,34},{4575,685},{4678,6},{4693,690},{4958,933},{5144,12},{6187,673},{6266,49},{6311,5},{6992,195},{7398,10},{7557,899},{7717,44},{7776,258},{8511,31},{8877,939},{8913,513},{8944,178}}
 
Цели:
1) Определить вектор суммы продолжительности событий в интервалах с шагом в 900 (секунд), т.е. для этого случая в интервалах: 1800~2700;2700~3600;3600~4500;4500~5400;5400~6300;6300~7200;7200~8100;8100~9000
(Ответ если вручную делать естественно получается {256,1883,729,1876,638,775,855,653}, остальное вне диапазона)
 
2) Построить график плотности событий в любой момент времени (т.е. кол-во активных событий в любой момент времени) на всём диапазоне (1800~9000). / (кривая, температурный график или BarChart)

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 17:25 26-04-2011 | Исправлено: vikkiv, 17:52 26-04-2011
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vikkiv

Цитата:
как будет выглядеть практическая реализация на языке Mathematica следующего задания:

 
Не уверен, что правильно понял задачу, но, кажется, Вам нужно так:

Код:
 
In[1]:= events={{1862,15},{2498,900},{2661,654},{2883,1},{3031,934},{3636,11},{4096,72},{4288,51},{4321,11},{4355,34},{4380,17},{4403,116},{4411,6},{4448,27},{4450,26},{4488,34},{4575,685},{4678,6},{4693,690},{4958,933},{5144,12},{6187,673},{6266,49},{6311,5},{6992,195},{7398,10},{7557,899},{7717,44},{7776,258},{8511,31},{8877,939},{8913,513},{8944,178}};
 
In[2]:= eventsIntervals =Interval@@({#1,#1+#2}&@@@events);
In[3]:= Table[Fold[#1-Subtract@@#2&,0,IntervalIntersection[eventsIntervals,Interval@{i,i+900}]],{i,1800,9000,900}]
 

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 22:22 26-04-2011 | Исправлено: r_green, 00:05 27-04-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
r_green
По твоему решению выше результат получается {217,900,627,847,604,755,553,510,816}
Что в сумме даёт 5829
 
А должно получится во первых 8 значений (интервалов) вместо 9-ти, а во вторых сумма продолжительности событий произошедших в пределах 1800~9000 будет 7665 а не 5829.
Т.к. события {{8877,939},{8913,513},{8944,178}} частично происходят в заданном диапазоне а частично вне его (продолжительностями {816,426,122})
 
Незнаю почему .. пока в этих функциях не разобрался.

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 01:11 27-04-2011 | Исправлено: vikkiv, 01:12 27-04-2011
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vikkiv
Извини, ошибся.
Вот так, вроде, правильно будет:

Код:
 
In[1]:= events={{1862,15},{2498,900},{2661,654},{2883,1},{3031,934},{3636,11},{4096,72},{4288,51},{4321,11},{4355,34},{4380,17},{4403,116},{4411,6},{4448,27},{4450,26},{4488,34},{4575,685},{4678,6},{4693,690},{4958,933},{5144,12},{6187,673},{6266,49},{6311,5},{6992,195},{7398,10},{7557,899},{7717,44},{7776,258},{8511,31},{8877,939},{8913,513},{8944,178}};
 
In[2]:= eventsIntervals = Interval@{#1, #1 + #2} & @@@ events;
In[3]:= Table[Fold[#1-Subtract@@#2&,0,Level[IntervalIntersection[#,Interval@{i-900,i}]&/@eventsIntervals,{2}]],{i,1800+900,9000,900}]
Out[3]= {256, 1883, 729, 1876, 638, 775, 855, 653}
 

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 01:32 27-04-2011 | Исправлено: r_green, 01:36 27-04-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
r_green
Чего-уж там извинятся на пути поиска в процессе экспериментов и не такое бывает, тем более практически под заказ это скорее из разряда благотворительности ..
 
Спасибо, работает отлично, сейчас погоняю на тайминги с массивами на десятки тысяч значений..
 
Сначала ещё думал как данные пердоставлять, в формате {start,duration} или {start,end} , в конце-концов ко второму само пришло.
 
 
Edit:
С более длинными массивами (3-4 дня 10000>n>15000, интервалы=15 мин) как и ожидалось алгоритм оказался весьма требовательным к ресурсам, если не делить поток событий (когда принадлежит интервалу а когда нет) и регистрировать событие по месту начала без переноса на соседний интервал как реализовал popkov - то временные затраты падают в 30 раз..
 
Однако на малых интервалах с малым кол-вом событий полюбому более точный инструмент, т.к. нагрузка на интервал адекватнее видна..
 
П.С. на exponenta.ru почему-то популярность Mathematica ниже по сравнению с MathCad в пропорциях 1:5 по обсуждаемости и 1:9 по просмотрам ..
 
 
Edit2:
По второму вопросу

Цитата:
2) Построить график плотности событий в любой момент времени (т.е. кол-во активных событий в любой момент времени) на всём диапазоне (1800~9000). / (кривая, температурный график или BarChart)

 
Из исходных данных:

Код:
 
data={{1862,15},{2498,900},{2661,654},{2883,1},{3031,934},{3636,11},{4096,72},{4288,51},{4321,11},{4355,34},{4380,17},{4403,116},{4411,6},{4448,27},{4450,26},{4488,34},{4575,685},{4678,6},{4693,690},{4958,933},{5144,12},{6187,673},{6266,49},{6311,5},{6992,195},{7398,10},{7557,899},{7717,44},{7776,258},{8511,31},{8877,939},{8913,513},{8944,178}};
 
time={#1,#1+#2}&@@@data;
 
lines=Table[{{time[[n]][[1]],n},{time[[n]][[2]],n}},{n,1,Length[time]}];
 
ListLinePlot[lines,PlotStyle->Directive[Blue,Thickness[0.003]],Filling->Axis,GridLines->{Table[n,{n,1800,10000,500}],None},GridLinesStyle->Directive[Orange,Dashed],PlotRange->{{1800,10000},{0,35}},AxesOrigin->{1800,0}]
 

 
получил верхний график:
   
 
И из вручную собранного вектора по верхнему графику получил нижний (синим цветом) .. сам вектор с остальным кодом здесь

Код:
 
density={{62,0},{15,1},{621,0},{163,1},{222,2},{1,3},{147,2},{284,3},{83,2},{238,1},{11,2},{318,1},{131,0},{72,1},{120,0},{33,1},{11,2},{7,1},{16,0},{25,1},{9,2},{8,1},{6,0},{8,1},{6,2},{31,1},{2,2},{25,3},{1,2},{12,1},{31,2},{3,1},{53,0},{103,1},{6,2},{9,1},{265,2},{186,3},{12,4},{104,3},{123,2},{508,1},{296,0},{79,1},{45,2},{4,3},{1,2},{544,1},{132,0},{195,1},{211,0},{10,1},{149,0},{160,1},{44,2},{15,1},{258,2},{422,1},{55,0},{31,1},{335,0},{36,1},{31,2},{178,3},{304,2},{390,1},{184,0}};
 
RectangleChart[density,ChartStyle->Darker[Blue],ChartBaseStyle->EdgeForm[None],AspectRatio->1/5]
 

 
Но как это сделать цивилизованным путём автоматически/на командах языка Mathematica для бОльшего количества данных (именно график плотности событий, или хотя-бы/особенно вектор "density") - до меня так и не доходит, интеллекта в этой области нехватает. Кто-то сможет подсказать практическое решение?

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 01:53 27-04-2011 | Исправлено: vikkiv, 05:01 27-04-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Компьютерный форум Ru.Board » Компьютеры » Программы » Wolfram Mathematica | Математика


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru