Pull to refresh

Comments 110

Автор не в курсе, что результат того же Simplify можно экспортировать в код на C?
Математика — офигенный инструмент для своих задач. Так же как и Си, Баш и т.п. — для своих.
Вроде бы, именно об этом автор и пишет, что для серьёзных задач — серьёзные инструменты, для несерьёзных — несерьёзные.
WL отличная штука для меня, нематематика, чтобы посчитать какие-нибудь простые вещи, построить графики, посчитать корреляцию.
На нём можно даже делать сумасшедшие штуки, вроде рисования кроссворда, и статья про это читается на одном дыхании — но это натягивание совы на глобус. Всё равно, что на Brainfuck писать.
Вполне логично, что для каждой задачи — подходящий инструмент.
Знаю очень серьезных дядек, которые гоняют в математике символьные расчеты. Внешне компактная система дифур после учета граничных условий и натягивания на сетку вполне может разложиться в десятки листов А4 зубодробительных формул. Причем баги класса «потеряли двойку» или «зевнули минус» диагностируются очень и очень плохо. Делать это руками — это реально месяцы кропотливого труда. Против пары дней в математике.
Собственно это и есть задача символьной алгебры. Более чем серьезная.
Потом, да это выгружается в плюсы и дальше считается уже численно.
Я когда пробовал использовать системы компьютерной алгебры для своих расчётов, у меня тоже получалось «Внешне компактная система дифур после учета граничных условий и натягивания на сетку вполне может разложиться в десятки листов А4 зубодробительных формул.». А если делать мозгом и ручками, то куда короче формулы получаются. Хотя конечно «потерянный минус» отлавливается очень плохо. Пробовал в IPython notebook с формулами работать (любые операции выполнять как замены в тексте исходной формулы), но это извращение. Нормального математического пакета так и не нашел. :(
В курсе. Для таких задач WL отлично подходит. Моя мысль в том, что на WL нельзя писать сколько-нибудь крупные программы
Такие языки не для написания программ, а для написания прототипов.
Например, если я не уверен, подойдёт ли какой-то метод для моей задачи, я по-быстрому пишу прототип в matlab, гоняю его на десятке тестовых примеров, подбираю алгоритмы и параметры. Если всё устраивает — можно переписать на C++
Всякие аппаратные (читать — реализованные в ПЛИС) алгоритмы обычно делаются так (CSR/ex Zoran — SoC для фотоаппаратов): умные дядьки делают алгоритм в Matlab, экспортируют в C, несут FPGAшникам, те курят, потому ругаются про себя, потом ругаются с умными дядьками, потом приходят к конценсусу и реализуют логику в FPGA. Некоторые алгоритмы остаются в софте на C или C++, но тут палка о двух концах: сгенерированный код мозгодробителен, часто не оптимален и сопровождать его трудно. Беда в том, что умный дядька умеет только Матлаб и если что-то заоптимиздит, мёржить новосгенерённый код — то ещё удовольствие. Когда писали код для работы с буями, там научники тоже код на Си давали, правда из какого пакета было сделано — неизвестно. Но косяки были. Как минимум две утечки и один коррапт я там исправил.

ЗЫ пост-подтверждение с, хоть и абстрактными, но примерами из жизни :)
C в данной процедуре — этап зачастую весьма излишний и вредный. Читать код/модель матлаба проще, чем с-исходник. И переносить dataflow алгоритм на FPGA намного проще без ухода к процедурному представлению.
Вполне возможно, что я где-то что-то переврал — не в той команде был. Возможно, что С-исходиник делался только для случая софтового алгоритма.
Некоторые алгоритмы остаются в софте на C или C++, но тут палка о двух концах: сгенерированный код мозгодробителен, часто не оптимален и сопровождать его трудно. Беда в том, что умный дядька умеет только Матлаб и если что-то заоптимиздит, мёржить новосгенерённый код — то ещё удовольствие.

Если задача ещё актуальна, посоветуйте умным дядькам посмотреть на Julia — язык как раз и создавался для того, чтобы писать как в Матлабе, но при этом было быстро как на C или C++.
Зато можно писать крупные программы с использованием WL, если того позволяет платформа.
Но выразили вы эту мысль совсем иначе. «Для таких задач WL отлично подходит» и «WL это просто игрушка» — есть разница?

Передергивать не следует, нужно поискать способы донести мысль до читателя, не отступая от правды. Не уподобляйтесь пропагандистам из телевизора.
Просто автор /так ничего и не понял/.

Сначала автору дали винду и рассказали (в школе? неквалифицированные учителя информатики?) про дельфи и про то, что GUI — хорошо, а CLI/TUI устарело и не круто. Он поверил и начал самоуверенно формошлёпить на дельфях под винду, считая крутым всё, что делает, не осознавая, что есть другие точки зрения (кроме своей^Wнавязанной), другие понятия, области знания, другие технологии.

А теперь поступил в институт, где ему умные дядечки показали GNU/Linux и сказали (например, «WL — игрушка», «GNU/Linux рулес фарева»), что и как нужно делать — автор даже не пытался анализировать, абсолютно так же слепо поверил и принял их точку зрения, вляпавшись в то же самое.

Автор, твоя проблема не в выбранной технологии.

Есть такое понятие: рефле́ксия. ru.wikipedia.org/wiki/%D0%A0%D0%B5%D1%84%D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D1%8F
> Solve не учитывает всякие частные случаи.
> Скажем, Solve[x a == b, x] просто выдаёт b/a, не учитывая, что a может быть равно нулю.

Видимо, автору пока не сказали, что читать документацию — это круто (тогда бы видели статью про RTFM):
reference.wolfram.com/language/ref/Reduce.html
Я знаю про Reduce. Проблема в том, что нужно отгородить «безопасные» функции, т. е. математически правильные функции, такие как Reduce, от всех остальных, типа Solve. В документации для каждой «опасной» функции должно быть написано, что она «опасная». И даже если вы пишите код, используя только «безопасные» функции, всё равно остальные недостатки WL никуда не деваются. Во-первых, отсутствие математической правильности даже без «опасных» функций, например, x/x сразу же схлопывается в 1 без всяких Simplify, т. е. не учитывается, что x может быть равно нулю (при этом 0/0 — это Indeterminate). Во-вторых, отсутствие доверия к системе в целом
«Опасные функции».
Это что-то новенькое. По поводу ваших, уже излюбленных примеров, прочтите комментарии: мой и Леонида Шифрина.
Вы по-прежнему не понимаете суть того, о чем говорите.
> Integrate не выдаёт «плюс константа» в конце результата,
> что опять-таки бессмыслено с точки зрения математики.

Снова читаем документацию: reference.wolfram.com/language/tutorial/IndefiniteIntegrals.html

> The Wolfram Language function Integrate[f,x] gives you the indefinite integral. You can think of the operation of
> indefinite integration as being an inverse of differentiation. If you take the result from Integrate[f,x], and then
> differentiate it, you always get a result that is mathematically equal to the original expression f.

> In general, however, there is a whole family of results which have the property that their derivative is f.
> Integrate[f,x] gives you an expression whose derivative is f. You can get other expressions by adding an arbitrary
> constant of integration, or indeed by adding any function that is constant except at discrete points.

> If you fill in explicit limits for your integral, any such constants of integration must cancel out. But even though the
> indefinite integral can have arbitrary constants added, it is still often very convenient to manipulate it without filling
> in the limits.

Теперь читаем Н. Н. Лузина «Интегральное исчисление», страница 6 (их там 417. Что у вас по матану?):

> Общее же выражение f(x)+C, где C — произвольное постоянное, носит название
> неопределённого интеграла от функции Ф(x). Первое слагаемое f(x) этого выражения
> называется **функциональной частью неопределённого интеграла**.

«Бессмысленно с точки зрения математики»?..

P. S. Комментарии не могу оформлять нормально из-за кармы.
Ладно, тут я согласен, убрал из статьи
Зачем отказываться от своих слов? Для вас же так критично было отсутствие константы, которая бессмысленна в работе.
Delphi я научился сам. Программировал я на нём в 2005-2009 годах, может даже раньше, может даже начиная с 2000-го. На тот момент, возможно, он действительно считался хорошей средой разработки под Windows. То, что WL — игрушка — это моё мнение, которое, разумеется, сформировалось при участии других людей
Я ничего не говорил про технологии. Про них можно говорить много, как хорошего, так и плохого.

