Как остановить вычисления в mathematica

REDMOND

Остановить вычисления встроенные функции системы Mathematica

Но я хотел бы сохранить все LegendreP вместо того, чтобы расширять его. Установив атрибут HoldAll в LegendreP , я могу остановить это, но аргументы также сохраняются,что не предназначено.

Может ли кто-нибудь дать какой-нибудь совет для решения этой проблемы? Спасибо.

Отредактировано: я хотел бы иметь такой результат для приведенной выше формулы (где L=LegendreP )

2 ответа

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

Я помню, что кто-то из WRI заявил в официальной группе новостей , что Mathematica 7 все еще имеет работающий старомодный браузер Mathematica Help от Mathematica 5 для целей совместимости. Но я не могу найти пост, где указан код для его вызова. Как вызвать и использовать этот устаревший браузер.

Но я хотел бы сохранить все LegendreP, а не расширять его.

Вы не можете использовать HoldForm?

Mathematica graphics

Mathematica graphics

Mathematica graphics

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

(обратите внимание на нижний регистр "l" )

Когда вы дойдете до стадии, на которой вы хотите применить замену шаблона:

Похожие вопросы:

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

Я хотел бы знать, как я могу вызвать функции Mathematica из Python. Я ценю пример, например, использование функции Mathematica Prime . У меня был поиск о MathLink , но как использовать его в Python.

Возможно ли, что встроенные функции в Mathematica (например, Minimize[expr,] ) начнут работать через CUDA после установки модуля CUDA для Mathematica?

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

Я помню, что кто-то из WRI заявил в официальной группе новостей , что Mathematica 7 все еще имеет работающий старомодный браузер Mathematica Help от Mathematica 5 для целей совместимости. Но я не.

Допустим, у меня есть отношение r^2 = x^2 + y^2. Теперь предположим, что после вычисления я получаю сложный вывод x и y, но который теоретически можно было бы значительно упростить, используя.

Я использую Linq — XML new XElement(Prefix, Prefix == null ? : Prefix) но я хочу сделать некоторые вычисления с префиксом, прежде чем добавлять его в xml, например, исключить пробелы, специальные.

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

У меня есть куча пользовательских функций, которые часто используются в mathematica. Интересно, смогу ли я хранить их в отдельных файлах, а mathematica загрузит их при запуске и будет рассматривать.

Существует старое описание устаревшего пакета Mathematica, в котором перечислены все встроенные физические константы.

Вычисления на Wolfram Mathematica – ускоряем и распараллеливаем

Существует достаточно популярное мнение, что MathWorks MATLAB – это численные расчёты, а Wolfram Mathematica – это символьные вычисления. У приверженцев этой точки зрения, заметка, про Wolfram Mathematica и Большие вычисления, вызвала некоторое замешательство, которое можно сформулировать одной фразой: «она же медленная, она же интерпретирует». Но, оказывается, Wolfram Mathematica не такая уж и медленная, и умеет компилировать. И, более того, умеет «делать» параллельные программы. Об этом речь и пойдёт ниже.

Настоящее эссе, конечно ни в коем случае не претендует на полноту раскрытия означенной темы про компилирование кода и параллельные вычисления в Wolfram Mathematica. Это скорее некий пример, с одной стороны, дающий представление о том, как это делается, с другой – несколько защищающий положения уже упомянутой заметки, что Wolfram Mathematica действительно возможно применять при прототипировании систем Больших вычислений.

Дальнейшее изложение, в принципе, рассчитано на читателя уже немного знакомого с системой Wolfram Mathematica 8 и с синтаксисом её языка программирования. Если знаний всё же окажется недостаточно, по ходу чтения можно заглядывать в официальное справочное руководство.

Итак, существенного ускорения вычислений на Wolfram Mathematica можно добиться если использовать компилируемый код. Для создания подобного кода необходимо использовать системную функцию Compile[ ], которая фактически является обёрткой для пользовательских функций. Компиляция возможна в код «C» (если установлен соответствующий компилятор) или в код «WVM» (Wolfram Virtual Machine).

При применении Compile[ ] необходимо помнить (знать), что расплатой за ускорение является жёсткая типизация используемых переменных. Поддерживаемые типы: _Integer – machine-size integer; _Real – machine-precision approximate real number (default); _Complex – machine-precision approximate complex number; True | False – logical variable. Поэтому два похожих кода могут привести к совершенно разному поведению программы.

FqError = Compile[<>,
FullSimplify[y (Sin[x]^2 + Cos[x]^2)]
, CompilationTarget -> "C"];

FqNorma = Compile[<>,
FullSimplify[y Log[Sin[x]^2 + Cos[x]^2]]
, CompilationTarget -> "C"];

