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