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 учитывает свойства идентификаторов.

Примеры

Пример 1

Задайте этот прямоугольный функциональный 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)

Пример 2

Создайте эту кусочно-линейную функцию с помощью синтаксиса, который включает 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:

Пример 3

Создайте это вложенное кусочное выражение. 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])

Пример 4

Найдите сумму этих кусочно-линейных функций. Можно выполнить большинство операций на кусочно-линейных функциях тот же путь, как вы были бы по обычным арифметическим выражениям. Результат арифметической операции только задан в точках, где все аргументы заданы:

piecewise([x > 0, 1], [x < -3, x^2]) + piecewise([x < 2, x])

Пример 5

Решите это уравнение. Решатель возвращает результат как кусочный набор:

S := solve(a*x = 0, x)

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

S intersect Dom::Interval(3, 5)

Пример 6

Много унарных функций перегружаются для piecewise путем отображения их с объектами во всех ветвях входа:

f := piecewise([x >= 0, arcsin(x)], [x < 0, arccos(x)]):
sin(f)

Пример 7

Найдите предел этой кусочно-линейной функции:

limit(piecewise([a > 0, x],[a < 0 and x > 1, 1/x],
                [a < 0 and x <= 1, -x]), x = infinity)

Пример 8

Найдите интеграл этой кусочно-линейной функции:

int(piecewise([x < 0, x^2], [x > 0, x^3]), x = -1..1)

Пример 9

Создайте эту кусочно-линейную функцию. Здесь, 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:

Пример 10

Создайте это кусочное выражение:

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:

Пример 11

Найдите набор предельных точек этой кусочно-линейной функции путем вызова limit с Intervals опция:

limit(piecewise([a > 0, sin(x)], [a < 0 and x > 1, 1/x],
         [a < 0 and x <= 1, -x]), x = infinity, Intervals)

Пример 12

Перепишите sign функция в терминах piecewise объект:

f := rewrite(sign(x), piecewise)

Пример 13

Создайте этот 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)])

Параметры

cond1, cond2, …

Булевы константы или выражения, представляющие логические формулы

object1, object2, …

Произвольные объекты

Otherwise

Идентификатор, который задает последнее условие. Это условие всегда обрабатывается как истинное условие.

Опции

ExclusiveConditions

ExclusiveConditions опция фиксирует порядок ветвей в кусочном выражении. Эта опция вызывает piecewise автоматически удалить ветви с ложными условиями. Таким образом, piecewise с ExclusiveConditions почти эквивалентно if-elif-end_if оператор, за исключением того, что piecewise учитывает предположения на идентификаторах. Например, если условие в первой ветви возвращает TRUE, затем piecewise возвращает выражение в первую ветвь. Если истинное условие появляется в дальнейшей ветви, то piecewise возвращает выражение в ту ветвь и удаляет все последующие ветви.

Методы

развернуть все

Математические методы

_in(p, S)

contains(p, a)

Этот метод перегружает функциональный contains. Значения во всех ветвях должны быть допустимыми первыми аргументами для contains.

diff(p, <x, …>)

Если никакие переменные не даны, p возвращен.

discont(p, x, <F>)

discont(p, x = a .. b, <F>)

Значения во всех ветвях p должны быть арифметические выражения.

Дополнительный третий параметр имеет то же значение что касается функционального discont.

Что касается функционального discont, только разрывы в данном интервале [a,b] возвращены при вызове piecewise(p, x = a..b).

disregardPoints(p)

expand(p)

factor(p)

getElement(p)

Результатом является FAIL если никакой такой общий элемент не найден.

Этот метод перегружает функциональный solvelib::getElement.

has(p, a)

int(p, x, <r>)

Если область значений a..b дан, этот метод вычисляет определенный интеграл p когда x пробегает ту область значений.

ilaplace(p, x, t)

isFinite(p)

Этот метод перегрузки solvelib::isFinite.

laplace(p, x, t)

limit(p, x, <Left | Right | Real>, <Intervals>, <NoWarning>)

