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