subsop
Замените операнды
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
subsop(object
, i1 = new1, i2 = new2, …
, <Unsimplified>)
subsop
возвращает измененную копию объекта, но не изменяет сам объект.
subsop(object, i = new)
заменяет операнд op(object, i)
new
. Операнды заданы таким же образом как с функциональным op
: i
может быть целым числом или списком целых чисел. Например, subsop(object, [j, k] = new)
заменяет подоперанд op(op(object, j), k)
. Cf. Пример 2. В отличие от op
, области значений не могут использоваться в subsop
, чтобы задать больше чем один операнд, чтобы заменить. Несколько уравнений замены должны быть заданы вместо этого.
Если несколько операндов должны быть заменены, заданные замены обрабатываются в последовательности слева направо. Каждая замена выполняется, и результат обрабатывается далее со следующей заменой. Промежуточные объекты не упрощены.
Результат subsop
не оценен далее. Это может быть оценено через функциональный eval
. Cf. Пример 3.
Операнды последовательностей выражения могут быть заменены subsop
. Такие объекты не сглажены.
Обратите внимание на то, что порядок операндов может измениться, заменив операнды и оценив результат. Cf. Пример 4.
FAIL
возвращен, если к операнду нельзя получить доступ.
Замена через subsop
быстрее, чем через subs
или subsex
.
Вызов subsop(object)
позволен; это возвращает объект без модификаций.
Мы демонстрируем, как заменить один или несколько операндов выражения:
x := a + b: subsop(x, 2 = c)
subsop(x, 1 = 2, 2 = c)
Также 0-th операнд выражения (“оператор”) может быть заменен:
subsop(x, 0 = _mult)
Сама переменная x
не была затронута заменами:
x
delete x:
Следующий вызов задает подоперанд c
списком целых чисел:
subsop([a, b, f(c)], [3, 1] = x)
Этот пример демонстрирует эффект упрощения. Следующая замена заменяет первый операнд a
2. Результат упрощает до 3:
subsop(a + 1, 1 = 2)
Опция Unsimplified
подавляет упрощение:
subsop(a + 1, 1 = 2, Unsimplified)
Следующий вызов демонстрирует различие между упрощением и оценкой. После замены PI
для x
идентификатор sin
не оценен, т.е. тело системной функции, sin
не выполняется:
subsop(sin(x), 1 = PI)
Оценка sin
упрощает результат:
eval(%)
Порядок операндов может измениться заменами. При заменении z
идентификатор b
изменяет внутренний порядок условий в x
:
x := a + b + c: op(x)
x := subsop(x, 2 = z): op(x)
delete x:
|
Любой объект MuPAD® |
|
Целые числа или списки целых чисел |
|
Произвольные объекты MuPAD |
|
Как последний шаг замены, измененный объект упрощен (однако, не оценен). Эта опция подавляет это итоговое упрощение. Cf. Пример 3. |
Входной объект с замененными операндами или FAIL
.
object
Для перегрузки subsop
достаточно обработать случаи subsop(object)
и subsop(object, i = new)
.
Случай, где положение операнда, который будет заменен, дано списком, всегда обрабатывается рекурсивно: Во-первых, op
вызван панелью списка последним элементом, чтобы найти объект занять место в (использование перегрузки op
, если существующий, храня все промежуточные результаты), то замена выполняется на том подобъекте (использование перегрузки subsop
формы subsop(subobj, i = new)
). Результатом заменяют в предпоследний результат рекурсивного вызова op
, снова уважая любую перегрузку subsop
, и так далее до передней стороны списка.