subs

Займите место в объект

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

subs(f, old = new, <Unsimplified>)
subs(f, old1 = new1, old2 = new2, …, options)
subs(f, [old1 = new1, old2 = new2, …], options)
subs(f, {old1 = new1, old2 = new2, …}, options)
subs(f, table(old1 = new1, old2 = new2, …), options)
subs(f, s1, s2, …, options)

Описание

subs(f, old = new) ищет f операнды, совпадающие с old, и заменяет old на new. Смотрите Пример 1.

subs не заменяет подвыражения. Например, subs(a + b + c, b + c = d) не заменяет b + c. Вместо этого используйте subsex. Для получения дополнительной информации смотрите Пример 8.

Функция subs возвращает измененную копию объекта. Функция не изменяет сам объект.

По умолчанию функция subs не оценивает результат замены. Чтобы осуществить оценку всех измененных подвыражений, используйте опцию EvalChanges. Кроме того, можно переоценить целый возвращенный результат при помощи функции eval. Оценка возвращенного результата медленнее и менее эффективна, чем оценка измененных подвыражений. Смотрите Пример 3 и Пример 4.

Вызов subs(f, old1 = new1, old2 = new2, ...) применяет заданные замены в последовательности слева направо (последовательная замена). Этот вызов применяет каждую замену (за исключением первой замены) к результату предыдущей замены. Смотрите Пример 5.

Вызов subs(f, [old1 = new1, old2 = new2, ...]) применяет все заданные замены к операндам исходного входного объекта f (параллельная замена). Этот вызов не использует результаты никаких предыдущих замен. Если вы задаете несколько замен того же операнда, этот вызов вычисляет только первую замену. При определении замен списками наборы или таблицы вызывают параллельную замену. Смотрите Пример 6.

subs(f, s1, s2, ...) вызова является общей формой замены, которая может объединить последовательные и параллельные замены. Этот вызов эквивалентен subs(... subs(subs(f, s1), s2), ...). MuPAD® обрабатывает каждый шаг замены как последовательное или параллельную замену в зависимости от формы параметров s1, s2, . Смотрите Пример 7.

Можно использовать subs, чтобы заменить операнды последовательностей выражения. Функция subs не сглаживает такие объекты. Смотрите Пример 9.

Если вы не задаете замены, subs возвращает исходное выражение без модификаций. Например, subs(f) возвращает f.

Примеры

Пример 1

Используйте функцию subs, чтобы заменить операндами в следующих выражениях:

subs(a + b*a, a = 4)

subs([a * (b + c), sin(b +c)], b + c = a)

Пример 2

Когда заменяющий синусоидальную функцию в выражении, используйте команду hold, чтобы предотвратить оценку идентификатора sin:

subs(sin(x), hold(sin) = cos);
domtype(hold(sin))

В противном случае MuPAD заменяет sin своим значением. Функциональная среда (см. funcenv) задает значение sin:

subs(sin(x), sin = cos);
domtype(sin)

В выражении sin(x) 0-th операнд sin является идентификатором, не функциональной средой:

domtype(op(sin(x), 0))

Пример 3

Функция subs выполняет исходное выражение, выполняет замену, но не выполняет измененное выражение:

subs(y^2 + sin(x), x = PI)

Чтобы оценить измененное подвыражение, используйте опцию EvalChanges:

subs(y^2 + sin(x), x = PI, EvalChanges)

Также используйте функцию eval, чтобы оценить результат, возвращенный subs:

S := subs(y^2 + sin(x), x = PI):
eval(S)

Пример 4

Функция subs с опцией EvalChanges возвращает те же результаты как оценка целого выражения:

eval(subs(sin(x + 3 - PI)*numeric::int(_plus(sin(k/y) $ k = 1..5),
                                       y = 0..1), x=-3));
subs(sin(x + 3 - PI)*numeric::int(_plus(sin(k/y) $ k = 1..5),
                                  y = 0..1), x = -3, EvalChanges)

Оценка возвращенного результата медленнее и менее эффективна, чем оценка измененных подвыражений:

time(eval(subs(sin(x + 3 - PI)*numeric::int(_plus(sin(k/y) $ k = 1..5),
                                            y = 0..1), x = -3)));
