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