limit(p, x = x0, <Left | Right | Real>, <Intervals>, <NoWarning>)

Когда названо Intervals опция, метод возвращает набор предельных точек функции.

Если метод не может найти функциональный предел и не может доказать, что предел не существует, вызов функции возвращает неоцененный limit функция.

Если предел функции не существует, метод возвращает специальное значение undefined.

Этот метод перегружает функциональный limit.

normal(p)

partfrac(p)

restrict(p, C)

set2expr(p, x)

Объекты во всех ветвях p должен представлять наборы.

Этот метод перегружает системную функцию _in.

simplify(p)

solve(p, x, <option1, option2, …>)

Для каждой ветви [condition, value] из p, с value будучи уравнением или неравенством, метод определяет набор всех значений x таким образом, что оба condition и value станьте верными математически, и возвращает объединение всех полученных наборов. Возвращаемое значение может быть условно заданным набором.

Этот метод перегружает функциональный solve. Смотрите соответствующую страницу справки для описания доступных параметров и обзора типов наборов, которые могут быть возвращены.

solveConditions(p, x)

Union(p, x, indexset)

Значения во всех ветвях p должен представлять наборы.

Для каждой ветви [condition, value] из p, этот метод делает следующее. Это заменяет x в value все значения от indexset удовлетворение condition и берет объединение по всем полученным наборам. Затем это возвращает объединение по получившимся наборам для всех ветвей.

Этот метод перегружает функциональный solvelib::Union.

Методы доступа

_concat(p, …)

branch(p, n)

op(p)

op(p, n)

op(p, n) возвращает nветвь th p как список. Если n = 0, то piecewise возвращен.

setBranch(p, i, b)

numberOfBranches(p)

condition(p, i)

setCondition(p, i, cond)

expression(p, i)

Вместо piecewise::expression(p, i), оператор индекса p[i] может использоваться синонимично.

_index(p, i)

piecewise::expression может использоваться синонимично.

setExpression(p, i, a)

insert(p, b)

b может или быть ветвь, извлеченная из другого условно заданного объекта с помощью extop, или список [condition, object].

Смотрите пример 13.

extmap(p, f, <a, …>)

mapConditions(p, f, <a, …>)

map(p, f, <a, …>)

map(p, f) эквивалентно piecewise::extmap(p, map, f).

remove(p, i)

splitBranch(p, i, newcondition)

selectConditions(p, f, <a, …>)

Для каждого условия в p, f(condition a, …) должен возвратить булеву константу.

Если ни одно из условий не удовлетворяет критерию выбора, undefined возвращен.

selectExpressions(p, f, <a, …>)

Для каждого значения в p, f(value a, …) должен возвратить булеву константу.

Если ни один из объектов не удовлетворяет критерию выбора, undefined возвращен.

splitConditions(p, f, <a, …>)

Для каждого условия в p, f(condition a, …) должен возвратить булеву константу.

Смотрите пример 13.

subs(p, s, …)

Этот метод перегружает функциональный subs. Синтаксис вызова идентичен этой функции. Смотрите соответствующую страницу справки для описания различных типов, которые позволены для s.

zip(p1, p2, f)

Если мы рассматриваем условно заданные объекты как функции от набора A значений параметров к набору B объектов, этот метод реализует каноническое расширение бинарной операции f на B к бинарной операции g на съемочной площадке B A всех функций от A до B через g (p1, p2) (a) = f (p1 (a), p2 (a)) для всего a в A.

Если только один из первых двух аргументов — p1, скажите — имеет тип piecewise, затем каждая ветвь [condition, value] из p1 заменяется [condition, f(value, p2)].

Если никакой p1 ни p2 имеют тип piecewise, затем piecewise::zip(p1, p2, f) возвращает f(p1, p2).

Алгоритмы

Операнды piecewise объект (ветви) является парами, состоящими из условия и значения, допустимого при том условии.

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

Смотрите также

Функции MuPAD

Для просмотра документации необходимо авторизоваться на сайте