freeze
Создайте неактивную копию функции
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
freeze(f
)
freeze(f)
создает неактивную копию функционального f
.
ff := freeze(f)
возвращает функцию, которая является “неактивной” копией аргумента f
. Это означает:
ff
только оценивает свои аргументы, но не вычисляет ничто больше,
ff
распечатан таким же образом как f
,
символьные вызовы ff
имеют тот же тип, как символьный f
вызывает,
если f
является функциональной средой, то ff
имеет все слоты f
.
ff
оценивает свои входящие параметры, даже если функциональный f
имеет опцию процедуры hold
.
Используйте freeze
когда это необходимо, чтобы выполнить много операций с f
, которые требуют f
только в его символьной форме, но f
не должен быть выполнен.
Ни eval
, ни level
не могут осуществить оценку неактивной функции. Смотрите Пример 2.
Создайте неактивную форму функциональной среды 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)
Этот пример показывает различие между 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)
freeze(f)
не изменяет объект f
, но возвращает копию f
в неактивной форме. Это означает, что вычисления с неактивной версией f
могут содержать исходный функциональный f
.
Например, если вы создаете неактивную версию синусоидальной функции:
Sin := freeze(sin):
и расширьте термин Sin(x+y)
, затем результат выражается с точки зрения исходной синусоидальной функции sin
:
expand(Sin(x + y))
|
Объект того же типа как f
.