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
может привести к чрезвычайно долгому времени вычисления.