Блокноты 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)