Как стать автором
Обновить

Комментарии 24

Вот еще ссылка на понятные лекции по теме динамических систем.
Отличные визуализации.
Хотелось бы отметить, что динамические системы лучше моделировать не ручками через Эйлера, а с помощью специальных пакетов для дифференциальных уравнений, например deSolve. Особенно актуально для хаотичных систем. При использовании методов вроде lsoda точность вычислений получается намного выше.
Использовать R для анимации более чем глуповато. Так же R пригоден лишь для маленьких выборок и если уже приспичило там что-либо посчитать (а лучше в ROOT) выводите потоки или данные .*txt, .*dat, .*out и др. в математику или др. САВ — наглядней, красивей, удобней, пусть и «по-пиратски»!
А почему вы решили, что R годится только для маленьких выборок? В собственной практике мне приходилось гонять на R достаточно объёмные расчёты — всё полностью устраивало.
По поводу анимации — наверное, соглашусь, что пакет animation — далеко не лучшее средство для визуализации данных в мире. Но и вы согласитесь, что при проведении расчётов на R куда проще дописать пару строчек и получить анимированную gif-ку с динамикой вашей системы, чем заморачиваться с внешними инструментами. По крайней мере, для начального исследовательского этапа — точно удобней: лишних телодвижений почти не делается, всё бесплатно и кроссплатформенно. А вот для демонстрации результатов широкой публике можно посмотреть и на другие средства визуализации.
простите, а какие объёмы были обработаны? 15 Гб текстовые файлы? или массив 1000Х1000 который вы считайте большим?
Генерировал и обрабатывал гигабайтные данные в csv-формате, R меня вполне устраивал. Если у вас есть бенчмарк, который показывает, что та же Mathematica даёт принципиально превосходящие по скорости результаты, то будет интересно посмотреть.
Если вы под словом «большие» понимаете терабайтные объёмы данных, то это становится достаточно специфической задачей, не думаю, что тут корректно обсуждать общий случай: конкретные инструменты стоит выбирать исходя из ТЗ. Возможно, для подобной задачи разумно будет написать отдельное решение на C.
Впрочем, если мы говорим об изучении динамических систем (а ведь именно для их обсчёта используется R в рамках обсуждаемой статьи), то я не очень понимаю откуда возьмутся гигабайты данных. Есть, конечно, весьма специфические задачи, в которых нам нужно проводить миллионы численных экспериментов для полного описания фазового пространства системы, но это опять-таки частные случаи. А в 90% сценариев необходимо просто по системе дифференциальных уравнений построить визуализации фазовых портретов на нескольких сотнях наборов параметров. R с этими задачами прекрасно справляется.
Кстати, при наличии огромных выборок R неплохо интегрируется с Hadoop.
Вот это уже другой разговор.
Увы, под Windows нормально работать с пакетом animation не так просто. Шансы на успешный запуск увеличиваются, если воспользоваться девелоперской версией пакета:

install.packages('animation', repos = 'http://rforge.net', type = 'source')

Увы, мне на Windows 8.1 это не помогло. Вроде бы нашёл ошибку в функции im.convert, создал тикет на GitHub-е. Надеюсь, yihui в скором времени решить проблему, обычно он достаточно оперативно реагирует на подобные запросы.
Вы что сам с собой разговаривайте? И про какие специфические задачи Вы тут говорите? Давно уже мир перешёл чисто на конкретные ниши, к примеру, под каждую задачу есть тот или иной язык, который лучше её решит — всё многообразие языков. Я высказал мнение, его не навязываю, но считаю, что плодить языки, пусть и открытые, это глупости… R,S,D — да хоть весь алфавит, концептуально, они только отдельными моментами лучше уже созданных. Спрашивается, зачем дурить голову, и изобретать велосипед, если можно все решать с небольшими переработками на уже существующих.
Ок, давайте поговорим про конкретную задачу, которая обсуждается в данной статье — моделирование динамических систем. Чем вам тут не угодил R? Вы пишете:
R пригоден лишь для маленьких выборок

Возникает вопрос: зачем нам работать с большими выборками в данной конкретной нише?
считаю, что плодить языки, пусть и открытые, это глупости…
пусть и «по-пиратски»