Так, функция FqNorma[ ] отрабатывает нормально и выдаёт в качестве результата «0», в свою очередь, функция FqError[ ] также выдаёт правильный результат «y», но при этом порождает два диагностических сообщения:

REDMOND

CompiledFunction::cfse: Compiled expression y should be a machine-size integer.

CompiledFunction::cfexe: Could not complete external evaluation;
  proceeding with uncompiled evaluation.

Из этих сообщений становится ясно, что выражение, которое возвращает FullSimplify[ ] в функции FqError[ ] имеет тип не поддерживающийся в режиме исполнения компилируемого кода, поэтому она исполняется в интерпретируемом режиме.

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

Как видно из приведённых чисел, компилируемый код (в этом конкретном примере) быстрее интерпретируемого примерно в 118 раз. Практически пустой цикл из 10 млн. итераций Wolfram Mathematica на машине с Intel Core i5-2430M в однопоточном режиме проходит за 78 мс. Быстро это или медленно – судите сами.

Теперь о параллелизме. В Wolfram Mathematica его можно реализовать тремя основными способами. Первые два, через MathLink (и/или Wolfram LibraryLink) и Parallelize[ ] (и близкие по смыслу функции) – здесь не рассматриваются, ибо напрямую к компилируемому, внутри Mathematica, коду отношения не имеют. Речь пойдёт о третьем способе, который реализуется через опции Compile[ ]:
RuntimeAttributes -> и Parallelization -> True.

Необходимо заметить, что параллелизм, который осуществляется через соответствующие опции функции Compile[ ], во-первых, относится к модели общей памяти (shared memory model), а во-вторых, к модели SIMD (single instruction multiple data). Сама схема многопоточности очень близка к идеологии нитей в OpenMP. Число потоков, которое доступно для параллельного исполнения, определяется системной переменной $ProcessorCount.

Итак, определим функцию, которую будем вызывать параллельно:

Funter = Compile[<, >,
Module[,
QuantityElem = Length[X];
sum = 0.;
Do[sum += X[[ind]], ];
sum/Y]
, RuntimeAttributes -> , Parallelization -> True, CompilationTarget -> "C"];

А также данные, над которыми будут происходить вычисления:

XX11 = Range[5];
YY11 = Range[4];

XX2 = Table[i + Range[5], ];
YY2 = Range[4];

Возможны четыре базовых варианта вызова функции Funter[ ]:

Z0 = Funter[XX10, 10]
5.5

Z1 = Funter[XX11, YY11]

Z2 = Funter[XX2, YY2]

Z3 = Funter[XX2, 100]

Варианты вызова различаются следующим:

«Z0» – функция Funter[ ] вызывается один раз, и выполняется в один поток.

«Z1» – функция Funter[ ] вызывается 4 раза, исполняется над одними и теми же элементами массива XX11, но над различными элементами массива YY11. Выполняется в несколько потоков.

«Z2» – функция Funter[ ] вызывается 4 раза, каждый вызов использует свою строку из массива XX2 и элемент из массива YY11. Выполняется в несколько потоков.

«Z3» – функция Funter[ ] вызывается 4 раза, каждый вызов использует свою строку из массива XX2. Выполняется в несколько потоков.

Таким образом, этот несложный пример наглядно демонстрирует модели SIMD и shared memory, реализованные в функции Compile[ ] системы Wolfram Mathematica. Комбинируя приведённые способы вызовов функций, можно строить весьма сложные и достаточно быстрые параллельные программы, выполняющиеся в виде скомпилированного кода, и по своей структуре отвечающие идеологии нитевого параллелизма OpenMP.

26 октября 2012 года.

Ключевые слова: Wolfram Mathematica, компилированный код, параллельные вычисления, shared memory, SIMD, Большие вычисления.

Mathematica полезные заметки

Mathematica - Трехмерный график функции от двух переменных

Mathematica &#8212; Трехмерный график функции от двух переменных

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

Mathematica полезные заметки &#8212; общие замечания

Статья разбита на тематические разделы. Разделы делятся пунктами на маленькие заметки. Нумерация пунктов &#8212; сквозная. Как правило, к каждой заметке прикреплен рисунок.

Интерфейс и система

  1. В правой части экрана есть серые скобки. Обычно, на каждую строку вычисления есть одна скобка для входной ячейки, одна для выходной и одна общая. Скобки нужны для сворачивания больших портянок кода. Двойным кликом можно скрывать и разворачивать либо ввод, либо вывод.

С учетом этого, правильным и безопасным решением кажется программная генерация палет. Например:

Вычисления

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

REDMOND

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *