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
Для дальнейших расчетов удалите идентификаторы a
B
, 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
, pE
X
, и 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
потому что некоторое условие в его определении верно, или все условия являются ложными.