Моя основная посылка в другом — перечитайте комментарий.
UFO just landed and posted this here
На Lisp WL вообще не похож. Может быть для знатоков гуру он похож на Lisp, но мне как-то так не казалось.

Обе альтернативы, которые вы представили в своем выводе имеют ряд недостатков.
1. Пишите сами, как это делает Богачёв
Я понимаю, это интересно. Я сам таким страдаю на Java, но… серьезно? Призывать делать свои велосипедыбиблиотеки в каждом случае, когда вам нужно решить дифур или систему, это странно.
Обычно, если пишется свое решение, то только в двух случаях. Или аналогов и правда нет (с решением систем и дифуров вряд ли), или можно было оптимизировать под задачу, потому что там дифуры специального вида.
Писать в других случаях при разработке продукта крайне странно. Собственно написанный код вызывает у вас больше доверия, чем многоразово протестированная система?

2. либо используйте профессиональные библиотеки
Неплохое решение. Особенно, если профессиональные библиотеки под ваш язык имеются. Как-то так сложилось, что большинство профессиональных математических библиотек написано на С/С++ (ну или Fortran), а остальные пишутся программистами для программистов. Профессионалы там не участвуют. Доверия к таким библиотекам (особенно потому, что я видел их наполнение) у меня еще меньше, чем к Mathematica. Про соответствие формальной математике я вообще промолчу (так как практически любой язык программирования имеет те или иные проблемы с ней).

Каждая из предложенных вами альтернатив имеет сомнительное превосходство над WL. Да, скорее всего, вы будете знать, что находится внутри (ведь ML закрытый, все плохо), но минусов в таких подходах тоже достаточно.

Это инструмент студента, но не учёного. Вряд ли, скажем, данные с большого андронного коллайдера обсчитываются на WL. WL как 1С: плохой, узкоспециализированный, коммерческий, несвободный язык.

Как-то это глупо звучит. Предположим, я ученый. Предположим, мне нужно провести многоразовое моделирование. Почему я должен выкинуть имеющейся у меня ML и начать это все кодить на каком-то языке. Оно станет быстрее в 1.001 раз? Ну да мне все равно. Оно станет точнее? Сомнительно.
WL — отличный инструмент для ученых. Для ученых, у которых нет денег на программистов, у которых нет знаний языков программирования (да и не особо они им нужны). Для ученых, которые находятся между БАКом и институтами. А таких много.
Приведенный пример с БАК вообще смешон. Это все равно, что сказать «Java/C# плохой язык, вряд ли на нем написаны поисковые движки Google».

Вы не понимаете смысл WL. Это не язык программирования для ученых, это инструмент для них. Мало кто будет использовать WL в прикладных продуктах, потому что это просто не его ниша. Он вообще не для этого разрабатывался. Но он отлично походит для теоретических изысканий, даже если в нем нет полного соответствия формальной математике.
UFO just landed and posted this here
манипулировать самими выражениями языка программирования также как и любыми другими данными.

Хм, там доступно такое? Просто пока что я только видел lambda функции, но именно таких вещей как в лиспе (что код тоже данные) я там не наблюдал. Как по мне WL — больше процедурный, с элементами функционального.
но именно таких вещей как в лиспе (что код тоже данные)

Чтоа? Из всех известных мне языков лишь в WL принцип «код — данные» выдерживается в самом прямом смысле. Если написать код Solve[x^2==0, {x}], то этот код представляет собой ещё и данные. Просто манипулировать такими данными не совсем удобно, т. к. этот код стремиться вычислиться при первой же возможности. Но если запихнуть его в Hold, то всё тип-топ:
In[12]:= Hold[Solve[x^2==0, {x}]]
                     2
Out[12]= Hold[Solve[x  == 0, {x}]]
In[13]:= Hold[Solve[x^2==0, {x}]] // FullForm
Out[13]//FullForm= Hold[Solve[Equal[Power[x, 2], 0], List[x]]]
In[15]:= Hold[Solve[x^2==0, {x}]][[1, 0]]
Out[15]= Solve
In[17]:= Hold[Solve[x^2==0, {x}]][[1, 1]]
          2
Out[17]= x  == 0
> Хм, там доступно такое? Просто пока что я только видел lambda функции, но именно таких вещей как в лиспе (что код тоже данные) я там не наблюдал. Как по мне WL — больше процедурный, с элементами функционального.

Это глубокое заблуждение. Более правильно будет сказать, что Mathematica — функциональный язык с элементами процедурного (хотя и это не совсем точно отражает суть дела).

Посмотрите мою книгу, например (более конкретно — 5 главу):

mathprogramming-intro.org/book/chapterNode6.html

или, более кратко, мой доклад двухлетней давности

www.youtube.com/watch?v=1DuAciYorbs&feature=youtu.be&t=22m25s

(ссылка указывает на начало обсуждения именно языка Mathematica / WL)
На Lisp WL вообще не похож

Они похожи внутри. В Lisp любые данные — это список. В WL, можно сказать, тоже всё — список. A[B, C] можно рассматривать как список с элементами A, B и C. Обращение к элементам этого «списка» происходит весьма естественным способом:
In[2]:= x = A[B, C]
Out[2]= A[B, C]
In[3]:= x[[0]]
Out[3]= A
In[4]:= x[[1]]
Out[4]= B

Программа на Lisp представляет собой выражение. Программа на WL — это тоже выражение, причём в подавляющем большинстве случаев программа на WL может быть записана только с помощью букв, цифр, квадратных скобок и запятых. Скажем, Solve[x^2 == 0, {x}] можно записать как Solve[Equal[Power[x, 2], 0], List[x]]. Такая форма называется полной. Посмотреть её можно так:
In[8]:= Solve[x^2 == 0, {x}] // Hold // FullForm
Out[8]//FullForm= Hold[Solve[Equal[Power[x, 2], 0], List[x]]]

Даже присвоение и последовательное выполнение являются в WL обычными выражениями (с заголовками Set и CompoundExpression), так же, как и в Lisp.

Lisp — это нечистый нетипизированный функциональный язык, как и WL.

Есть и отличия. Главное отличие, в том, что в Lisp есть принципиальная разница между программой и данными. (+ 1 2) — это программа, т. е. выражение, но не список. А (1 2) — это данные и при этом список, но не программа. (list 1 2) — это программа (выражение), результатом работы которой является список (данные) (1 2).

В WL этой разницы нет. Любая программа — это выражение, и при этом она может быть данными. {1, 2} — это программа (выражение), результатом которой является она же, т. е. данные, а именно список {1, 2} (полная форма: List[1, 2])
Спасибо большое за пояснение, стало понятно, что автор имел ввиду.
Обе альтернативы, которые вы представили в своем выводе имеют ряд недостатков.

Если нужно решить диффур, чтобы сделать домашку в универе — юзаем WL. Если нужно решить диффур, чтоб копипастнуть результат в свою реальную научную работу, опять-таки, не в курсовую, а реальную научную работу, которой будут доверять, и которую будут потом внедрять на производстве, то WL юзать нельзя. Потому что нет никакой гарантии, что результат будет правильным. Да, WL можно использовать даже в реальной научной работе, для того, чтобы просто посмотреть, как оно работает. Но полагаться на результат, выданный Mathematica, нельзя.
Особенно, если профессиональные библиотеки под ваш язык имеются

Используйте библиотеки на том языке, на котором они лучше, и вызывайте из своего языка. Это лучше, чем юзать WL.

Ещё разок: если программа на WL численно решает простой диффур, то, пожалуй, да, ей можно доверять. Если что-то сложнее — уже нельзя
Если нужно решить диффур, чтобы сделать домашку в универе — юзаем WL. Если нужно решить диффур, чтоб копипастнуть результат в свою реальную научную работу, опять-таки, не в курсовую, а реальную научную работу, которой будут доверять, и которую будут потом внедрять на производстве, то WL юзать нельзя. Потому что нет никакой гарантии, что результат будет правильным. Да, WL можно использовать даже в реальной научной работе, для того, чтобы просто посмотреть, как оно работает. Но полагаться на результат, выданный Mathematica, нельзя.

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

Приведенный вами пример неправильности WL ничего не показал, кроме того, что вы не понимаете, как он работает.
1. Возьмите тоже выражение (x^2 +x)/x и подставьте туда ноль. Что вы получите, с точки зрения формальной математики?
2. А теперь возьмите выражение x+1 и поставьте туда ноль. Результат ведь отличается?

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

Ещё разок: если программа на WL численно решает простой диффур, то, пожалуй, да, ей можно доверять. Если что-то сложнее — уже нельзя

У вас есть инструмент, которых может безошибочно решить любой диффур и ему можно доверять? Если да, то поделитесь, пожалуйста (только аналитические решения).
Если нет, то какой смысл мне переходить на другой инструмент, которому я так же не смогу полностью доверять? У него процент ошибок будет меньше (есть какая-то статистика)?
Возьмите тоже выражение (x^2 +x)/x и подставьте туда ноль. Что вы получите, с точки зрения формальной математики?


С точки зрения функционального анализа, наиболее релевантного если мы говорим о последующем интегрировании, дифференцировании или вообще ином использовании получившегося выражения в подавляющем большинстве применений там получится единица.
Никакого функционального анализа. Вот вы в WL берете и подставляете в это выражение ноль.
Почему в реальности вы начинаете делает какие-то отступления и прочее?
И как вы вообще сможете дальше применять выражение 0/0?
Потому что в реальности Вы работаете не с «выражением» а с функцией описываемой через это выражение.
И с любой разумной точки зрения эта функция в нуле превращается в единицу.

Матанализ имеет целый раздел посвященный вопросам «чему равно данное 0/0» или «inf/inf» :)
У вас свой математический анализ?
В нем целый раздел посвящен тому, чему в пределе равняются эти неопределенности.
То, о чем вы говорите, называется доопределением функции.
А тут вы просто поставляете в функцию ноль, когда в нуле она не определена. И получаете неопределенность. Что тут не так?
Об этом можно прочитать, например, тут. Написано для комплексных функций, но для рациональных есть такая же теория.
Коротко говоря, для этой функции 0 — особая точка (то есть в ней функция не определена):
image
А для этой уже нет:
image
Ох. Я не говорю про формальное определение. Я говорю про то что во всех практических смыслах указанные Вами две функции y(x) для любых целей идентичны. Вас не смущает то что соответствующий раздел матанализа называется «раскрытием неопределенностей» (en: evaluation of intederminate form)?
Вы задали программе функцию и ожидаете, что она еще за вас угадает, что с ней нужно делать?
Если для вас единственным критерием служит присутствие «формальной математики»

Нет, её присутствие нужно не всегда. Можно выделить два типа задач: численные и аналитические. Так вот, в численных задачах, мне кажется, вполне можно обойтись без формальной математики (хотя иметь её было бы здорово). В частности, Богачёв эту формальную математику не использует, и всё у него в порядке. Но вот в аналитических задачах она нужна. Т. е. если вам нужно, скажем, аналитически найти производную, упростить выражение и пр., то полагаться на результат, выданный WL, нельзя. Лучше провести преобразование вручную. WL воспользоваться, в принципе, можно, но только при условии что вы очень хорошо понимаете, что делаете. Например, используя где надо Reduce вместо Solve, как мне подсказали в ветке выше и т. д. И даже тогда нужно действовать крайне осторожно.

то вы так же не можете положится на практически любую математическую библиотеку

Таким образом, вполне можно полагаться на численные математические библиотеки

К тому же, большинство библиотек как раз построены на численных методах, а WL может решить все аналитически

То есть вы считаете, что аналитические вычисления на компьютере лучше численных? Нет, всё как раз наоборот. С численными задачами компьютер справляется хорошо (если не использовать для них WL). А вот с аналитическими всё плохо, т. к. по-настоящему доверенный аналитический результат может получиться лишь при использовании формальной математики, а формальные системы компьютерной алгебры, как я говорил, находятся в зачаточном состоянии

Приведенный вами пример неправильности WL ничего не показал, кроме того, что вы не понимаете, как он работает

В приведённом примере Solve неправильно упростил выражение. Он упростил (x^2+x)/x до x+1, хотя это верно только если x не равен нулю. В остальном, да, ответы WL в этом примере правильные

WL часто не учитывает частные случаи и решения

В численных подсчётах частные случаи действительно не важны. И WL их игнорирует, как и профессиональные библиотеки. А в случае аналитических вычислений важны, т. к. эти аналитические вычисления как раз и проводятся, чтобы учесть всё.

По поводу того, как решать диффуры: если нужно решить численно, используйте библиотеки, скажем, для C. В крайнем случае можно использовать WL, но только если ваша программа представляет собой одну строчку с одним вызовом NDSolve и соблюдены все меры предосторожности. Если нужно решить аналитически, то считайте в WL, но потом проверьте полученное решение при помощи карандаша и бумаги, ничего лучше, к сожалению, на данный момент человечество не придумало
В частности, Богачёв эту формальную математику не использует, и всё у него в порядке.

У меня уже ощущение, что ваша статья — пиар тов. Богачева.

Таким образом, вполне можно полагаться на численные математические библиотеки.

С численными задачами компьютер справляется хорошо (если не использовать для них WL).

В численных подсчётах частные случаи действительно не важны.

Вы думаете, что численные методы такие простые? И в них не может быть ошибок? О, вы так заблуждаетесь. Численные методы чаще похлеще в своей сложности аналитических и получить численное решение часто невероятно сложно, особенно с нужной точностью. Давайте я вам дам интегральное сингулярное несобственное уравнение с нелинейным ядром (этой задачей я успешно занимался продолжительное время). Очень интересно, как вы справитесь с ним в другой системе или вообще напишите весь функционал на С с нуля.

У вас какое-то поразительно однобокое и поверхностное суждение о языках, проблемах численных и аналитических вычислений. И особенно удивительное в своей слепой агрессии отношение к Wolfram Language.

Из одного примера своего собственного неумения вы раздуваете свою фантазию до космического масштаба.

Что нибудь кроме многократно рассмотренной в куче комментариев неопределенности 0/0 вы предложить можете?
Вам на этот счет уже ответили, потрудитесь почитать.

Последнее:
В приведённом примере Solve неправильно упростил выражение. Он упростил (x^2+x)/x до x+1

Solve не занимается упрощением выражений.
Роман, почти вся ценность этого поста в комментариях. :)
Да, автору конечно спасибо за возможность всем нам пообщаться.
Но только за это.
UFO just landed and posted this here
Интегральное уравнение, описывающее смещение берега трещины разрушения u:

UFO just landed and posted this here
Если вы задаете такой вопрос, вы интегральные уравнения не решали.
Из основных особенностей:
1) интеграл несобственный;
2) подынтегральная функция имеет бесконечный разрыв;
3) искомая функция u входит в подынтегральную функцию нелинейным образом (в показателе экспоненты).

Каждый из этих пунктов в отдельности делает решение сложным, а их композиция — увеличивает сложность невероятно.
UFO just landed and posted this here
«Одномерная прелесть» на самом деле двумерная. Так как рассматривается трещина в виде диска с радиальной симметрией. А задача родилась просто: дело в том, что стандартный подход в теории разрушения материалов говорит о том, что в вершине трещины бесконечное напряжение, это нефизично и получается из-за макроскопического подхода к трещине. Именно эту особенность, вслед за идеями Баренблатта, я и мой руководитель профессор Шевелев решали. Большой член по центру — это выражение силы взаимодействия между берегами трещины — на основе модификации потенциала Морзе, а эллиптический интеграл (в конце) — следствие перехода от декартовой системы координат к полярной системе.
Solve не занимается упрощением выражений

Опечатка, Simplify
Это не язык программирования для ученых, это инструмент для них. Мало кто будет использовать WL в прикладных продуктах, потому что это просто не его ниша. Он вообще не для этого разрабатывался.

