Комментарии 112
Математика — офигенный инструмент для своих задач. Так же как и Си, Баш и т.п. — для своих.
WL отличная штука для меня, нематематика, чтобы посчитать какие-нибудь простые вещи, построить графики, посчитать корреляцию.
На нём можно даже делать сумасшедшие штуки, вроде рисования кроссворда, и статья про это читается на одном дыхании — но это натягивание совы на глобус. Всё равно, что на Brainfuck писать.
Вполне логично, что для каждой задачи — подходящий инструмент.
Собственно это и есть задача символьной алгебры. Более чем серьезная.
Потом, да это выгружается в плюсы и дальше считается уже численно.
Например, если я не уверен, подойдёт ли какой-то метод для моей задачи, я по-быстрому пишу прототип в matlab, гоняю его на десятке тестовых примеров, подбираю алгоритмы и параметры. Если всё устраивает — можно переписать на C++
ЗЫ пост-подтверждение с, хоть и абстрактными, но примерами из жизни :)
Некоторые алгоритмы остаются в софте на C или C++, но тут палка о двух концах: сгенерированный код мозгодробителен, часто не оптимален и сопровождать его трудно. Беда в том, что умный дядька умеет только Матлаб и если что-то заоптимиздит, мёржить новосгенерённый код — то ещё удовольствие.
Если задача ещё актуальна, посоветуйте умным дядькам посмотреть на Julia — язык как раз и создавался для того, чтобы писать как в Матлабе, но при этом было быстро как на C или C++.
Передергивать не следует, нужно поискать способы донести мысль до читателя, не отступая от правды. Не уподобляйтесь пропагандистам из телевизора.
Сначала автору дали винду и рассказали (в школе? неквалифицированные учителя информатики?) про дельфи и про то, что 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[x a == b, x] просто выдаёт b/a, не учитывая, что a может быть равно нулю.
Видимо, автору пока не сказали, что читать документацию — это круто (тогда бы видели статью про RTFM):
reference.wolfram.com/language/ref/Reduce.html
Это что-то новенькое. По поводу ваших, уже излюбленных примеров, прочтите комментарии: мой и Леонида Шифрина.
Вы по-прежнему не понимаете суть того, о чем говорите.
> что опять-таки бессмыслено с точки зрения математики.
Снова читаем документацию: 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. Комментарии не могу оформлять нормально из-за кармы.
Обе альтернативы, которые вы представили в своем выводе имеют ряд недостатков.
1. Пишите сами, как это делает Богачёв
Я понимаю, это интересно. Я сам таким страдаю на Java, но… серьезно? Призывать делать свои
Обычно, если пишется свое решение, то только в двух случаях. Или аналогов и правда нет (с решением систем и дифуров вряд ли), или можно было оптимизировать под задачу, потому что там дифуры специального вида.
Писать в других случаях при разработке продукта крайне странно. Собственно написанный код вызывает у вас больше доверия, чем многоразово протестированная система?
2. либо используйте профессиональные библиотеки
Неплохое решение. Особенно, если профессиональные библиотеки под ваш язык имеются. Как-то так сложилось, что большинство профессиональных математических библиотек написано на С/С++ (ну или Fortran), а остальные пишутся программистами для программистов. Профессионалы там не участвуют. Доверия к таким библиотекам (особенно потому, что я видел их наполнение) у меня еще меньше, чем к Mathematica. Про соответствие формальной математике я вообще промолчу (так как практически любой язык программирования имеет те или иные проблемы с ней).
Каждая из предложенных вами альтернатив имеет сомнительное превосходство над WL. Да, скорее всего, вы будете знать, что находится внутри (ведь ML закрытый, все плохо), но минусов в таких подходах тоже достаточно.
Это инструмент студента, но не учёного. Вряд ли, скажем, данные с большого андронного коллайдера обсчитываются на WL. WL как 1С: плохой, узкоспециализированный, коммерческий, несвободный язык.
Как-то это глупо звучит. Предположим, я ученый. Предположим, мне нужно провести многоразовое моделирование. Почему я должен выкинуть имеющейся у меня ML и начать это все кодить на каком-то языке. Оно станет быстрее в 1.001 раз? Ну да мне все равно. Оно станет точнее? Сомнительно.
WL — отличный инструмент для ученых. Для ученых, у которых нет денег на программистов, у которых нет знаний языков программирования (да и не особо они им нужны). Для ученых, которые находятся между БАКом и институтами. А таких много.
Приведенный пример с БАК вообще смешон. Это все равно, что сказать «Java/C# плохой язык, вряд ли на нем написаны поисковые движки Google».
Вы не понимаете смысл WL. Это не язык программирования для ученых, это инструмент для них. Мало кто будет использовать WL в прикладных продуктах, потому что это просто не его ниша. Он вообще не для этого разрабатывался. Но он отлично походит для теоретических изысканий, даже если в нем нет полного соответствия формальной математике.
манипулировать самими выражениями языка программирования также как и любыми другими данными.
Хм, там доступно такое? Просто пока что я только видел 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
Это глубокое заблуждение. Более правильно будет сказать, что 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 и подставьте туда ноль. Что вы получите, с точки зрения формальной математики?
С точки зрения функционального анализа, наиболее релевантного если мы говорим о последующем интегрировании, дифференцировании или вообще ином использовании получившегося выражения в подавляющем большинстве применений там получится единица.
Почему в реальности вы начинаете делает какие-то отступления и прочее?
И как вы вообще сможете дальше применять выражение 0/0?
И с любой разумной точки зрения эта функция в нуле превращается в единицу.
Матанализ имеет целый раздел посвященный вопросам «чему равно данное 0/0» или «inf/inf» :)
В нем целый раздел посвящен тому, чему в пределе равняются эти неопределенности.
То, о чем вы говорите, называется доопределением функции.
А тут вы просто поставляете в функцию ноль, когда в нуле она не определена. И получаете неопределенность. Что тут не так?
Если для вас единственным критерием служит присутствие «формальной математики»
Нет, её присутствие нужно не всегда. Можно выделить два типа задач: численные и аналитические. Так вот, в численных задачах, мне кажется, вполне можно обойтись без формальной математики (хотя иметь её было бы здорово). В частности, Богачёв эту формальную математику не использует, и всё у него в порядке. Но вот в аналитических задачах она нужна. Т. е. если вам нужно, скажем, аналитически найти производную, упростить выражение и пр., то полагаться на результат, выданный 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 не занимается упрощением выражений.

