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
. Например, время выполнения, сохраненное в одном рекурсивном вызове согласно измерению времени, не должно быть предоставлено другому рекурсивному вызову.
Разложение целого числа в простые множители уникально; следовательно результат ifactor
исключительно определяется, такой, что ifactor
не реагирует на MAXEFFORT
:
MAXEFFORT:= 0: ifactor(2^10 + 1)
Функция solve
может возвратиться неоцененный. Например, это происходит, если нет никакого усилия, оставленного потратить на вычисление:
MAXEFFORT:= 0: solve(ln(x) + x = 3, x)
Увеличение значения 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
может привести к чрезвычайно долгому времени вычисления.