Ох, думаю, очень многие люди с вами не согласятся. Открытость — очень важное свойство ПО, особенно в научном мире. Чем вам так не нравятся открытые вещи?
R,S,D — да хоть весь алфавит, концептуально, они только отдельными моментами лучше уже созданных. Спрашивается, зачем дурить голову, и изобретать велосипед

Полагаю, если бы R был просто очередным велосипедом, то он бы не собрал такую аудиторию фанатов.
Впрочем, мне было бы интересно послушать, какие бы языки вы оставили, а какие бы выкинули (как ненужные велосипеды, которые концептуально лучше «правильных» языков лишь отдельными моментами).
Вы меня не правильно поняли. В статье все ок, R молодец. Я имею право высказать мнение. Я высказал, то-то же в отличии от того же ROOT'a, в R параллельные компоненты коммерциализированы…
За что он такой популярный? Да просто за то, что он интуитивный, хотя о чём я? Сейчас, полагаю, модно цитировать «куски и строки» из всего текста и цепляться за них? Если уж Вы заговорили про конкретные задачи, то удосужте меня примером из небольшой выборки для решения задач прикладного характера, к которым примыкает теория динамических систем: неравновесная термодинамика, теория динамического хаоса, синергетика. Вы серьёзно уверены в том, что пока мы будем моделировать 100 атомов и экстраполировать их на большую систему, мы добьёмся прорыва? Над вами только что посмеялось число Авагадро.
Ок, я вас действительно не понял. Ваш первый комментарий выглядел как выпад в сторону R. Если бы начали речь словами вида «Да, R — хороший язык, но давайте будем помнить, что он действительно хорош не во всех задачах.», то вопросов бы не возникло.
У меня нет под рукой Windows 8.1, но на стареньком ноутбуке с Windows XP, R 3.0.3 и ImageMagick-6.8.8-8-Q16-x86-dll.exe все заработало с первого раза.
Скрытый текст
image
Спасибо за ссылки на курсы :)
Я тут извращался с тригонометрическими уравнениями, добавлял в них «память о предыдущих состояниях», в результате получилось, что одно уравнение дает интересное разнообразие картинок. Хорошо бы понимать, почему так получилось.
А какое уравнение вы рассматривали? Хотелось бы посмотреть на исходный код генерации этих картинок.
Если убрать шелуху и украшалки, то суть такая:

float x, y, cx, cy, r, f, x2, y2;
float i = 0; // шаг рисования
float drawstep = 1;
int dotsadd = 0;

void draw() {

  cx = width/2; // начальные координаты - середина экрана
  cy = height/2;

  r = 0;  
  f = 0.1;
  i = 0;

  while (i <= 2000 + dotsadd) 
  { 
    x2 = x;
    y2 = y;

    x = cx + r*cos(f*i); // рисуем точки спирали
    y = cy + r*sin(f*i);

    point(x, y);
    line(x, y, x2, y2);

    r += 0.2; // увеличиваем радиус
    i += drawstep;
    f *= 0.99 + 0.125*sin(f*j); //извращаемся
  }
}


То есть изначально это была линейная спираль.
Я это делал в Processing, если время будет, выложу код на openprocessing.org, чтобы можно было онлайн поиграться.
Пардон, слишком много «почистил». J — эквивалент времени. Тоже float. В конце каждого вызова draw, после цикла while инкрементируем j на какую-нибудь величину.
> Для описания движения воздушных потоков Эдвард Лоренц использовал систему из трех обыкновенных дифференциальных уравнений, известных теперь как уравнения Лоренца

Посмотрите это видео с академиком Арнольдом www.youtube.com/watch?v=STZcIs97GdE. Там, ближе к концу, есть забавная история, почему эти преобразования стали называться преобразованиями Лоренца (хотя их автор не до конца Лоренц)
Видео, безусловно, интересное, но, как мне кажется, там речь идет о другом Лоренце.
Ваш ответ тоже очень интересный! Никогда не знал что Лоренцов было несколько.
Спасибо, это решение, а то мне вот когда надо было — не от большого ума взял да сгенерил из R сотню файлов и потом руками в консоли imagemagick'ом собирал :) Тут хоть и тот же путь, но хотя бы более автоматизированный.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории