Javascript must be enabled in your browser to use this page.
Please enable Javascript under your Tools menu in your browser.
Once javascript is enabled Click here to go back to �нтеллектуальная Кобринщина

The Limits of Mathematica - Wolfram Mathematica

Пределы Mathematica

Одной единственной командой Mathematica Вы можете задать вычисление, которое будет слишком сложным для выполнения на любом компьютере. Например, можно задать разложение в ряд TheLimitsOfMathematicaRU_1.gif. Результат этого вычисления будет состоять из TheLimitsOfMathematicaRU_2.gif членов -  возможно больше, чем общее число частиц во Вселенной.

У Вас не должно возникнуть проблем при вычислении TheLimitsOfMathematicaRU_3.gif на любом компьютере, на котором может выполняться Mathematica. Но по мере увеличения показателя степени (1+x), получаемый результат в конце концов становится слишком большим для памяти компьютера.  В какой именно момент это произойдет, зависит не только от объема памяти, установленной в компьютере, но, зачастую, также и от таких деталей как другие программы, выполняющиеся на вашем компьютере в то время, когда Вы выполняете вычисления.

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

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

Объем памяти является наиболее распространенным фактором, ограничивающим вычисления. Однако,  таким фактором может оказаться и время. Как правило, Вы готовы ожидать ре зультат вычислений секунду или даже минуту. Однако, вряд-ли Вы будете готовы ждать час или день, и практически никогда не согласитесь прождать целый год.

Внутренний код Mathematica использует высокоэффективные и оптимизированные алгоритмы. Но существуют некоторые задачи, для которых наиболее известные алгоритмы, в конечном итоге, всегда требуют большого количества времени. Типичной проблемой является то, что требующееся алгоритму время может увеличиваться почти экспоненциально с увеличением размера введенного выражения. Классическим примером является факторизация целых чисел - где наиболее известные алгоритмы нуждаются во времени, которое растет почти экспоненциально с увеличением количества цифр. На практике вы увидите, что TheLimitsOfMathematicaRU_4.gif даст почти мгновенный результат, если k содержит менее 40 цифр. Но если k имеет более 70 цифр, для вычисления TheLimitsOfMathematicaRU_5.gif может потребоваться непредсказуемо долгое время.

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

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

• Арифметические вычисления с числами, содержащими несколько сот миллионов знаков.
• Отображение нескольких миллионов знаков для чисел, подобных ? и e.
• Разложение многочленов, дающее миллион одночленов.
• Разложение на множители многочленов с четырьмя переменными и сотней тысяч одночленов.
• Сокращение системы квадратичных неравенств до нескольких тысяч независимых составляющих.
• Поиск целых корней разреженного многочлена в степени одного миллиона.
• Применение рекурсивного правила миллион раз.
• Вычисление простых чисел вплоть до десяти миллионов.
• Нахождение численной инверсии матрицы размера 1000?1000.
• Решение разреженной линейной системы с миллионом переменных и несколькими миллионами ненулевых коэффициентов.
• Нахождение определителя для матрицы из целых чисел, размера 250?250.
• Нахождение определителя для символьной матрицы 10?10.
• Нахождение численных корней многочлена 200-ой степени.
• Решение разреженной задачи линейного программирования с несколькими сотнями тысяч переменных.
• Автоматическая укладка графа с десятками тысяч вершин и сотнями тысяч граней.
• Нахождение преобразования Фурье для списка из сотен миллионов элементов.
• Рендеринг миллиона графических примитивов.
• Сортировка списка из десяти миллионов элементов.
• Поиск строки длиной десять миллионов символов.
• Импорт нескольких десятков мегабайт численных данных.
• Форматирование нескольких сотен страниц вывода в TraditionalForm.

Некоторые операции, которые обычно занимают не более нескольких секунд на типичном компьютере 2006 года выпуска.