piecewiseОбласть условно заданных объектов
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
piecewise([cond1,value1], [cond2,value2], …, <[Otherwise,valueN]>, <ExclusiveConditions>)
piecewise([cond1, value1], [cond2, value2], ...) задает условный объект, который равняется value1 если cond1 доказуемо верно, value2 если cond2 доказуемо верно, и так далее. Как правило, такие объекты задают кусочно-линейные функции или выражают решения на основе анализа случая свободных параметров математической проблемы. Смотрите Пример 1.
Парный [condition, value] называется ветвью. Если condition является доказуемо ложным, затем piecewise отбрасывает целую ветвь. Если condition доказуемо верно, затем piecewise возвращает соответствующий value. Если никакое условие в кусочном объекте не доказуемо верно, piecewise возвращает объект типа piecewise это содержит все ветви, за исключением ветвей с доказуемо ложными условиями.
Если все условия являются доказуемо ложными, или если вы вызываете piecewise без любых ветвей, затем piecewise возвращает undefined. Смотрите пример 1.
Условия не должны быть исчерпывающими или исключительными. Если условия содержат параметры, и вы заменяете значениями параметры, все условия могут стать ложными. Кроме того, несколько условий могут стать верными.
Если несколько условий одновременно верны, piecewise возвращает значение от первой ветви, которая содержит условие, распознанное верным. Убедитесь, что все значения, соответствующие истинным условиям, имеют то же математическое значение. Не используйте систему, чтобы распознать первое математически истинное условие верным. В качестве альтернативы можно использовать ExclusiveConditions опция, чтобы зафиксировать порядок ветвей.
piecewise([cond1, value1], [cond2, value2], ..., [Otherwise, valueN]) проверяет условия, и, если им не удовлетворяют, отбрасывания их, и возвращает valueN. Otherwise условие происходит в последней ветви. Это может произойти только однажды. Это остается неизменным пока существуют другие ветви, но это обработано как верное, когда все другие ветви отбрасываются, потому что их условия ложные. Смотрите Пример 2.
Система проверяет истину условий для текущих значений и свойств всех включенных идентификаторов каждый раз, когда это оценивает объект типа piecewise. Таким образом это упрощает кусочные выражения под всевозможными предположениями.
piecewise объекты могут быть вложены: и условиями и значениями может быть piecewise сами объекты. piecewise автоматически “сглаживает” такие объекты. Например, piecewise([conditionA, piecewise([conditionB, valueC])]) становится piecewise([conditionA and conditionB, valueC]). Смотрите пример 3.
Арифметические и относящиеся к теории множеств операции работают на piecewise объекты, если эти операции заданы для всех значений, содержавшихся в ветвях. Если f такая операция и p1, p2, ... piecewise объекты, затем f(p1, p2, ...) piecewise объект, состоящий из всех ветвей формы [cond1 and cond2 and ..., f(value1, value2, ...)], где [cond1, value1] ветвь p1, [cond2, value2] ветвь p2, и так далее. Другими словами, применение f поездки на работу с любым присвоением на свободные параметры в условиях. Смотрите Пример 4.
piecewise объекты могут также быть смешаны с другими объектами в таких операциях. В таких случаях, если p1 не piecewise объект, система обрабатывает его как piecewise объект с единственной ветвью [TRUE, p1]. Смотрите пример 5.
diff, float, limit, int и подобные функции обрабатывают выражения, включающие piecewise. Когда вы используете piecewise аргумент в унарных операторах и функциях с одним аргументом, система сопоставляет оператор или функцию к значениям в каждой ветви. Смотрите Пример 6, Пример 7 и Пример 8.
piecewise отличается от if и case переходящие операторы. Во-первых, piecewise использует механизм свойства при решении истины условий. Поэтому результат зависит от свойств идентификаторов, которые появляются в условиях. Во-вторых, piecewise условия обработок математически, в то время как if и case оцените их синтаксически. В-третьих, piecewise внутренне сортирует ветви. Если условия в нескольких ветвях верны, piecewise может возвратить любую из этих ветвей. Смотрите Пример 9.
ExclusiveConditions опция фиксирует порядок ветвей в кусочном выражении. Если условие в первой ветви возвращает TRUE, затем piecewise возвращает значение от первой ветви. Если истинное условие появляется в дальнейшей ветви, то piecewise возвращает значение от той ветви и удаляет все последующие ветви. Таким образом, piecewise с ExclusiveConditions очень похоже на if-elif-end_if оператор. Тем не менее, piecewise с ExclusiveConditions все еще учитывает предположения на идентификаторах и обрабатывает условия математически в то время как if-elif-end_if обрабатывает их синтаксически. Смотрите Пример 10.
piecewise учитывает свойства идентификаторов.
Задайте этот прямоугольный функциональный f. Без дополнительной информации о переменной x система не может оценить условия к TRUE или FALSE. Поэтому это возвращает piecewise объект.
f := x -> piecewise([x < 0 or x > 1, 0], [x >= 0 and x <= 1, 1])

Вызовите функциональный f со следующими аргументами. Каждый раз, когда вы вызываете эту кусочно-линейную функцию, система проверяет условия в свои ветви и выполняет функцию.
f(0), f(2), f(I)
![]()
Создайте эту кусочно-линейную функцию с помощью синтаксиса, который включает Otherwise:
pw:= piecewise([x > 0 and x < 1, 1], [Otherwise, 0])

