MAXEFFORT

Максимальный объем работы, чтобы потратить на вычисление

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Описание

Переменная окружения MAXEFFORT определяет усилие, допускала heuristical части вычисления, измеренного в “рабочих модулях”. Значением по умолчанию является MAXEFFORT = 1000000.

Возможные значения: неотрицательное число с плавающей запятой; или infinity.

MAXEFFORT определяет максимальное количество “рабочих модулей”, которые могут быть потрачены на внутреннюю эвристику.

Один рабочий модуль примерно соответствует 1 000 шагов оценки, выполненных средней функцией ядра.

Независимо от того, что MAXEFFORT установлен в, каждая функция MuPAD® возвращает правильное хотя возможно неупрощенный результат; в частности, некоторые функции могут возвратиться неоцененный. MAXEFFORT определяет сумму дополнительного времени, проведенного при получении лучшего или более упрощенного результата; значение infinity означает, что всю встроенную эвристику действительно пробуют, значение 0 означает, что вся эвристика, которая может приложить значительные усилия, не учтена.

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

Другие функции выполняют, в любом случае, все вычисления, необходимые, чтобы получить некоторый правильный результат; MAXEFFORT только определяет время, доступное для улучшения того результата. В случае функций, которые могут возвратиться неоцененный сразу (например, solve или int), или могут сразу возвратить их вход (как, например, simplify), или может ответить на вопрос UNKNOWN сразу (как, например, is), все их потребление времени считается, чтобы быть потраченным на эвристику (чисто эвристические функции).

Чисто эвристические функции обычно сразу возвратятся, если их вход будет вполне сложным относительно позволенного усилия. Это также верно, если пользователь имеет при условии, что введенный на интерактивном уровне. В порядке создать трудную проблему, где более длительное время выполнения приемлемо, должен быть увеличен MAXEFFORT.

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

Пользователь может использовать MAXEFFORT в своих собственных функциях можно следующим образом: любая функция может использовать усилие, данное MAXEFFORT частично для собственных издержек, и распределить остальных на функциях, которые это вызывает. Для этого вызывающая сторона имеет к save переменную MAXEFFORT и установила его на то, что это хочет сделать доступным для вызванной функции. В зависимости от того, необходим ли вызов, чтобы получить правильный результат вообще и является ли вызванная функция эвристическим, существуют следующие случаи, чтобы обработать. Если вызов необходим, и вызванная функция детерминирована, MAXEFFORT не имеет никакого влияния. Если вызов не абсолютно необходим и насколько вызванная функция детерминирована, вызывающая сторона должна вычесть необходимую сумму как собственные издержки от MAXEFFORT, если достаточно доступно; в противном случае такой вызов не должен происходить. Насколько вызванная функция работает эвристическим образом (по любой причине, которой она была названа), она должна ограничить свои усилия суммой, данной MAXEFFORT.

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

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

Во избежание случая, не восстанавливаемых эффектов, например, другими программами, работающими на том же компьютере, MAXEFFORT не должен использоваться в связи с измерением времени с помощью time или rtime. Например, время выполнения, сохраненное в одном рекурсивном вызове согласно измерению времени, не должно быть предоставлено другому рекурсивному вызову.

Примеры

Пример 1

Разложение целого числа в простые множители уникально; следовательно результат ifactor исключительно определяется, такой, что ifactor не реагирует на MAXEFFORT:

MAXEFFORT:= 0:
ifactor(2^10 + 1)

Пример 2

Функция solve может возвратиться неоцененный. Например, это происходит, если нет никакого усилия, оставленного потратить на вычисление:

MAXEFFORT:= 0:
solve(ln(x) + x = 3, x)

Пример 3

Увеличение значения MAXEFFORT может помочь решить уравнения, для которых решатель обычно возвращает неоцененные результаты. Следующий пример использует MAXEFFORT = 100 и x^1000, потому что, запуская этот пример для значения по умолчанию MAXEFFORT = 1000000 и x^10000000 занимают много часов.

Когда вы используете MAXEFFORT = 100, решатель возвращает неоцененный результат для следующего уравнения.

MAXEFFORT:= 100:
solve(ln(x) + x^1000 = 3, x)

Установка MAXEFFORT к 200 позволяет решателю возвращать явное решение. Чтобы отобразить решение, удалите двоеточие в конце команды solve.

MAXEFFORT:= 200:
solve(ln(x) + x^1000 = 3, x):
Warning: Possibly spurious solutions. [solvelib::checkSolutions]

Можно установить значение MAXEFFORT к infinity, чтобы гарантировать, что система попробует всю встроенную эвристику. Обратите внимание на то, что для некоторых вычислений, установка MAXEFFORT к infinity может привести к чрезвычайно долгому времени вычисления.

Смотрите также

Функции MuPAD