Это прекрасная фраза, которой, к сожалению, противоречит маркетинг вольфрама за последние годы. :( Они же реально его как язык для продакшн продвигают.
Ну вот снизу привели примеры продакшана.
Для меня это все равно выглядит странновато, но людей устраивает и пусть.

Не очень я бы на эти примеры ориентировался. Во всех, как я понимаю, одним из основных разработчиков был Роман, который, будучи тесно связанным с Wolfram, использовал наиболее удобный для себя инструмент.

Вот интересно, сколько есть не связанных с Wolfram компаний, долго и профессионально разрабатывающих ПО, которые бы вдруг решили: всё, в новых проектах переходим на стек технологий Wolfram и заказчику в продакшн будем поставлять продукты, сделанные на WL? Не использовать его для внутренних исследований, прототипирования и отладки, а именно ставить в продакшн?
Из своего опыта могу сказать следующее: пакет кажется очень мощным, но каждый раз, когда тебе кажется, что ты знаешь, как это реализовать, ты натыкаешься на какой-нибудь подводный камень. Такое ощущение, что каждую функцию писал новый программист. И, похоже, нужно одним из них быть, чтобы всем этим полноценно пользоваться.
Если вы не писали крупных программ на Wolfram Mathematica, или не видели других крупных программ, это не значит что на WM нельзя написать «сколько-нибудь крупные программы».
UFO just landed and posted this here
Процитирую UPD:
Я, конечно, понимаю, что WL всё-таки имеет свою область применения. Он нужен для создания прототипов, для того чтобы по-быстрому найти производную и т. д., для того, чтобы провести некие расчёты там, где ошибки не критичны (скажем, при выполнении домашних заданий в вузе и написании курсовых), для того, чтобы провести некие расчёты, которые будут потом проверены другим, более надёжным способом. Мой коммент на эту тему: habrahabr.ru/post/263015/#comment_8506387.

<...>

Про кучу подробностей из моей жизни и Windows vs GNU/Linux. Я написал про GNU/Linux и т. д. не потому, что я хотел сказать, что GNU/Linux лучше Windows, а гуй лучше текстового интерфейса. И про Богачёва я написал не для того, чтобы его пропиарить. Просто я хотел немного рассказать о своей жизни, чтобы сделать мой рассказ более убедительным, чтобы было понятно, как менялись мои представления. И я не считаю, что GNU/Linux сильно превосходит Windows в техническом плане. И я понимаю, что GUI и CLI — это просто два разных интерфейса со своими применениями.

Про свободное ПО. Конкретно в случае WL его несвободность является существенным минусом, т. к. понижает доверие к полученным результатам
UFO just landed and posted this here
Немного про области, где можно применять WL и про заголовок этого поста. Мне не нравится, что есть много людей, которые серьёзно воспринимают WL. Т. е. которые воспринимают его как инструмент, который может играть главную роль в научном исследовании, или, того хуже, как язык общего назначения.

Уважаемый автор, вы наверное шутите? Из-за вашего личного не понимая продукта, неумения его использовать и вашего банального вопиющего непрофессионализма вам не нравится, что люди используют Wolfram Language? Увольте. Более слабых доводов представить себе сложно.

Людей, которые очарованы достоинствами WL (как я в своё время), и не знают, что, скажем, WL — это далеко не единственный функциональный язык программирования.

Wolfram Language не только функциональный язык программирования. Изучите уже основы. В языке Wolfram Language реализовано несколько парадигм программирования и он позволяет реализовывать и другие самостоятельно.

Которые не знают, что вообще-то есть скриптовые языки программирования (Perl, Python, Bash) и что есть функциональные, с которых этот WL содран (Lisp, Haskell, ML).

Вы историю вообще читаете: Haskell вышел в 1990, а Wolfram Language существует с 1988.
По-вашему, если используются какие-то идеи из LISP, язык содран. Ну тогда все жестко сдирают с C в своих языках и Fortran.

Так вот, чтобы раскрыть этим людям глаза, я и написал свой пост.

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

И чтобы быть максимально убедительным, я использовал кричащий заголовок («WL — игрушка»).

Прямо такие как любя желтая пресса.

Я, конечно, понимаю, что WL всё-таки имеет свою область применения.

На этом месте я обрадовался. Автор что-то понял из диалогов в комментариях.

Он нужен для создания прототипов, для того чтобы по-быстрому найти производную и т. д., для того, чтобы провести некие расчёты там, где ошибки не критичны (скажем, при выполнении домашних заданий в вузе и написании курсовых), для того, чтобы провести некие расчёты, которые будут потом проверены другим, более надёжным способом.

У вас типичное представление студента, видевшего Wolfram Language пару раз в жизни и серьезного ничего в нем не делавшего.
Оставьте ваше мнение при себе. Оно не совпадает с реальностью. Почему — извольте почитать комментарии действительных экспертов по Wolfram Language, которые есть в комментариях.

Про кучу подробностей из моей жизни и Windows vs GNU/Linux.

Про ваши мотания между языками не думаю, что кому-то очень интересно было читать, при всем уважении к вам.

Я написал про GNU/Linux и т. д. не потому, что я хотел сказать, что GNU/Linux лучше Windows, а гуй лучше текстового интерфейса. И про Богачёва я написал не для того, чтобы его пропиарить. Просто я хотел немного рассказать о своей жизни, чтобы сделать мой рассказ более убедительным, чтобы было понятно, как менялись мои представления. И я не считаю, что GNU/Linux сильно превосходит Windows в техническом плане. И я понимаю, что GUI и CLI — это просто два разных интерфейса со своими применениями.

Зачем эти оправдания? Вы хотели одного: испортить репутацию Wolfram Language. Не вышло. Пошли оправдания.

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

Свободное ПО — это миф. Несвободность в случае Wolfram Language — делает его результаты недостоверными? Ох… Хочется спросить, вы весь код GNU/Linux прочли? Все сборки знаете? Или вы такой эксперт, что дай вам любое свободное ПО, вы сразу весь его код изучите и скажите «да, ошибок нет».

Последнее. Потрудитесь ответить хотя бы раз эксперту, а не убегайте из веток каждый раз, когда я или Леонид что-то в них вам ответят. Я понимаю, что сказать вам нечего. Но за свои слова вам придется отвечать. В том числе перед всем сообществом Хабра и Wolfram.
А с Maxima у вас какой-нибудь интересный опыт есть?
Странно было не услышать от вас, что Wolfram Language «содран», якобы, с Maxima.
Автор, к сожалению вы не указали какой последней версией Wolfram Mathematica вы пользовались. Подозреваю, что очень сильно устаревшей 5-й или 7-й.

При этом вы явно практически полный дилетант в использовании Wolfram Mathematica и языка Wolfram Language, который решил написать на Хабре порочащую статью, желая получить легких лайков. Это скорее всего продиктовано юношеским максимализмом — судя по анкете на Хабре вам неполных 23 года. А в этом возрасте человек еще не может быть экспертом ни по какому вопросу, особенно делать выводы, которые, как говорилось в «Собачьем сердце», имеют «космический масштаб и космическую же глупость».

Из вашего поста следует, что все ваше обучение было сначала самостоятельным — в школе. А затем у человека, по каким-то причинам являющегося вашим, видимо, огромным авторитетом — Богачева, который не любит систему Mathematica. Почему — видимо просто потому, что в его задачах она приносит мало пользы.

Еще один важный пункт. Ссылаясь на то, что система Mathematica — коммерческий продукт, у меня есть все основания полагать, что (как минимум) в школе вы использовали ее не лицензионную версию. Если это не так — извините.

В остальном.

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

Из вашего примера про функцию Simplify следует, что вы либо не знаете Main Evaluation Loop в Mathematica, либо сознательно избрали такой простой пример, который должен убедить людей, не знающих системы, в том, что она плоха.

Вы должны знать, что выражения
Simplify[(x^2 + x) / x /. x -> 0] и Simplify[(x^2 + x) / x] /. x -> 0
отличаются тем, что в первом случае сразу происходит подстановка 0, а затем вычисление, что дает Indeterminate.
А во втором случае происходит сначала упрощение, а затем подстановка, что дает, естественно 1.

Если вы разобрались бы в вопросе, вы бы знали, что Simplify может изменять область определения функции в процессе работы счетным множеством меры нуль. Т. е., как в вашем случае, потеряна точка 0.

Далее, если бы вы потрудились разобраться, вы бы знали, что существует функция FunctionDomain, которая позволяет определить область определения вашей функции. Что должно учитываться в ваших расчетах, если вы серьезный исследователь. А зная, на основе ее результатов, что 0 не входит в область определения, нужно искать предел в точке. И предел как раз и равен 1.

Limit[(x^2 + x)/x, x -> 0]

Таким образом, вы сыграли на понятии предельного перехода и раскрытии неопределенности.
Профессионал в Wolfram Language легко обходит такие проблемы.

Идем далее.
Например, если вам нужно быстро и точно обратить большую матрицу (например, 1000 x 1000), то WL использовать нельзя (т. к. могут быть ошибки, неоптимизировано, низкая точность, не предназначено для реальных применений)

Это абсолютно не аргументированное замечание. Приведите ваш код и мы посмотрим, в чем дело. Я не замечал за всю свою историю работы того, о чем вы сообщили здесь.

В WL могут быть ошибки. Вероятность ошибок, скажем, в компиляторе C гораздо ниже, т. к., во-первых, есть полно свободных компиляторов C, во-вторых, эти компиляторы по-настоящему широко используются для реальных задач, и ошибки в них сразу становятся заметны

Глупо сравнивать простой язык с высокоуровневым приложением и языком сверхвысокого уровня вообще.
Если вы копнули бы глубже, вы бы знали, что вы можете подключать программы на C, Java, R, Matlab к Mathematica и использовать их в своих расчетах. Таким образом, ничто не мешает интегрировать их в ваши программы. По поводу ошибок (багов) в Wolfram Mathematica — безусловно есть некоторые баги, но их поиск — это почти всегда искусство. Они часто очень неочевидны и возникают в крайне экзотических конструкциях, с которыми реальный пользователь вряд-ли встретится.
Вообще интересно, если вы утверждаете такое, потрудитесь привести список найденных вами багов.

WL имеет куда меньшее быстродействие, чем, скажем, C++

Опять же, если вы хороший программист, непонятно, почему вы позволяете себе сравнивать скорость в принципе низкоуровневого языка C++, с высокоуровневым интерпретируемым языком Wolfram Language. Если сравнивать по формальной скорости, язык Wolfram Language, естественно уступит чистому С (С++, Java)… Но это позволяет часто выиграть миллисекунды или секунды на задачах побольше. Для решения сложных задач, как я и говорил выше, можно создавать компилируемые функции на основе Compile, использовать распараллеливание, CUDA, OpenCL и Hadoop. се это (из коробки) есть и позволяет ускорить код на Wolfram Language в сотни, тысячи, а часто и десятки тысяч раз. Но вы этим явно не занимались и, подозреваю, не можете оптимизировать код даже на уровне базовых советов 10+ советов по написанию быстрого кода в Mathematica. Хорошо было бы, чтобы вы показали какой-то свой реальный код.

В остальном, все что вы сказали демонстрирует вашу некомпетентность в Wolfram Language. Особенно взгляд на систему, как только на систему, способную работать в области математики (кстати, многие крупные математики — Матиясевич (решил десятую проблему Гильберта), Джон Нэш (нобелевский лауреат) и огромное количество других используют систему и используют успешно). Да, это традиционная область. И те, кто так думают, просто не знают современного функционала Wolfram Language.

В остальном я, как человек разрабатывавший и разрабатывающий крупномасштабные приложения на Wolfram Language могу с уверенностью сказать, что вы не правы (я делал системы для фармацевтической компании ОАО «Валента Фарм», для издательства «Баласс», а также для ООО «Эвика» (интеллект умного дома)) в том, что говорите.

Я уверен, что Леонид Шифрин (эксперт по Wolfram Language (разработчик ядра), С, Java, R, Python и JavaScript) найдет что еще сказать вам на вашу необоснованную критику, порочащую хороший продукт.
Простите за вопрос, но мне очень интересно.
Вы пишите программы чисто на WL, или используете какой-то другой яп для создания приложения, а потом связываете его с WL?

Просто я никогда не видел возможности делать Sandalone приложения в WL.
Делать Standalone приложения в Wolfram Language можно тремя путями:
1) использовать просто Wolfram Mathematica — это дорогой путь для заказчика,
2) использовать Wolfram Player Pro (который с недавнего времени принял имя CDF Player Pro) — это по сути голое ядро Wolfram Language. Приложение разрабатывается в виде документа Mathematica, по сути, а его можно сделать каким угодно по внешнему виду. Именно так было сделано с фармкомпанией,
3) для небольших проектов подойдет обычный простой CDF.

Случай 3 вообще бесплатный, так как CDF Player — бесплатный кроссплатформенный продукт.

Сейчас — с компанией Эвика — разрабатывается решение на основе Wolfram Cloud, а если быть точнее, то связки — Wolfram Programming Cloud и Wolfram Data Drop (статья на Хабре).

В издательстве Баласс мы применяем Wolfram Language для сложных задач разработки парсинга в другие языки необходимых нам объектов (тесты, базы объектов для учебников — иллюстрации, видео, аудио, и т. п.), автоматизации, разработки полиграфических иллюстраций, систем генерации задач, проверки ответов в учебниках и пр. При этом мы создаем приложения (электронные учебники) для платформ iOS, Android, Linux, Mac, Windows. Сами приложения пишутся на Java, Javascript, ObjectiveC. Так что в этом проекте Mathematica взяла на себя самую сложную часть — разработку и обработку контента, а оболочки делаются нативными для каждой системы.

Таким образом, можно и нужно, умело использовать технологии Wolfram и их связки с другими языками и программами. Это дает феноменальный выигрыш в скорости работы и качестве получаемого продукта.
UFO just landed and posted this here
Это конечно холиварный вопрос.

Maple традиционно ставит себе в заслугу то, что их рабочий документ выглядит так, «как будто вы пишите на бумаге». При этом на самом деле это необычайно неудобно при программировании. Интерфейс Mathematica выдает все в функциональном виде и он намного ближе к именно программированию. То, что некоторые говорят о том, что код в Wolfram Mathematica выглядит «навалом», это часто правда. Однако в этой куче легко работать и так выглядит обычно «быстрый» код, который нужен здесь и сейчас. Код серьезных проектов выглядит структурированно и привычно для программистов и опытные пользователи стараются писать код ясно и красиво.

Есть области, в которых Maple хорош по функциональноси, так же, как и Mathematica — это чистая математика.
По всем остальным параметрам, он, по моему мнению, хуже.

Детального экспертного сравнения этих двух систем пока что, по сути, нет. Однако, я бы рекомендовал посмотреть вот этот документ: Review of New Features in Maple 17 (они даже сделали свой публичный ответ на непубличное сравнение Wolfram, в котором привели совершенно смехотворные недостатки Mathematica — вроде «В Wolfram Language вы должны писать в уравнении ==, а у нас =». Еще одна проблема их сравнений — они не приводят кода, когда говорят о времени работы алгоритма, когда они сравнивают Maple и Mathematica — это само по себе уже бросает тень сомнения на их результаты. Wolfram же приводит коды, так что пользователь может их вычислить у себя и сравнить системы сам.)

Из этого документа вы увидите общую тенденцию: Maple постоянно заимствует идеи у Wolfram Mathematica и они делают вслед за Wolfram Research похожий функционал, часто с большим опозданием.

Помимо этого у Maple нет аналогов Wolfram|Alpha, курируемых баз данных, Wolfram Cloud, Wolfram Functions Syte, Wolfram Demonstrations Project (здесь есть слабый аналог), Wolfram MathWorld. Maple — во всем, что не связано с чистой математикой — тень Mathematica, но даже в этой области у них нет главного, что есть у Wolfram Language — символьной парадигмы всего в языке, что дает широчайшие возможности для манипулирования выражениями, метапрограммирования, автоматизации и пр.
UFO just landed and posted this here
Плюс Mathematica заключается в том, что она не ограничивает вам математикой. Количество покрываемых областей очень велико. Математика теперь лишь одна из них.
UFO just landed and posted this here
В научной возможно никак. Однако по своему опыту могу сказать, что это очень удобно, когда в одной системе я могу проанализировать Хабр и заниматься тут-же, скажем, проблемами, связанными с цепными дробями Рамануджана. Это дает огромную свободу творчества, если на то пошло.

При этом математический функционал никуда не уходит: его тоже становится все больше. Скажем, в 10-й версии появился очень мощный геометрический подъязык, пронизывающий систему или еще FEM для диффиренциальных уравнений и систем на телах и областях произвольной формы.
Спасибо за оценку, Роман, но экспертом я могу (вероятно) считаться только в WL, в остальных — разработчик с разной степенью компетентности.
Автор, к сожалению вы не указали какой последней версией Wolfram Mathematica вы пользовались. Подозреваю, что очень сильно устаревшей 5-й или 7-й

Сейчас у меня десятая

Ссылаясь на то, что система Mathematica — коммерческий продукт, у меня есть все основания полагать, что (как минимум) в школе вы использовали ее не лицензионную версию

