Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Операции на символьных выражениях часто включают подвыражения открытия и заменяющий их на значения или на другие подвыражения. MuPAD® обеспечивает следующие функции для этой задачи:
Замены evalAt задали объекты в дереве выражений с заданными значениями или подвыражениями, и затем выполняют выражение. Эта функция заменяет только целые ответвления деревьев выражений. Это не может заменить часть ответвления, например, двух условий в сумме трех условий:
a*(b + c) | b = d, a*(b + c) | b + c = d, a*(b + c + 1) | b + c = d
![]()
evalAt заменяет только свободные идентификаторы:
int(f(x), x = 0..1) + f(x) | x = 100

Замены subs задали объекты в дереве выражений с заданными значениями или подвыражениями. Эта функция не может заменить часть ответвления в дереве выражений:
subs(a*(b + c), b + c = d), subs(a*(b + c + 1), b + c = d)
![]()
После замены subs не выполняет получившееся выражение (несмотря на то, что это может упростить выражение). Можно осуществить оценку измененных подвыражений при помощи опции EvalChanges:
subs(ln(x), x = E), subs(ln(x), x = E, EvalChanges)
![]()
subs заменяет и свободные и зависимые идентификаторы. В некоторых случаях заменение зависимых идентификаторов может вызвать недопустимые результаты:
subs(int(f(x), x = 0..1) + f(x), x = 100)

subsex анализирует ассоциативные системные операторы и может заменить часть ответвления в дереве выражений:
subsex(a*(b + c), b + c = d), subsex(a*(b + c + 1), b + c = d)
![]()
subsex не выполняет получившееся выражение:
subsex(ln(x + a + 1), x + a = E - 1)
![]()
Используйте eval, чтобы оценить результаты, возвращенные subsex:
eval(%)
![]()
subsop заменяет только целые ответвления в дереве выражений выражения, тот же путь как subs. При использовании subsop необходимо знать положение (индекс) ответвления в выражении во внутреннем порядке, который может отличаться от выходного порядка, используемого, чтобы представлять выражение на экране. Чтобы найти внутренний индекс конкретного подвыражения, используйте функцию op:
ex := sin(a*x + b) + cos(a*x + b): op(ex);
![]()
op(ex, 2);
![]()
op(ex, [2, 1]);
![]()
op(ex, [2, 1, 2]);
![]()
op(ex, [2, 1, 2, 1])
![]()
Теперь можно использовать subsop, чтобы заменить параметр a на некоторое значение. Например, замените его на значение 3:
subsop(ex, [2, 1, 2, 1] = 3)
![]()
prog::find помогает вам найти все случаи определенного значения в выражении. Например, найдите все суммы в этом выражении:
ex := (x + 1)/(x^2 + 2*x - 2) - 1/x + 1/(x + 1): pos := [prog::find(ex, hold(_plus))]; map(pos, p -> op(ex, p)); map(pos, p -> op(ex, p[1..-2]))
![]()
![]()

Также можно найти все подвыражения конкретного типа (например, все Функции Бесселя или все ответвления, не содержащие x), выполнить некоторый код для этих subexressions и заменить их на возвращаемое значение того кода. Для этой задачи используйте функцию misc::maprec.
Предположим, что вы хотите переписать все условия, которые содержат синусоидальные функции и функции тангенса с точки зрения косинусных функций. (В этом примере не используйте sin (x) 2 = 1 - cos (x) 2 и подобные тождества.) Сначала, создайте функции sin2cos и tan2cos, которые переписывают выражения с точки зрения косинусной функции. Эти функции получают доступ к операндам синусоидальных функций и функций тангенса с помощью op(ex):
sin2cos := ex -> cos(op(ex) - PI/2): tan2cos := ex -> cos(op(ex) - PI/2)/cos(op(ex)):
Теперь можно использовать эти функции когда заменяющий все случаи синусоидальных функций и функций тангенса в выражении. Чтобы заменить подвыражения исходного выражения, используйте misc::maprec. Функция misc::maprec использует синтаксис misc::maprec(expression, selector = replacement), где:
expression является исходным выражением (подвыражения которого вы хотите заменить).
selector является критерием выбора (например, набор типов подвыражений, которые вы хотите заменить).
replacement является процедурой, которую вы хотите использовать, чтобы заменить подвыражения исходного выражения.
MuPAD применяет misc::maprec рекурсивно ко всем подвыражениям исходного выражения. Например, в этом вызове misc::maprec заменяет все случаи sin и tan, включая синусоидальную функцию в tan(sin(x)):
misc::maprec(sin(x) + tan(x^2) - tan(sin(x)),
{"sin"} = sin2cos,
{"tan"} = tan2cos)
Помимо типов данных или типов выражений, таких как "sin" или "tan", можно использовать процедуры, чтобы представлять критерии выбора в misc::maprec. В этом примере критерий выбора misc::maprec является процедурой ex -> bool(freeIndets(ex) = {}), который исключает свободные идентификаторы и выбирает все константы выражения. Используя процедуру f как replacement, misc::maprec заменяет все нерациональные константы выражения с новыми идентификаторами:
f :=
proc(x)
option remember;
begin
if testtype(x, Type::Rational) then x
else genident();
end_if;
end:
misc::maprec(a = 5*b + PI*sqrt(2)*c + PI,
(ex -> bool(freeIndets(ex) = {})) = f)![]()
option remember в f гарантирует, что константы, появляющиеся многократно всегда, получают тот же идентификатор. Кроме того, можно получить доступ к помнить таблице процедуры f и выбор, какие замены вы хотите сделать:
select([op(op(f,5))], _not@bool)
![]()