Блокноты 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 inf гарантирует, что константы, появляющиеся многократно всегда, получают тот же идентификатор. Кроме того, можно получить доступ к помнить таблице процедуры f и выберите, какие замены вы хотите сделать:
select([op(op(f,5))], _not@bool)
![]()