Create an active copy of a frozen function

MuPAD® notebooks will be removed in a future release. Use MATLAB® live scripts instead.

MATLAB live scripts support most MuPAD functionality, though there are some differences. For more information, see Convert MuPAD Notebooks to MATLAB Live Scripts.




unfreeze(object) reactivates all inactive functions occurring in object, proceeding recursively along the structure of object, and then evaluates the result.

unfreeze uses misc::maprec to proceed recursively along the structure of object. This means that for basic domains such as arrays, tables, lists, or polynomials, the function unfreeze is applied to each operand of object.

If object is an element of a library domain, then the behavior of unfreeze is specified by the method maprec that overloads the function misc::maprec. If this method does not exist, then unfreeze has no effect on object. See Example 2.

unfreeze does not operate on the body of procedures. Therefore, it is recommended not to embed inactive functions inside procedures.


Example 1

Create an inactive form of the function environment int:

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

The inactive form of int keeps every information that is known about the function int, for example, the output, the type, and the "float" slot for floating-point evaluation:

F, type(F), float(F)

The original function environment int is not modified by freeze:

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

Use unfreeze to reactivate the inactive function _int and evaluate the result:

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

Example 2

The function unfreeze uses misc::maprec to operate recursively along the structure of object. For example, if object is an array containing inactive functions, such as:

a := array(1..2, 
  [freeze(int)(sin(x), x = 0..2*PI), freeze(sum)(k^2, k = 1..n)]

then unfreeze(a) operates on the operands of a:


This means that for library domains, the effect of unfreeze is specified by the method maprec. If the domain does not implement this method, then unfreeze does not operate on the objects of this domain. For example, create a domain and an object containing an inactive function as its operand:

dummy := newDomain("dummy"):
o := new(dummy, freeze(int)(sin(x), x = 0..2*PI))

The function unfreeze applied to the object o has no effect:


If you overload the function misc::maprec in order to operate on the first operand of objects of the domain dummy, then unfreeze operates on o as expected:

dummy::maprec := 
  x -> extsubsop(x,
    1 = misc::maprec(extop(x,1), args(2..args(0)))



Any MuPAD® object

Return Values

Evaluated version of object after reactivating all inactive functions in it.

See Also

MuPAD Functions