1) интеграл несобственный;
2) подынтегральная функция имеет бесконечный разрыв;
3) искомая функция u входит в подынтегральную функцию нелинейным образом (в показателе экспоненты).
Каждый из этих пунктов в отдельности делает решение сложным, а их композиция — увеличивает сложность невероятно.
Solve не занимается упрощением выражений
Опечатка, Simplify
Это не язык программирования для ученых, это инструмент для них. Мало кто будет использовать WL в прикладных продуктах, потому что это просто не его ниша. Он вообще не для этого разрабатывался.
Это прекрасная фраза, которой, к сожалению, противоречит маркетинг вольфрама за последние годы. :( Они же реально его как язык для продакшн продвигают.
Для меня это все равно выглядит странновато, но людей устраивает и пусть.
Вот интересно, сколько есть не связанных с Wolfram компаний, долго и профессионально разрабатывающих ПО, которые бы вдруг решили: всё, в новых проектах переходим на стек технологий Wolfram и заказчику в продакшн будем поставлять продукты, сделанные на WL? Не использовать его для внутренних исследований, прототипирования и отладки, а именно ставить в продакшн?
Я, конечно, понимаю, что WL всё-таки имеет свою область применения. Он нужен для создания прототипов, для того чтобы по-быстрому найти производную и т. д., для того, чтобы провести некие расчёты там, где ошибки не критичны (скажем, при выполнении домашних заданий в вузе и написании курсовых), для того, чтобы провести некие расчёты, которые будут потом проверены другим, более надёжным способом. Мой коммент на эту тему: habrahabr.ru/post/263015/#comment_8506387.
<...>
Про кучу подробностей из моей жизни и Windows vs GNU/Linux. Я написал про GNU/Linux и т. д. не потому, что я хотел сказать, что GNU/Linux лучше Windows, а гуй лучше текстового интерфейса. И про Богачёва я написал не для того, чтобы его пропиарить. Просто я хотел немного рассказать о своей жизни, чтобы сделать мой рассказ более убедительным, чтобы было понятно, как менялись мои представления. И я не считаю, что GNU/Linux сильно превосходит Windows в техническом плане. И я понимаю, что GUI и CLI — это просто два разных интерфейса со своими применениями.
Про свободное ПО. Конкретно в случае WL его несвободность является существенным минусом, т. к. понижает доверие к полученным результатам
Немного про области, где можно применять 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.
При этом вы явно практически полный дилетант в использовании 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.
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 и их связки с другими языками и программами. Это дает феноменальный выигрыш в скорости работы и качестве получаемого продукта.
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 — символьной парадигмы всего в языке, что дает широчайшие возможности для манипулирования выражениями, метапрограммирования, автоматизации и пр.
Review of New Features in Maple 18
При этом математический функционал никуда не уходит: его тоже становится все больше. Скажем, в 10-й версии появился очень мощный геометрический подъязык, пронизывающий систему или еще FEM для диффиренциальных уравнений и систем на телах и областях произвольной формы.
Первое что приходит на ум - графики на бесконечности. В Математике делать такие графики появилась возможность в 2023, а в Мейпл вроде еще в 90-х. Так что ответ на вопрос кто у кого что заимствует не совсем однозначный.
В целом Мейпл вроде не так шустра как Математика, но вот численно брать интегралы с большой точностью может быстрее Математики. Все ли интегралы или только те с которыми я имел дело - не знаю, настолько подробно я эти системы не сравнивал. Зачем численно вычислять интегралы с большой точностью, в сотни знаков - вопрос отдельный, иногда бывает нужно.
Вывод - пока нет универсального инструмента который во всем лучше всех других, приходится пользовать более чем одним инструментом. Особенно если ответ заранее неизвестен и нет простого способа проверить его правильность, как в случае с интегралами. Математика выдает немного разные ответы при численном интегировании разными методами, и какой ответ правильный (возможно, никакой) узнать нельзя. Если же и Мейпл и Математика выдали идентичный результат с сотнями знаком то он почти наверняка правильный.
Автор, к сожалению вы не указали какой последней версией Wolfram Mathematica вы пользовались. Подозреваю, что очень сильно устаревшей 5-й или 7-й
Сейчас у меня десятая
Ссылаясь на то, что система Mathematica — коммерческий продукт, у меня есть все основания полагать, что (как минимум) в школе вы использовали ее не лицензионную версию
Это так :)
что вы не работали толком с возможностями обработки файлов в Mathematica
С файлами работал. И я понимаю, что, скорее всего, ту задачу с кириллицей тоже можно решить в несколько строк на WL. Я привёл эти примеры с кириллицей и файловым менеджером как плохие идеи. Это не значит, что на WL нельзя работать с файлами просто.
Вы должны знать, что выражения...
Я сперва неудачно написал про Simplify. Посмотрите UPD про Simplify и прочее.
И наконец, OsipovRoman, вы меня переубедили, спасибо, см. UPD. Сделаю пинг заодно вам, LeonidShifrin
К вашему сведению, этот баг был исправлен уже в 10.1 (текущая версия системы 10.2) и сейчас вычисления производятся верно:

Вы попутно показали один из стандартных способов проверки аналитического интегрирования.
По поводу игр с бесконечностью, которые вы так любите видимо (следует из еще более расширенной темы в вашем обновлении): это вообще одна из фундаментальных проблем математики, так что не стоит удивляться тому, что результат работы с ней будет неоднозначен. Это неопределенность.
Возможно (возможно!), WL действительно качественный продукт, пригодный для серьёзных научных и прочих применений.
А вот это ваше личное мнение, которое стоит оставить при себе. Хотя конечно спасибо, что вы изменили свое мнение и признали свою неправоту. Это достойно похвалы.
Расскажу простой пример из недавнего: двое моих знакомых ученых в РАН занимались одной задачей в теории прочности. Один прислушался еще давно ко мне и стал профессионально использовать Wolfram Language. Второй вроде вас — любит писать все сам и с нуля. Каждый решил получить решение независимо. Первый на Wolfram Language решил задачу примерно за 3 дня, получил ответ. Второй написал свое приложение на C, писал 1,5 месяца. Получил тот же ответ. Вот только его программа не универсальна и ему придется для новой задачи либо допиливать что он создал, либо опять почти все делать с нуля.
Любой инструмент нужно использовать с головой. А если вы используете Wolfram Language с головой, он станет вашим самым мощным инструментом.
Кроме того, это незаслуженно портит репутацию продукта / технологии, и наносит вред и сообществу. И лично я, скажем, включился в это обсуждение не ради Вас, уж не обижайтесь, а ради всех тех читателей, которые, прочтя Вашу статью, получили бы достаточно превратное мнение о, в данном случае, Mathematica / WL. И лично я предпочел бы потратить время более конструктивно, у меня вполне есть чем заняться.
Это, конечно, проблема не только Ваша, но и социальной и прочей модели Хабра, которая, с моей точки зрения, не имеет достаточно проработанного механизма цензуры, как скажем его имеют научные сообщества (рецензирование статей), или некоторые другие сообщества (модерация на обычных форумах, коллективная модерация на форумах типа Stack Exchange).
Ваш достаточно юный возраст и благие (судя по всему) цели до некоторой степени извиняют Вас, но в будущем постарайтесь не злоупотреблять публичными ресурсами и вынужденным вниманием других людей для подстегивания процесса эволюции Ваших взглядов. Всего наилучшего.
Я буду думать, прежде чем писать на Хабр.
Я буду думать, прежде чем писать на Хабр.
(Не копипаста.) Простите