time(subs(sin(x + 3 - PI)*numeric::int(_plus(sin(k/y) $ k = 1..5),
                                       y = 0..1), x = -3, EvalChanges))

Пример 5

Следующий вызов приводит к последовательной замене:

subs(x^3 + y*z, x = y, y = z)

Пример 6

Функция subs позволяет вам использовать последовательные и параллельные замены. Например, замените операндом в следующих выражениях последовательно:

subs(a^2 + b^3, a = b, b = a)

subs(a^2 + b^3, b = a, a = b)

Для того же выражения параллельная замена подкачивает идентификаторы:

subs(a^2 + b^3, [a = b, b = a])

В следующем вызове замена y + x для a приводит к промежуточному результату y + 2*x. Оттуда, замена z для x приводит к y + 2 z:

subs(a + x, a = x + y, x = z)

Параллельная замена приводит к различному результату. Следующий вызов substitues a с x + y. Одновременно, этот вызов заменяет операндом x исходного выражения a + x с z:

subs(a + x, [a = x + y, x = z])

Если вы задаете замены с помощью набора таблицы уравнений, функция subs также выполняет параллельную замену:

subs(a + x, {a = x + y, x = z})

T := table(): T[a] := x + y: T[x] := z: T

subs(a + x, T)

delete T:

Пример 7

Можно объединить последовательные и параллельные замены:

subs(a + x, {a = x + y, x = z}, x = y)

Пример 8

Функция subs заменяет только те операнды, которые может возвратить функция op. Следующее выражение содержит подвыражение x + y как операнд op(f, [1, 2]):

f := sin(z*(x + y)): op(f, [1, 2]);

Следовательно, функция subs заменяет это подвыражение:

subs(f, x + y = z)

Синтаксически, следующая сумма не содержит подвыражение x + y. Поэтому функция subs не заменяет его:

subs(x + y + z, x + y = z)

В отличие от subs, функция subsex находит и заменяет частичные суммы и продукты:

subsex(x + y + z, x + y = z)

subs(a*b*c, a*c = 5), subsex(a*b*c, a*c = 5)

delete f:

Для получения дополнительной информации на функциях замены в MuPAD, смотрите, Изменяют Подвыражения. Для получения дополнительной информации на деревьях выражений, смотрите, Визуализируют Деревья выражений.

Пример 9

Можно заменить операндами последовательностей выражения. Заключите последовательности в круглые скобки:

subs((a, b, a*b), a = x)

Пример 10

Опция Unsimplified подавляет упрощение:

subs(a + b + 2, a = 1, b = 0, Unsimplified)

Пример 11

При попытке заменить чем-то в области, MuPAD игнорирует замену. Например, задайте новую область с методами "foo" и "bar":

mydomain := newDomain("Test"):
mydomain::foo := x -> 4*x:
mydomain::bar := x -> 4*x^2:

Теперь попытайтесь заменить каждый номер 4 в области с номером 3:

mydomain := subs(mydomain, 4 = 3):

Та замена не имеет никакого эффекта:

mydomain::foo(x), mydomain::bar(x)

Чтобы заменить объектами в доменном методе, необходимо занять место в отдельных методах:

mydomain::foo := subs(mydomain::foo, 4 = 3):
mydomain::bar := subs(mydomain::bar, 4 = 3):
mydomain::foo(x), mydomain::bar(x)

delete mydomain:

Параметры

f

Произвольный объект MuPAD

old, old1, old2, …

Произвольные объекты MuPAD

new, new1, new2, …

Произвольные объекты MuPAD

s1, s2, …

Или уравнения old = new, или списки или наборы таких уравнений или таблицы, записи которых интерпретированы уравнения как таковые.

Опции

EvalChanges

После замены оцените все измененные подвыражения.

По умолчанию функция subs не оценивает измененный объект. Опция EvalChanges осуществляет оценку всех измененных подвыражений. Смотрите Пример 3 и Пример 4.

Unsimplified

Не упрощайте результат замены.

Как последний шаг замены, MuPAD автоматически упрощает (но не оценивает), измененный объект. Опция Unsimplified подавляет итоговое упрощение. Смотрите Пример 10.

Возвращаемые значения

Копия входного объекта с замененными операндами.

Перегруженный

f

Смотрите также

Функции MuPAD