Это так :)

что вы не работали толком с возможностями обработки файлов в Mathematica

С файлами работал. И я понимаю, что, скорее всего, ту задачу с кириллицей тоже можно решить в несколько строк на WL. Я привёл эти примеры с кириллицей и файловым менеджером как плохие идеи. Это не значит, что на WL нельзя работать с файлами просто.

Вы должны знать, что выражения...

Я сперва неудачно написал про Simplify. Посмотрите UPD про Simplify и прочее.

И наконец, OsipovRoman, вы меня переубедили, спасибо, см. UPD. Сделаю пинг заодно вам, LeonidShifrin
Вы пользуетесь устаревшей на текущий момент версией Wolfram Mathematica, у вас версия не выше 10.0.2.

К вашему сведению, этот баг был исправлен уже в 10.1 (текущая версия системы 10.2) и сейчас вычисления производятся верно:



Вы попутно показали один из стандартных способов проверки аналитического интегрирования.

По поводу игр с бесконечностью, которые вы так любите видимо (следует из еще более расширенной темы в вашем обновлении): это вообще одна из фундаментальных проблем математики, так что не стоит удивляться тому, что результат работы с ней будет неоднозначен. Это неопределенность.

Возможно (возможно!), WL действительно качественный продукт, пригодный для серьёзных научных и прочих применений.

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

Расскажу простой пример из недавнего: двое моих знакомых ученых в РАН занимались одной задачей в теории прочности. Один прислушался еще давно ко мне и стал профессионально использовать Wolfram Language. Второй вроде вас — любит писать все сам и с нуля. Каждый решил получить решение независимо. Первый на Wolfram Language решил задачу примерно за 3 дня, получил ответ. Второй написал свое приложение на C, писал 1,5 месяца. Получил тот же ответ. Вот только его программа не универсальна и ему придется для новой задачи либо допиливать что он создал, либо опять почти все делать с нуля.

Любой инструмент нужно использовать с головой. А если вы используете Wolfram Language с головой, он станет вашим самым мощным инструментом.
Понимаете, проблема в том, что изменение Вашего мнения стоило довольно дорого, если учесть время, потраченное всеми комментаторами. Если говорить откровенно, то публикация Вашего личного, и притом весьма слабо-аргументированного (и де факто почти целиком не имеющего отношения к реальности) мнения в статье со скандальным заголовком — это дурной тон.

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

Это, конечно, проблема не только Ваша, но и социальной и прочей модели Хабра, которая, с моей точки зрения, не имеет достаточно проработанного механизма цензуры, как скажем его имеют научные сообщества (рецензирование статей), или некоторые другие сообщества (модерация на обычных форумах, коллективная модерация на форумах типа Stack Exchange).

Ваш достаточно юный возраст и благие (судя по всему) цели до некоторой степени извиняют Вас, но в будущем постарайтесь не злоупотреблять публичными ресурсами и вынужденным вниманием других людей для подстегивания процесса эволюции Ваших взглядов. Всего наилучшего.
Я буду думать, прежде чем писать на Хабр.
Я буду думать, прежде чем писать на Хабр.
Я буду думать, прежде чем писать на Хабр.
(Не копипаста.) Простите
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
В дополнение к моему предыдущему ответу.

Рекомендую к просмотру:

Разработка больших приложений в Mathematica

Распространенные ошибки и заблуждения начинающих пользователей Mathematica

Оптимизация кода в Wolfram Mathematica

Cимвольные возможности языка Wolfram

Материалы Третьей конференции «Технологии Wolfram» (СПбГЭУ, 2015)
Даже не знаю, что и сказать. Сам подход называть какой-то язык игрушечным достаточно распространен. Больше всего достается JavaScript.

Думаю, даже по комментариям здесь очевидно, что WL используют не от незнания Lisp.

Каждому инструменту своя ниша, с этим сложно спорить. Но один частный случай еще не опровергает все остальные. Эта игрушка экономит куче людей и компаний много времени и денег. У нее есть своя ниша, которая несколько шире, чем помощь студентам с домашкой. Сейчас эту нишу пытаются расширить и появляется куча проблем. Будут ли они решены — я не знаю. Тут каждый решает для себя, на что ставить.
Офтопик. Господа, а помогите нубу с Вольфрамом. Пытался посчитать сложный параметризуемый интеграл на ряде значений параметра, так что-то происходило не так…

Вот пример, когда параметр p = 16 просто подставлен в выражение http://www.wolframalpha.com/input/?i=1+%2F+%2816+*+N[int+%28log+base+2+of+%28%282%2Bx%29%2F%281%2Bx%29%29%29^16+from+0+to+infinity]+%29
Но формуле реально не хватает изящности, потому хочется значение вытащиить в параметр.

Простые интегралы я научился вот так параметризовать http://www.wolframalpha.com/input/?i=p%3D16%2C+N[int+p%2Fx+dx+from+1+to2

Но аналогичный подход не работает для первого примера. Как же правильно?
Вы работаете с Wolfram|Alpha, это не Wolfram Language, это система, которая выдает ответ на поставленный вопрос, вычисляя его, а также является источником курируемых баз данных для Wolfram Language.

Ваша задача в Wolfram Language (Wolfram Mathematica) решается так:

У вас, правда, функция чуть другая
Рисунок
OsipovRoman спасибо за разъяснения и графики. Математика штука, конечно, интересная, но в Альфе функционал привлекает бесплатностью. Рассчёты эти мне нужны для улушения мира нищебродов OpenSource, потому, покупать минимум годовую подписку я считаю для задачи необоснованным.
Хотя, теперь, когда у меня есть корректный пример, я вероятно возьму триал и рассчитаю там.

P.S. Вы немного ошиблись в интерпретации моих слов — 16 перед интегралом — это тоже p. Интересен на целых точках в интервале 4..32.
Если интересно формула — нормировочный коэффициент для алгоритма HyperLogLog. В любом случае — большое спасибо!
Статья, имхо, ни о чём. ПОтому что любой тул нужно использовать по назначению. Где-то один тул идеален, где-то другой. Никто не предлагает использовать WL для тех задач для которых он не предназначен.

P.S.
Не знаю к чему вообще в статье упоминается Богачёв, но он очень крутой, научил и меня и многих очень многому.
«Wolfram Language (Mathematica) — это просто игрушка» — скажите это десяткам тысяч ученых, финансовых аналитиков, инженеров и других профессионалов, использующих WL каждый день как один из основных инструментов. Причем и на западе, где люди умеют считать и ценить свое время и деньги, и у нас, где люди просто умеют ценить хорошие инструменты.

В Вашем посте нет практически ни одного аргументированного, или вообще сколько-нибудь осмысленного утверждения. Складывается впечатление, что Вы, что называется, «слышали звон». Все разумное, что мне удалось вычленить из Вашего произведения, это то, что у каждого инструмента есть своя ниша и область применения (что справедливо в т.ч. и для WL), и за ее пределами инструмент перестает быть оптимален. И еще, что WL — закрытая коммерческая система.

Все же, пройду коротко по Вашим тезисам

> WL — это всё-таки узкоспециальный язык.

Это неверно. Верно то, что его эффективное применение как языка общего назначения требует более высоких навыков, в сравнении со многими другими языками (что может считаться как минус для определенных задач).

> Также замечу, что WL — это не свободное ПО, в отличие от кучи других языков, включая тот же питон.

Это справедливо. Минус это или плюс, зависит от многих факторов. Абсолютное преимущество свободного ПО — это миф. Всем кому интересно, советую почитать скажем эту прекрасную статью, которая развенчивает ряд мифов о свободном ПО:

marktarver.com/problems.html

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

> Там у нас началось программирование, преподавателя зовут Богачёв. От него (и от других людей) я узнал, что WL — это просто игрушка, причём даже для математических задач.

То есть Вы находите возможным публиковать статью на Хабре с весьма определенным мнением о некотором языке программирования, основываясь не на совокупном мнении некоторого экспертного сообщества (что было бы правильно), и даже не на своем сколько-нибудь серьезном опыте — скажем, нескольких серьезных но неудачных попытках решения серьезных задач на WL — а просто на опыте нескольких преподавателей?

Оставлю это без дальнейших комментариев.

> Mathematica и её язык \[LongDash] это просто сборная солянка.

