Конечно, это я не вам лично писал — это просто комментарий, отражающий некоторые идеи, возможно ошибочные. Как я об этом узнаю, если буду держать их при себе?
2) способность WL решать рекуррентные уравнения вообще говоря не очевидна — я сам о ней узнал чисто случайно, и примеры с рекурсивным вычислением факториала этому никак не способствуют.
3) использовать WL игнорируя всю мощь его символьного движка — это примерно то же самое, что использовать компилятор с++ не используя классы, перегрузку операторов, умные указатели, шаблоны и всё такое. Так и тут возникает закономерный вопрос — а зачем вообще нужен WL, если это всё точно так же реализуется на c/c++/c#/python и наверняка будет работать ещё быстрее?
А вот тут вы жесткоко ошибаетесь. Встроенная функция медленная, весьма.
По-моему, это очевидный недостаток языка или его реализации конкретной версии — учитывая, что сам Леонид Шифрин постоянно твердит «используйте встроенные функции, если они есть, и не изобретайте велосипеды», да и вы здесь же пишете «используйте функциональное программирование». Если у нас рекуррентная последовательность определена как функция — мы можем использовать её в качестве аргумента, интегрировать/дифференцировать, делать подстановки и всё такое.
По-моему, тут не хватает самой главной рекомендации — не используйте списки и рекурсию там, где они не нужны явным образом. Использовать списки для рекурсивного нахождения чисел Фибоначчи — это треш, за это нужно бить палкой по голове. Вы можете не знать, что в WL есть встроенная функция для чисел Фибоначчи, но вы обязаны знать, что в WL есть решатель рекуррентных уравнений! Пишите RSolve[{f[n + 2] == f[n] + f[n + 1], f[1] == f[2] == 1}, f, n]
получите ответ {{f -> Function[{n}, Fibonacci[n]]}}
его и используйте. Если вы не знаете, что значит «Fibonacci» — пишите Fibonacci[n] // FunctionExpand
получите формулу в явном виде ((1/2 (1 + Sqrt[5]))^n - (2/(1 + Sqrt[5]))^n Cos[Pi n])/Sqrt[5]
Если вам действительно нужен список из чисел Фибоначчи — не используйте примеры из статьи. Используйте Table[Fibonacci[n], {n, 10}]
К сожалению, у нас пока что мало знают об этом языке
Я бы даже сказал, что WL — самый недооценённый язык на текущий момент, причём за пропаганду Mathematica мне никто ничего не платит))
Я думаю, что политика продвижения Mathematica и WL не совсем верная. Не нужно упирать на то, насколько он крут и в нём можно сделать всё, что угодно — это вызывает скорее отторжение. Пользователь должен сам осознать и сделать свой выбор без давление извне.
Противопоставлять Mathematica нужно прежде всего Matlab-у и Mathcad-у — это наиболее популярные инструменты для прототипирования и символьных расчётов. Я сам пришёл к Mathematica тогда, когда Mathcad не смог решить какое-то уравнение, и поначалу было непросто приспособиться к новому синтаксису. Но когда приспособился, он вдохновил меня настолько, что я решил разориться на лицензионную версию — не для работы, а для личного пользования, и если сравнивать с Matlab-ом — цена действительно смешная.
Продвигать Mathematica нужно (как мне кажется) не для уже сформировавшихся разработчиков, а для школьников и студентов, у которых всё ещё впереди. Чтобы он привык в любой непонятной ситуации открывать Mathematica или документацию к Mathematica (которой тоже нету равных по содержательности).
Можно ли расширить дуальные числа до гипер- дуальных (по аналогии с кватернионами, октонионами и пр.), чтобы получать автоматически не только первую, но и вторую, и прочие производные?
Нет, «в отместку» досталось только вам. Если вам это показалось несправедливым — мне жаль, но никто не считает минусы в свою сторону справедливыми. Возможно, это добавит вам мотивации написать свою статью, накопить кармы и поставить минус мне в ответ. Возможно также, что прочитав вашу статью, я изменю своё мнение и сменю минус на плюс (хотя вряд ли вы об этом узнаете).
Я вам поставил (а не «плюнул») минус не столько за содержание, сколько за мотивацию. Вы шли мимо, увидели, что кого-то сильно минусуют, и решили попинать его за компанию, ничем при этом не рискуя. Это низко и недостойно. Самоутверждаются за чужой счёт только те, кому утвердиться больше нечем — у вас нет ни статей, ни сколько-нибудь значимых комментариев в обозримый промежуток времени.
По содержанию. Изображая из себя знающего человека вы прокололись, назвав эллиптический интеграл «термином» — в то время как это никакой не термин, а функция. По основной теме статьи — ranges — вы также ничего сказать не смогли.
Вы никак не подтвердили свою квалификацию, чтобы позволить себе подобного рода высказывания. Я считаю, что вам и подобным вам нет места на Хабре. Ваше последующее прилюдное нытьё по поводу потери единицы кармы лишь подтвердило это.
Ну а если другим членам сообщества, минусующим мои комментарии, ваши более интересны — имеют на то полное право.
P.S. Чтобы читать о фичах языка без матана и прочей шелухи, нужно читать просто документацию.
Извлечение корня изучают ещё в школе и даже раньше, чем тригонометрию. Это операция, обратная возведению в квадрат. Что страшного в корне, я упорно не понимаю.
Математику за то и не любят, что её дают на примерах, отдалённых от реальности; и многие вещи, звучащие страшно и непонятно, на деле оказываются простыми и очевидными — если их излагать не как «вешь в себе», а применительно к реальным задачам.
Я понимаю, что математика нужна не каждому программисту, но автор всё-таки позиционирует себя как «физик-теоретик», а от физика-теоретика ожидаешь содержания чуть более интересного, чем школьные примеры. Статья бы только выиграла, будь в качестве примера хотя бы эллиптический интеграл. И ещё больше бы выиграла, если бы код из неё можно было бы взять и использовать «как есть» в реальных задачах.
Мне кажется, самое востребованное в символьных вычислениях это не скорость, а — автоматическое вычисление пределов. Чтобы вычисляя значения функции sin(pi⋅x)/(x-x³) в точках 0 и ±1 получать корректные значения без дополнительных телодвижений.
Для заранее известного ответа можно использовать системы компьютерной алгебры, которые с произвольной точностью считать умеют. И метод трапеций очевидно не так быстро сходится, по сравнению с другими — тоже не самый лучший выбор. Закономерно возникает сомнение, что и дальше по тексту у вас будет оптимальное решение.
Будем интегрировать методом трапеций вот такую функцию:
А какой в этом смысл, если эта функция прекрасно интегрируется аналитически? На что у меня потребовалось меньше времени, чем на прочтение следующего абзаца.
1) «преждевременная оптимизация — корень всех зол» ©. Кто не согласен, пусть первым кинет в меня камень. Наглядность важнее, особенно при прототипировании.
2) способность WL решать рекуррентные уравнения вообще говоря не очевидна — я сам о ней узнал чисто случайно, и примеры с рекурсивным вычислением факториала этому никак не способствуют.
3) использовать WL игнорируя всю мощь его символьного движка — это примерно то же самое, что использовать компилятор с++ не используя классы, перегрузку операторов, умные указатели, шаблоны и всё такое. Так и тут возникает закономерный вопрос — а зачем вообще нужен WL, если это всё точно так же реализуется на c/c++/c#/python и наверняка будет работать ещё быстрее?
По-моему, это очевидный недостаток языка или его реализации конкретной версии — учитывая, что сам Леонид Шифрин постоянно твердит «используйте встроенные функции, если они есть, и не изобретайте велосипеды», да и вы здесь же пишете «используйте функциональное программирование». Если у нас рекуррентная последовательность определена как функция — мы можем использовать её в качестве аргумента, интегрировать/дифференцировать, делать подстановки и всё такое.
за это нужно бить палкой по голове. Вы можете не знать, что в WL есть встроенная функция для чисел Фибоначчи, но вы обязаны знать, что в WL есть решатель рекуррентных уравнений! ПишитеRSolve[{f[n + 2] == f[n] + f[n + 1], f[1] == f[2] == 1}, f, n]получите ответ
{{f -> Function[{n}, Fibonacci[n]]}}его и используйте. Если вы не знаете, что значит «Fibonacci» — пишите
Fibonacci[n] // FunctionExpandполучите формулу в явном виде
((1/2 (1 + Sqrt[5]))^n - (2/(1 + Sqrt[5]))^n Cos[Pi n])/Sqrt[5]Если вам действительно нужен список из чисел Фибоначчи — не используйте примеры из статьи. Используйте
Table[Fibonacci[n], {n, 10}]Я думаю, что политика продвижения Mathematica и WL не совсем верная. Не нужно упирать на то, насколько он крут и в нём можно сделать всё, что угодно — это вызывает скорее отторжение. Пользователь должен сам осознать и сделать свой выбор без давление извне.
Противопоставлять Mathematica нужно прежде всего Matlab-у и Mathcad-у — это наиболее популярные инструменты для прототипирования и символьных расчётов. Я сам пришёл к Mathematica тогда, когда Mathcad не смог решить какое-то уравнение, и поначалу было непросто приспособиться к новому синтаксису. Но когда приспособился, он вдохновил меня настолько, что я решил разориться на лицензионную версию — не для работы, а для личного пользования, и если сравнивать с Matlab-ом — цена действительно смешная.
Продвигать Mathematica нужно (как мне кажется) не для уже сформировавшихся разработчиков, а для школьников и студентов, у которых всё ещё впереди. Чтобы он привык в любой непонятной ситуации открывать Mathematica или документацию к Mathematica (которой тоже нету равных по содержательности).
По содержанию. Изображая из себя знающего человека вы прокололись, назвав эллиптический интеграл «термином» — в то время как это никакой не термин, а функция. По основной теме статьи — ranges — вы также ничего сказать не смогли.
Вы никак не подтвердили свою квалификацию, чтобы позволить себе подобного рода высказывания. Я считаю, что вам и подобным вам нет места на Хабре. Ваше последующее прилюдное нытьё по поводу потери единицы кармы лишь подтвердило это.
Ну а если другим членам сообщества, минусующим мои комментарии, ваши более интересны — имеют на то полное право.
P.S. Чтобы читать о фичах языка без матана и прочей шелухи, нужно читать просто документацию.
Математику за то и не любят, что её дают на примерах, отдалённых от реальности; и многие вещи, звучащие страшно и непонятно, на деле оказываются простыми и очевидными — если их излагать не как «вешь в себе», а применительно к реальным задачам.
Если статья о том, что все и так знают, то какой вообще смысл её читать?
Покажите, как. Методом проб и ошибок?