subsex
Расширенная замена
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
subsex(f
,old = new
, <Unsimplified>) subsex(f
,old1 = new1, old2 = new2, …
, <Unsimplified>) subsex(f
,[old1 = new1, old2 = new2, …]
, <Unsimplified>) subsex(f
,{old1 = new1, old2 = new2, …}
, <Unsimplified>) subsex(f
, table(old1 = new1, old2 = new2, …
), <Unsimplified>) subsex(f
,s1, s2, …
, <Unsimplified>)
subsex(f, old = new)
возвращает копию объекта f
, в котором все выражения, совпадающие с old
, заменяются значением new
.
subsex
возвращает измененную копию объекта, но не изменяет сам объект.
subsex(f, old = new)
ищет f
подвыражения, совпадающие с old
. Каждое такое подвыражение заменяется new
.
В отличие от функции subs
, subsex
заменяет “неполные” подвыражения. Например, subsex(a + b + c, b + c = d)
заменяет b + c
, но subs(a + b + c, b + c = d)
не заменяет b + c
. В целом комбинации операндов не “операторы” +
, *
, and
, _exprseq
, intersect
, or
, _lazy_and
, _lazy_or
и union
могут быть заменены. В частности, могут быть заменены частичные суммы и частичные продукты. Обратите внимание на то, что эти операции приняты, чтобы быть коммутативными, например, subsex(a*b*c, a*c = new)
действительно заменяет частичный продукт a*c
new
. Смотрите Пример 1 и Пример 2. Однако преимущество subs
по subsex
состоит в том, что subs
намного быстрее.
subsex
дополнительно заменяет степени на ту же основу, если экспонента выражения является целочисленным кратным заменяющая степень, например, как в subsex(a^4, a^2 = new)
. Это правило также совпадает с инвертированными выражениями как в subsex(1/sqrt(x), sqrt(x)=new)
, который внутренне эквивалентен subsex(x^(-1/2), x^(1/2)=new)
. Cf. Пример 3.
Вызов subsex(f, old1 = new1, old2 = new2, ...)
вызывает “sequential substitution”. Смотрите страницу справки subs
для деталей.
Вызов subsex(f, [old1 = new1, old2 = new2, ...])
вызывает “parallel substitution”. Смотрите страницу справки subs
для деталей.
subsex(f, s1, s2, ...)
вызова описывает самую общую форму замены, которая может объединить последовательные и параллельные замены. Этот вызов эквивалентен subsex(... subsex(subsex(f, s1), s2), ...)
. В зависимости от формы s1
, s2
, …, последовательные или параллельные замены выполняются на каждом шаге. Пример может быть найден на странице справки subs
.
После замены не оценен результат. Используйте функциональный eval
, чтобы осуществить оценку. Cf. Пример 5.
Операнды последовательностей выражения могут быть заменены subsex
. Такие объекты не сглажены. Cf. Пример 6.
Вызов subsex(f)
позволен; это возвращает f
без модификаций.
Мы демонстрируем некоторые простые замены; subsex
находит и заменяет частичные суммы и продукты:
subsex(a + b + c, a + c = x)
subsex(a*b*c, a*c = x)
subsex(a * (b + c) + b + c, b + c = a)
subsex(a + b*c*d + b*d, b*d = c);
Мы заменяем подвыражения в символьном объединении множеств:
subsex(a union b union c, a union b = w)
То же самое может быть достигнуто при помощи функционального эквивалента _union
оператора union
:
subsex(_union(a, b, c), _union(a, b) = w)
Для получения дополнительной информации на функциях замены в MuPAD®, смотрите, Изменяют Подвыражения. Для получения дополнительной информации на деревьях выражений, смотрите, Визуализируют Деревья выражений.
subsex
заменяет степени на с той же основой, если экспонента выражения является целочисленным кратным заменяющая степень:
subsex(1/a^4, a^2 = X)
Это содержит даже для экспонент, которые являются выражениями:
subsex(1/a^(6*x), a^(2*x) = X)
1/sqrt(x)
является внутренне x^(-1/2)
, таким образом, замена sqrt(x)
, который является внутренне x^(1/2)
, работает, также:
subsex(1/sqrt(n), sqrt(n) = X)
subsex
часто полезен, чтобы преобразовать вывод одной команды в форму, требуемую следующей. Как пример, мы вычисляем Преобразование Лапласа двумерного ОДУ
,
,
и преобразуйте результат в форму, подходящую для вызова solve
, заменив неизвестные Преобразования Лапласа символьными именами:
xfrm1 := laplace(x'(t) = x(t) + 2*y(t), t, s); xfrm2 := laplace(y'(t) = 5*x(t) + 2*y(t), t, s)
Для удобочитаемости мы даем имена обеим заменам:
sub_x := laplace(x(t),t,s) = X: sub_y := laplace(y(t),t,s) = Y:
Leqn1 := subs(xfrm1, sub_x, sub_y, x(0) = 1); Leqn2 := subs(xfrm2, sub_x, sub_y, y(0) =-2)
solve({Leqn1, Leqn2}, {X, Y})
Результат subsex
не оценен. В следующем вызове идентификатор sin
не заменяется его значением, т.е. процедурой, задающей поведение синусоидальной функции системы. Следовательно, sin(2*PI)
не упрощен до 0 этой процедурой:
subsex(sin(2*x*y), x*y = PI)
Функциональный eval
осуществляет оценку:
eval(subsex(sin(2*x*y), x*y = PI))
Операндами последовательностей выражения можно заменить. Обратите внимание на то, что последовательности должны быть заключены в скобках:
subsex((a, b, a*b*c), a*b = x)
Опция Unsimplified
подавляет упрощение:
subsex(2 + a + b, a + b = 0, Unsimplified)
|
Произвольный объект MuPAD |
|
Произвольные объекты MuPAD |
|
Произвольные объекты MuPAD |
|
Или уравнения |
|
Предотвращает упрощение возвращенного объекта после замены Как последний шаг замены, измененный объект упрощен (однако, не оценен). Эта опция подавляет это итоговое упрощение. Смотрите Пример 7. |
Копия входного объекта с замененными операндами.
f