freeze

Создайте неактивную копию функции

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

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

Синтаксис

freeze(f)

Описание

freeze(f) создает неактивную копию функционального f.

ff := freeze(f) возвращает функцию, которая является “неактивной” копией аргумента f. Это означает:

  1. ff только оценивает свои аргументы, но не вычисляет ничто больше,

  2. ff распечатан таким же образом как f,

  3. символьные вызовы ff имеют тот же тип, как символьный f вызывает,

  4. если f является функциональной средой, то ff имеет все слоты f.

ff оценивает свои входящие параметры, даже если функциональный f имеет опцию процедуры hold.

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

Ни eval, ни level не могут осуществить оценку неактивной функции. Смотрите Пример 2.

Примеры

Пример 1

Создайте неактивную форму функциональной среды int:

_int := freeze(int): F := _int(x*exp(x^2), x = 0..1)

Неактивная форма int хранит всю информацию, которая известна о функциональном int, например, выводе, типе и слоте float для оценки с плавающей точкой:

F, type(F), float(F)

Исходная функциональная среда int не изменяется freeze:

int(x*exp(x^2), x = 0..1)

Используйте unfreeze, чтобы повторно активировать неактивный функциональный _int и оценить результат:

unfreeze(F), unfreeze(F + 1/2)

Пример 2

Этот пример показывает различие между hold и freeze. Результат команды S := hold(sum)(...) не содержит неактивную версию sum, но неоцененный identifiersum:

S := hold(sum)(1/n^2, n = 1..infinity)

В следующий раз, когда S оценен, идентификатор, sum заменяется его значением, функциональная средаsum, и процедура, вычисляя значение бесконечной суммы вызывается:

S

Напротив, оценка результата freeze не приводит к оценке неактивной функции:

S := freeze(sum)(1/n^2, n = 1..infinity)

S

Неактивная функция не реагирует на eval:

eval(S)

Единственный способ отменить freeze состоит в том, чтобы использовать unfreeze, который повторно активирует неактивную функцию в S и затем оценивает результат:

unfreeze(S)

Пример 3

freeze(f) не изменяет объект f, но возвращает копию f в неактивной форме. Это означает, что вычисления с неактивной версией f могут содержать исходный функциональный f.

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

Sin := freeze(sin):

и расширьте термин Sin(x+y), затем результат выражается с точки зрения исходной синусоидальной функции sin:

expand(Sin(x + y))

Возвращаемые значения

Объект того же типа как f.

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

Функции MuPAD