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
.
Используйте subs
функционируйте, чтобы заменить операндами в следующих выражениях:
subs(a + b*a, a = 4)
subs([a * (b + c), sin(b +c)], b + c = a)
Когда заменяющий синусоидальную функцию в выражении, используйте 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))
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)
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))
Следующий вызов приводит к последовательной замене:
subs(x^3 + y*z, x = y, y = z)
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:
Можно объединить последовательные и параллельные замены:
subs(a + x, {a = x + y, x = z}, x = y)
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, смотрите, Изменяют Подвыражения. Для получения дополнительной информации на деревьях выражений, смотрите, Визуализируют Деревья выражений.
Можно заменить операндами последовательностей выражения. Заключите последовательности в круглые скобки:
subs((a, b, a*b), a = x)
Unsimplified
опция подавляет упрощение:
subs(a + b + 2, a = 1, b = 0, Unsimplified)
При попытке заменить чем-то в области, 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:
|
Произвольный объект MuPAD |
|
Произвольные объекты MuPAD |
|
Произвольные объекты MuPAD |
|
Любой уравнения |
|
После замены оцените все модифицированные подвыражения. По умолчанию, |
|
Не упрощайте результат замены. Как последний шаг замены, MuPAD автоматически упрощает (но не оценивает), модифицированный объект. |
Копия входного объекта с замененными операндами.
f