Это было бы так, если бы WL не был построен на не очень большом числе весьма общих принципов. Такая фраза без уточнения и расшифровки — неверное и поверхностное суждение о языке.

>Если нравится WL, используйте языки, от которых он произошёл, например, Lisp.

Это зависит от задачи. Есть задачи, для которых Lisp имеет преимущество перед WL, и наоборот.

> Сам пакет Mathematica содержит кучу математических функций, но никакая из них не развита так, как она развита в узкоспециализированных математических пакетах.

Это просто неверно. Есть области, в которых некоторые пакеты дадут фору WL, а есть те, где все наоборот. В целом, общность WL чаще плюс чем минус, за счет синергетического эффекта хорошо интегрированного друг с другом функционала.

> Например, если вам нужно быстро и точно обратить большую матрицу (например, 1000 x 1000), то WL использовать нельзя (т. к. могут быть ошибки, неоптимизировано, низкая точность, не предназначено для реальных применений). Пишите свою реализацию или используйте узкоспециализированные пакеты, скажем, для C, C++ или Fortran

Вы привели плохой пример. Для матричных вычислений с машинной точностью, WL использует высоко-оптимизированные библиотеки типа Intel MKL, и писать свою реализацию в таких случаях — самонадеянность и потеря времени, я уже не говорю о надежности результатов.

> В WL могут быть ошибки. Вероятность ошибок, скажем, в компиляторе C гораздо ниже, т. к., во-первых, есть полно свободных компиляторов C, во-вторых, эти компиляторы по-настоящему широко используются для реальных задач, и ошибки в них сразу становятся заметны

На самом деле тут неправильная логика. C — язык совсем другого (более низкого) уровня, так что сравнивать ошибки в функционале WL и в компиляторах С — некорректно. Вам нужно бы сравнивать ошибки в WL c ошибками в соответствующих библиотеках, выдающих функционал высокого уровня — и тут как раз логика обратная, так как у WL как универсального пакета более широкая аудитория. Я уже не говорю о самописных решениях.

> WL имеет куда меньшее быстродействие, чем, скажем, C++

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

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

> WL не является математически правильным.

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

> WL — это не свободное ПО

Верно. У этого есть как минусы, так и плюсы, см. выше

> Так вот, симулятор написан на C++, в том числе код, выполняющий расчёты (решение диффуров и систем линейных уравнений). И разумеется, не на WL, потому что нет нужного быстродействия, нет должного доверия к этому WL, и вообще WL здесь было бы использовать несерьёзно.

Это лишь мнение разработчиков конкретной компании. Вполне уважая его, я могу привести сходу несколько известных мне примеров не менее ответственных и «денеженых» проектов, где WL (Mathematica) использовался как основной инструмент имплементации.

> Так вот, я вам скажу, что формальная математика \[LongDash] это единственный способ проводить математические манипуляции на компьютере так, чтобы быть уверенным в их математической правильности.

Нет, не единственный. Самый главный метод не поменялся за многие сотни лет — это использовать голову и проверять результаты различными способами. Если Вы не можете сделать этого для какой-либо задачи, значит у Вас нет достаточного понимания этой задачи, независимо от того, какой инструмент Вы используете.

> Для нематематических задач WL использовать вообще нельзя.

Это неверно. Давайте приведу два примера. Сама Mathematica (WL) написана в значительной степени на самой себе, а это миллионы строк кода. Система WolframAlphа написана почти полностью на WL, а это десятки миллионов строк кода.

> Итог. WL \[LongDash] это просто игрушка. Это инструмент студента, но не учёного.

А вы расскажите это всему сообществу физиков — теоретиков (к которому в прошлом принадлежал и Ваш покорный слуга), среди которого WL — один из самых популярных инструментов. Могу сказать за себя — результаты нескольких моих научных работ были получены с очень большой опорой на Mathematica

>Вряд ли, скажем, данные с большого андронного коллайдера обсчитываются на WL.

А Вы проверяли? Вот, например, ссылка, опровергающая Ваше утверждение

www.wolfram.com/mathematica/customer-stories/scientists-at-cern-use-mathematica-to-create-quark-gluon-plasma-state-of-matter.html

> Если что-то заинтересовало в этом посте (формальная математика, функциональное программирование, и т. д.), спрашивайте, я отвечу.

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

Хотелось бы также, чтобы Вы осознавали ответственность, лежащую на всяком, кто берется давать публичную оценку того или иного инструмента или технологии. Этот Ваш пост, на мой взгляд, существенно искажает существующее положение дел, и таким образом наносит вред сообществу.
Леонид, добрый день.
Соглашаясь по существу, все же пара моментов.
Вам нужно бы сравнивать ошибки в WL c ошибками в соответствующих библиотеках, выдающих функционал высокого уровня — и тут как раз логика обратная, так как у WL как универсального пакета более широкая аудитория.

Вот тут и приходит на помощь OpenSource. Кроме того, вы правда считаете, что у Mathematica больше пользователей, чем, например, у библиотек Fortran? Или NumPy?

Вполне уважая его, я могу привести сходу несколько известных мне примеров не менее ответственных и «денеженых» проектов, где WL (Mathematica) использовался как основной инструмент имплементации.

Приведите, пожалуйста. Этого очень не хватает.
Добрый день, извините, что отвечаю на ней мой вопрос, но…
Вот тут и приходит на помощь OpenSource. Кроме того, вы правда считаете, что у Mathematica больше пользователей, чем, например, у библиотек Fortran? Или NumPy?

Как минимум, большое число ученых (даже в Церн (выше по ссылке)) ну и значительное количество студентов.
(Про Fortran я не буду вспоминать, ибо его популярность весьма низкая)
Сколько тех же студентов будет использовать Python и тем более NymPy?
Arastas, добрый день.

> Вот тут и приходит на помощь OpenSource. Кроме того, вы правда считаете, что у Mathematica больше пользователей, чем, например, у библиотек Fortran? Или NumPy?

Несколько соображений. Во-первых, Mathematica — более интерактивная и высокоуровневая среда, с большим набором хорошо интегрированных между собой встроенных инструментов. Поэтому, получить ответ в ней, равно как и проверить его разными способами, и получить визуализацию, очень часто можно в разы быстрее, чем используя упомянутые Вами библиотеки.

Во-вторых, Mathematica не требует того уровня специальных знаний (знаний библиотек), которые требуются при использовании скажем библиотек Fortran (попробуйте, например, разобраться в руководстве LAPACK и грамотно использовать его за 10 минут), и в меньшей степени NumPy. При этом, зачастую «под капотом» используются эти самые библиотеки (как скажем в случае с LAPACK).

Наконец, в третьих, возможности интеграции Mathematica c другими языками часто дают возможность прямо из Mathematica вызывать те библиотеки в других языках, функционал которых требуется и почему-либо отсутствует в Mathematica. Это так для С и Fortran (можно подгружать динамические библиотеки прямо в ядро Mathematica через LibraryLink), а также Java (через J/Link), .Net (через .Net/Link), R (через RLink — мой скромный вклад в Mathematica linking technologies). К сожалению, пока нет PythonLink, но я уверен что его появление — вопрос ближайшего будущего.

Что касается числа пользователей, то думаю оно вполне сравнимо. Для студентов и преподавателей большинства западных вузов Mathematica бесплатна или условно бесплатна.

Я не оспариваю того факта, что библиотеки с открытым кодом имеют определенные преимущества, но высокий уровень языка Mathematica, прекрасная интеграция компонент и степень автоматизации многих вычислений дают ей в свою очередь ряд преимуществ. Кроме того, всегда можно использовать и то, и другое совместно, так сказать «гибридным» образом.

> Приведите, пожалуйста. Этого очень не хватает.

Ну вот например, с сайта WRI:

www.wolfram.com/mathematica/customer-stories/global-hedge-fund-develops-enterprise-wide-platform-with-mathematica.html

www.wolfram.com/mathematica/customer-stories/flight-operational-safety-analysis-with-mathematica.html

www.wolfram.com/mathematica/customer-stories/quality-control-measuring-true-performance-with-mathematica.html

Это только те случаи, где я лично знаю людей, ответственных за использование Mathematica в соответствующих проектах.

Я не скажу, что таких проектов огромное количество, но они есть, и весьма успешные.
Что касается числа пользователей, то думаю оно вполне сравнимо. Для студентов и преподавателей большинства западных вузов Mathematica бесплатна или условно бесплатна.