Оцените pw для этих трех значений:
pw | x = 1/2; pw | x = 2; pw | x = I;
![]()
![]()
![]()
Для дальнейших расчетов удалите идентификатор pw:
delete pw:
Создайте это вложенное кусочное выражение. MuPAD® сглаживается, вложил piecewise объекты.
p1 := piecewise([a > 0, a^2], [a <= 0, -a^2]): piecewise([b > 0, a + b], [b = 0, p1 + b], [b < 0, a + b])

Найдите сумму этих кусочно-линейных функций. Можно выполнить большинство операций на кусочно-линейных функциях тот же путь, как вы были бы по обычным арифметическим выражениям. Результат арифметической операции только задан в точках, где все аргументы заданы:
piecewise([x > 0, 1], [x < -3, x^2]) + piecewise([x < 2, x])

Решите это уравнение. Решатель возвращает результат как кусочный набор:
S := solve(a*x = 0, x)

Можно использовать относящиеся к теории множеств операции, работают на такие наборы. Например, найдите пересечение этого набора и интервала (3, 5):
S intersect Dom::Interval(3, 5)

Много унарных функций перегружаются для piecewise путем отображения их с объектами во всех ветвях входа:
f := piecewise([x >= 0, arcsin(x)], [x < 0, arccos(x)]): sin(f)

Найдите предел этой кусочно-линейной функции:
limit(piecewise([a > 0, x],[a < 0 and x > 1, 1/x],
[a < 0 and x <= 1, -x]), x = infinity)
Найдите интеграл этой кусочно-линейной функции:
int(piecewise([x < 0, x^2], [x > 0, x^3]), x = -1..1)
![]()
Создайте эту кусочно-линейную функцию. Здесь, piecewise не может определить, является ли какая-либо ветвь TRUE или FALSE. Сделать это, piecewise дополнительная информация потребностей об идентификаторе a.
p1 := piecewise([a = 0, 0], [a <> 0, 1/a])

Создайте подобную структуру при помощи if-then-else. if-then-else структура оценивает условия синтаксически. Здесь, a = 0 является технически ложным потому что идентификатор a и целочисленный 0 различные объекты.
p2 := (if a = 0 then 0 else 1/a end)
![]()
piecewise принимает свойства во внимание идентификаторов:
p1 := piecewise([a + b = 0, 0], [Otherwise, 1/a]) assuming a + b = 0
![]()
if-then-else не делает:
p2 := (if a + b = 0 then 0 else 1/a end) assuming a + b = 0
![]()
Для дальнейших расчетов удалите идентификаторы aB, p1, и p2:
delete a, b, p1, p2:
Создайте это кусочное выражение:
p := piecewise([x > 0, 1], [y > 0, 2])

Выполните выражение в y = 1:
p | y = 1
![]()
Теперь создайте кусочное выражение с теми же ветвями, но на этот раз используйте ExclusiveConditions зафиксировать порядок ветвей. Когда вы используете эту опцию, любая ветвь может быть верной, только если предыдущие ветви являются ложными.
pE := piecewise([x > 0, x], [y > 0, y], ExclusiveConditions)

Выполните выражение в y = 1:
pE | y = 1

Когда вы используете ExclusiveConditions, piecewise действует одинаково как if-then-else оператор, но не игнорирует свойства идентификаторов. Например, установите предположение что x = 0:
assume(x = 0)
piecewise вызов функции возвращается 0, потому что он использует предположение на идентификаторе x:
p := piecewise([x = 0, x], [Otherwise, 1/x^2])
![]()
Соответствующий if-then-else оператор игнорирует предположение, и, поэтому, возвращает 1/x^2:
pIf := (if x = 0 then x else 1/x^2 end)
![]()
Для дальнейших расчетов удалите идентификаторы p, pEX, и pIf:
delete p, pE, x, pIf:
Найдите набор предельных точек этой кусочно-линейной функции путем вызова limit с Intervals опция:
limit(piecewise([a > 0, sin(x)], [a < 0 and x > 1, 1/x],
[a < 0 and x <= 1, -x]), x = infinity, Intervals)
Создайте этот piecewise объект:
f := piecewise([x > 0, 1], [x < -3, x^2])

Извлеките конкретное условие или объект:
piecewise::condition(f, 1), piecewise::expression(f, 2)
![]()
Оператор индекса имеет то же значение как piecewise::expression и может быть введен быстрее:
f[2]
![]()
piecewise::branch функция извлекает целые ветви:
piecewise::branch(f, 1)
![]()
Можно сформировать другой piecewise объект от ветвей, для которых условие удовлетворяет данному критерию выбора или разделило вход в два piecewise объекты, как системные функции select и split сделайте это для списков:
piecewise::selectConditions(f, has, 0)
![]()
piecewise::splitConditions(f, has, 0)
![]()
Можно также создать копию f с некоторыми ветвями, добавленными или удаленными:
piecewise::remove(f, 1)
![]()
piecewise::insert(f, [x > -3 and x < 0, sin(x)])

|
Булевы константы или выражения, представляющие логические формулы |
|
Произвольные объекты |
|
Идентификатор, который задает последнее условие. Это условие всегда обрабатывается как истинное условие. |
|
|
Операнды piecewise объект (ветви) является парами, состоящими из условия и значения, допустимого при том условии.
Методы, перегружающие системные функции всегда, принимают, что были названы через перегрузку, и что существует некоторый условно заданный объект среди их аргументов. Все другие методы не принимают, что один из их аргументов имеет тип piecewise. Это упрощает использование piecewise: всегда позволяется ввести p:=piecewise(...) и вызывать некоторый метод piecewise с p в качестве аргумента. Вы не должны заботиться об особом случае где p не имеет типа piecewise потому что некоторое условие в его определении верно, или все условия являются ложными.