Это цитата из замечательной книжки "The algorithm design manual". Сам я регулярно пользуюсь Математикой уже лет 15, и ее сильные и слабые стороны я примерно представляю. Мои немногочисленные эксперименты с реализацией алгоритмов в "чистой Математике" согласуются с диапазоном значений приведенном в цитате. Математика - не замена машинному коду. Но для символьных и многих (но не всех) численных вычислений это просто фантастический инструмент.
Рекомендую к просмотру:
Материалы Третьей конференции «Технологии Wolfram» (СПбГЭУ, 2015)
Думаю, даже по комментариям здесь очевидно, что 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 Language (Wolfram Mathematica) решается так:


Хотя, теперь, когда у меня есть корректный пример, я вероятно возьму триал и рассчитаю там.
P.S. Вы немного ошиблись в интерпретации моих слов — 16 перед интегралом — это тоже p. Интересен на целых точках в интервале 4..32.
Если интересно формула — нормировочный коэффициент для алгоритма HyperLogLog. В любом случае — большое спасибо!
P.S.
Не знаю к чему вообще в статье упоминается Богачёв, но он очень крутой, научил и меня и многих очень многому.
В Вашем посте нет практически ни одного аргументированного, или вообще сколько-нибудь осмысленного утверждения. Складывается впечатление, что Вы, что называется, «слышали звон». Все разумное, что мне удалось вычленить из Вашего произведения, это то, что у каждого инструмента есть своя ниша и область применения (что справедливо в т.ч. и для 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?
> Вот тут и приходит на помощь 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 была только математика и все было нормально, но потом туда начали добавлять различные странные функции типа вывода флага и прочего. Оно конечно выглядит хорошо, но превращает язык для описания математики в сборную солянку всякого.
Или я не прав?
Я не говорю, что это плохо, но то, что в Mathematica из языка для описания математики постепенно превращается в сборную солянку из полезных инструментов. Например, функция Classify. Безумно полезная функция и ее возможности поражают меня, но в системе для работы с математикой (я привык воспринимать Mathematica) она смотрится немного странно.
Вообще Wolfram Research в том числе Research и потому, что делает многое необычно, по-новому. Сначала все смеялись над Wolfram|Alpha, потом ее интегрировали с Siri, затем с Bing, теперь уже и Google идет в каком-то смысле по пути Wolfram|Alpha.
На самом деле все функции Wolfram Language показывают чудесную мысль — вычислимости всего. Любой объект есть функциональная конструкция: функция Sin, документ Mathematica или его ячейка, изображение, облачный интерфейс или интерактивное приложение. Всюду используются стандартные принципы, единые и простые. В этом и красота. Я люблю Wolfram Language именно за это.
Это решение очень разумно, так как Wolfram Language прост в изучении и дает ребятам сразу огромные возможности. И это понимает руководство лицея.
К тому же у Wolfram Research будет скоро онлайн система обучения на основе Wolfram Cloud, которая будет учить детей и всех желающих программированию на Wolfram Language бесплатно и на очень интересных примерах.
Или я не прав?
Я немного не об этом говорил. Встроенные функции типа тех, что Вы упоминаете — это ведь по сути библиотеки, просто несколько (часто значительно) лучше интегрированные с основным языком и друг с другом. Я говорил о принципах, на которых построен основной язык. Хотя в Mathematica / WL нет формального разделения на основной язык и специализированный функционал, тем не менее такое разделение можно провести достаточно четко. В основной язык войдут общие конструкции, дающие поддержку основных структур (списки, ассоциации) и действий над ними, поддержка различных стилей программирования (процедурный, функциональный, логический), базовые конструкции языка (циклы, операторы ветвления, локализация переменных, и др.), и другие подобного рода вещи. Их будет где-то 150 — 200 штук. Это довольно много, но все же не несколько тысяч.
Вот об этой основе я и говорил, и именно она представляет интерес с точки зрения оценки Mathematica как языка программирования общего назначения. И именно эта основа в конечном счете закладывает те возможности тесной интеграции компонент, которые и приводят к мощному синергетическому эффекту при использовании Mathematica в сложных, особенно меж-дисциплинарных задачах. Очень важной чертой языка является его символьная природа, которую Mathematica эксплуатирует еще намного сильнее, чем языки семейства Lisp. Могу посоветовать интересный пост на эту тему от человека, являющегося экспертом с многолетним стажем как в Mathematica, так и в Common Lisp:
stackoverflow.com/a/4435720
Так что говорить, что Mathematica просто сборная солянка — это значит не понимать ее суть. Есть основной язык, а есть специализированный функционал, который в других языках был бы в библиотеках. В Mathematica, между этими частями нет формального разделения. Так что если в чем-то ее и упрекать, так это как раз в отсутствии такого разделения (но тут нужно понимать, что в этом есть и свои плюсы, особенно в плане интеграции всех компонент друг с другом). Вам же не придет в голову упрекать библиотеки языка в том, что там «слишком много всего». Я здесь совершенно не касаюсь темы актуальности тех или иных добавляемых функций, это отдельная тема.
Вот Вы говорите, мол пишите сами решение диф. уравнений на С, python или каком-то другом языке, но вот положа руку на сердце, скажите, пожалуйста, а сколько же строк кода должен написать химик, к примеру, чтобы решить дифур (а вся хим.кинетика — это диффуры)? У меня такое ощущение, что очень много… очень-очень… Да, можно скачать где-то библиотеку, но в WL уже всё готово — нужно вызвать только готовую функцию, как для Yupi: «просто добавь
Другое дело, если надо создать программу, которая и управлять прибором будет, и данные собирать, и обсчитывать что-то, тогда, да, можно и на python запрограммировать всё. У каждого языка и каждого ПО есть своя область применения и не стоит натягивать ненатягиваемое на глобус.
Wolfram Language (Mathematica) — это просто игрушка