Давайте не будем лукавить. Студенты и (иногда) преподаватели — это не то профессиональное сообщество, которое будет вылавливать тонкие нюансы в реализации библиотек.
Я не оспариваю того факта, что Mathematica широко используется в серьезных проектах, но мне представляется, что профессиональное сообщество Fortran несколько больше.
Честно говоря, у меня нет данных на эту тему. Возможно Вы и правы.

Но на западе преподаватели — они же профессора, и ученые (у нас тоже, но в Штатах, скажем, в университетах т.н. первой и второй лиги практически все преподаватели — видные специалисты в своих областях, с мировым именем). Могу привести только один пример из личного опыта. В аспирантуре я занимался квантовой теорией поля и случайными матрицами, и хотя работа была в основном аналитическая, численных расчетов также хватало, включая симуляции методом Монте-Карло.

Так вот, я обычно использовал Mathematica, а мой шеф (один из ведущих мировых экспертов в своей области) — Fortran, и к Mathematica относился в плане численных расчетов достаточно скептически (а для аналитики использовал Maple). Пару лет назад я был в Штатах и навестил его. С удивлением узнал, что он перешел на Mathematica (в силу ряда технических причин).

Вообще, из того что я видел на семинарах, которые я посещал в бытность свою аспирантом и постдоком, достаточно большой процент специалистов использовал Mathematica наравне с или вместо Fortran. Это еще зависело от специфики. Скажем, теоретики больше использовали Mathematica, в то время как экспериментаторы тяготели к Fortran и Python / NumPy.
Это было бы так, если бы WL не был построен на не очень большом числе весьма общих принципов. Такая фраза без уточнения и расшифровки — неверное и поверхностное суждение о языке.

Извините, но в этом плане я немного согласен с автором статьи. Сначала в WL была только математика и все было нормально, но потом туда начали добавлять различные странные функции типа вывода флага и прочего. Оно конечно выглядит хорошо, но превращает язык для описания математики в сборную солянку всякого.
Или я не прав?
Wolfram Language — язык для описания математики и многих других объектов. Трудно понять, что вам не нравится. Вы можете просто не замечать даже не нужный вам функционал. Однако, когда он вам потребуется, он будет у вас под рукой. В Wolfram Language я считаю удачно перенесены принципы работы с математикой (функциями, символьными объектами) на все другие области и это дает очень мощный функционал для широкого спектра специалистов. А для тех, кто работает на стыке разных наук и дисциплин — это просто незаменимо.
Я не говорю, что мне это не нравится. Вы правы, что это может оказаться весьма полезным и все же, нельзя делать вид, что того факта, что эти все функции существуют независимо друг от друга.
Я не говорю, что это плохо, но то, что в Mathematica из языка для описания математики постепенно превращается в сборную солянку из полезных инструментов. Например, функция Classify. Безумно полезная функция и ее возможности поражают меня, но в системе для работы с математикой (я привык воспринимать Mathematica) она смотрится немного странно.
Я понимаю о чем вы. Но концепция Wolfram Language начавшись с математики, теперь стремится уже объять мир. В принципе, сама наука математика делает тоже самое. Когда-то трудно было представить ее использование в биологии, химии или лингвистике, но теперь это передовые направления.
Вообще Wolfram Research в том числе Research и потому, что делает многое необычно, по-новому. Сначала все смеялись над Wolfram|Alpha, потом ее интегрировали с Siri, затем с Bing, теперь уже и Google идет в каком-то смысле по пути Wolfram|Alpha.

На самом деле все функции Wolfram Language показывают чудесную мысль — вычислимости всего. Любой объект есть функциональная конструкция: функция Sin, документ Mathematica или его ячейка, изображение, облачный интерфейс или интерактивное приложение. Всюду используются стандартные принципы, единые и простые. В этом и красота. Я люблю Wolfram Language именно за это.
А как с «не специалистами» детьми, например, или домохозяйками? Когда то давно, бытовал тезис, что программирование как умение будет обязательным для любого образованного человека. Может WL претендовать на первый ЯП для детей? Или для не математика и IT-специалиста?
В настоящее время мы ведем переговоры (они во многом положительно окончены уже) с одним из лучших (если не самым лучшим) лицеем информационных технологий в Росиии — Лицеем 1533 о том, чтобы как раз Wolfram Language стал первым языком программирования для лицеистов. После него они будут учить еще множество языков (C, Java, JavaScript, C++, Python и др.).
Это решение очень разумно, так как Wolfram Language прост в изучении и дает ребятам сразу огромные возможности. И это понимает руководство лицея.
К тому же у Wolfram Research будет скоро онлайн система обучения на основе Wolfram Cloud, которая будет учить детей и всех желающих программированию на Wolfram Language бесплатно и на очень интересных примерах.
> Сначала в WL была только математика и все было нормально, но потом туда начали добавлять различные странные функции типа вывода флага и прочего. Оно конечно выглядит хорошо, но превращает язык для описания математики в сборную солянку всякого.
Или я не прав?

Я немного не об этом говорил. Встроенные функции типа тех, что Вы упоминаете — это ведь по сути библиотеки, просто несколько (часто значительно) лучше интегрированные с основным языком и друг с другом. Я говорил о принципах, на которых построен основной язык. Хотя в Mathematica / WL нет формального разделения на основной язык и специализированный функционал, тем не менее такое разделение можно провести достаточно четко. В основной язык войдут общие конструкции, дающие поддержку основных структур (списки, ассоциации) и действий над ними, поддержка различных стилей программирования (процедурный, функциональный, логический), базовые конструкции языка (циклы, операторы ветвления, локализация переменных, и др.), и другие подобного рода вещи. Их будет где-то 150 — 200 штук. Это довольно много, но все же не несколько тысяч.

Вот об этой основе я и говорил, и именно она представляет интерес с точки зрения оценки Mathematica как языка программирования общего назначения. И именно эта основа в конечном счете закладывает те возможности тесной интеграции компонент, которые и приводят к мощному синергетическому эффекту при использовании Mathematica в сложных, особенно меж-дисциплинарных задачах. Очень важной чертой языка является его символьная природа, которую Mathematica эксплуатирует еще намного сильнее, чем языки семейства Lisp. Могу посоветовать интересный пост на эту тему от человека, являющегося экспертом с многолетним стажем как в Mathematica, так и в Common Lisp:

stackoverflow.com/a/4435720

Так что говорить, что Mathematica просто сборная солянка — это значит не понимать ее суть. Есть основной язык, а есть специализированный функционал, который в других языках был бы в библиотеках. В Mathematica, между этими частями нет формального разделения. Так что если в чем-то ее и упрекать, так это как раз в отсутствии такого разделения (но тут нужно понимать, что в этом есть и свои плюсы, особенно в плане интеграции всех компонент друг с другом). Вам же не придет в голову упрекать библиотеки языка в том, что там «слишком много всего». Я здесь совершенно не касаюсь темы актуальности тех или иных добавляемых функций, это отдельная тема.
Интересно послушать иное мнение, конечно, но автор статьи как-то уж слишком с плеча рубит, ИМХО, обзывается «несерьёзными научными исследованиями» и прочее

Вот Вы говорите, мол пишите сами решение диф. уравнений на С, python или каком-то другом языке, но вот положа руку на сердце, скажите, пожалуйста, а сколько же строк кода должен написать химик, к примеру, чтобы решить дифур (а вся хим.кинетика — это диффуры)? У меня такое ощущение, что очень много… очень-очень… Да, можно скачать где-то библиотеку, но в WL уже всё готово — нужно вызвать только готовую функцию, как для Yupi: «просто добавь воды данных». При этом Mathematica позволят превращать в символы сложные выражения и оперировать с ними — ну а что ещё надо? Красиво — красиво, наглядно — наглядно, можно в статью вставить, можно студенту показать и он всё поймёт, как и что считается.

Другое дело, если надо создать программу, которая и управлять прибором будет, и данные собирать, и обсчитывать что-то, тогда, да, можно и на python запрограммировать всё. У каждого языка и каждого ПО есть своя область применения и не стоит натягивать ненатягиваемое на глобус.
Заинтересовало название статьи. Зашел прочитать и не понял к чему всё это. Прочитал комментарии — стало понятно и даже интересно это направление. Спасибо людям за полезные комментарии.
Sign up to leave a comment.

Articles