Как реализовать кусочно заданную функцию в matlab

REDMOND

Как создать кусочную встроенную функцию в MATLAB?

У меня есть функция в MATLAB, которая принимает другую функцию в качестве аргумента. Я хотел бы как-то определить кусочную встроенную функцию, которая может быть передана. Возможно ли это в MATLAB?

Изменить: функция, которую я хотел бы представлять, это:

Вы действительно определили кусочную функцию с тремя точками разрыва, т.е. в [0, 0.5, 1]. Однако вы не определили значение функции вне разрывов. (Кстати, здесь я использовал термин "break", потому что мы действительно определяем простую форму сплайна, кусочно-непрерывный сплайн. Возможно, я использовал термин "узел", другое общее слово в мире сплайнов. )

Если вы абсолютно знаете, что никогда не будете оценивать функцию вне [0,1], тогда проблем нет. Тогда просто определите кусочную функцию с ОДНОЙ точкой разрыва, при x = 0,5. Простым способом определения кусочно-постоянной функции, такой как ваша, является использование логического оператора. Таким образом, тест (x > 0,5) возвращает константу, либо 0, либо 1. С помощью масштабирования и перевода этого результата легко создать функцию, которая делает то, что вы пожелаете.

Встроенная функция выполняет аналогичную функцию, но встроенные функции ОЧЕНЬ медленны по сравнению с анонимной функцией. Я настоятельно рекомендую использовать анонимную форму. В качестве теста попробуйте следующее:

Да, встроенная функция заняла гораздо больше времени для выполнения, чем анонимная форма.

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

Одним из решений является использование функции Heaviside. Итак, сначала определите базовую функцию Хевисайда.

Наша кусочная функция теперь выводится из H (x).

Посмотрите, что на P (x) есть три части. Первый термин — это то, что происходит для x ниже первой точки останова. Затем добавим часть, которая действует выше нуля. Наконец, третья часть добавляется в другое смещение выше x == 1. Это легко нарисовано.

С этого начала легко сгенерированы более сложные сплайны. Se, что я снова назвал эту конструкцию сплайном. На самом деле, это то, где мы могли бы вести. Фактически, именно здесь это и происходит. Сплайн — кусочная функция, тщательно связанная вместе в списке узлов или точек разрыва. Сплайны, в частности, часто имеют заданные порядки непрерывности, так, например, кубический сплайн будет дважды дифференцироваться (C2) через разрывы. Существуют также кусочно-кубические функции, которые являются только функциями C1. Моя точка зрения во всем этом заключается в том, что я описал простую начальную точку для создания любой кусочной функции. Это хорошо работает для полиномиальных сплайнов, хотя для выбора коэффициентов этих функций может потребоваться небольшая часть математики.

Другой способ создания этой функции — явный кусочно-полиномиальный. В MATLAB мы имеем небольшую известную функцию mkpp. Попробуйте это.

Если бы вы использовали инструментарий сплайнов, то fnplt построит это прямо для вас. Предполагая, что у вас нет этого TB, сделайте следующее:

Оглядываясь назад на вызов mkpp, это довольно просто. Первым аргументом является список точек разрыва кривой (как вектор ROW). Второй аргумент — это вектор COLUMN с кусочно-постоянными значениями, которые кривая будет принимать в этих двух определенных промежутках между разрывами.

Несколько лет назад я опубликовал еще один вариант, кусочно_ведаль. Его можно загрузить с помощью обмена файлами MATLAB Central. Это функция, которая позволит пользователю указывать кусочную функцию только как список точек останова, а также функциональные фрагменты между этими разрывами. Таким образом, для функции с одним разрывом при x = 0,5 мы сделали бы это:

Посмотрите, что третий аргумент предоставляет значение, используемое в каждом сегменте, хотя эти части не обязательно являются чисто постоянными функциями. Если вы хотите, чтобы функция возвращала, возможно, NaN вне интересующего интервала, это тоже легко выполнить.

Моей точкой во всей этой довольно длинной экскурсии является понимание того, что кусочно функция, и несколько способов ее создания в MATLAB.

кусочный

pw = piecewise( cond 1, val 1, cond 2, val 2. ) возвращает кусочное выражение или функциональный pw , значением которого является val1 , когда условие , cond1 верен, val2 , когда cond2 верен и так далее. Если никакое условие не верно, значением pw является NaN .

pw = piecewise( cond 1, val 1, cond 2, val 2. otherwiseVal ) возвращает кусочное выражение или функциональный pw , который имеет значение otherwiseVal , если никакое условие не верно.

Примеры

Задайте и выполните кусочное выражение

Задайте следующее кусочное выражение при помощи piecewise .

Оцените y в -2 , 0 и 2 при помощи subs , чтобы заменить x . Поскольку y не определен в x = 0 , значением является NaN .

Задайте кусочную функцию

Задайте следующую функцию символически.

Поскольку y(x) является символьной функцией, можно непосредственно оценить его для значений x . Оцените y(x) в -2 , 0 и 2 . Поскольку y(x) не определен в x = 0 , значением является NaN . Для получения дополнительной информации смотрите, Создают Символьные Функции.

Установка значений, когда никакие условия верно

Установите значение кусочной функции, когда никакое условие не будет верно (названный в противном случае значение ) путем определения дополнительного входного параметра. Если дополнительный аргумент не задан, значение по умолчанию в противном случае, значением функции является NaN .

Задайте кусочную функцию

Оцените y(x) между -3 и 1 путем генерации значения x с помощью linspace . В -2 и 0 , y(x) оценивает к 1 , потому что другие условия не верны.

Постройте кусочное выражение

Постройте следующее кусочное выражение при помощи fplot .

REDMOND

Предположения и кусочные выражения

На создании кусочное выражение применяет существующие предположения. Примените набор предположений после создания кусочного выражения при помощи simplify по выражению.

Примите x > 0 . Затем задайте кусочное выражение с тем же условием x > 0 . piecewise автоматически применяет предположение, чтобы упростить условие.

Очистите предположение на x для дальнейших вычислений.

Создайте кусочное выражение pw с условием x > 0 . Затем установите предположение что x > 0 . Примените предположение pw при помощи simplify .

Очистите предположение на x для дальнейших вычислений.

Дифференцируйте, интегрируйте и найдите пределы кусочного выражения

Дифференцируйте, интегрируйте и найдите пределы кусочного выражения при помощи diff , int и limit соответственно.

Дифференцируйте следующее кусочное выражение при помощи diff .

Интегрируйте y при помощи int .

Найдите пределы y в 0 и -1 при помощи limit . Поскольку limit находит двусторонний предел, кусочное выражение должно быть задано с обеих сторон. Также можно найти право — или левосторонний предел. Для получения дополнительной информации смотрите limit .

Поскольку эти два условия встречаются в -1 , пределы с обеих сторон отличаются, и limit не может найти двусторонний предел.

Элементарные операции по кусочным выражениям

Добавьте, вычтите, разделите и умножьте два кусочных выражения. Получившееся кусочное выражение только задано, где начальные кусочные выражения заданы.

Измените или расширьте кусочное выражение

Измените кусочное выражение, заменив часть выражения с помощью subs . Расширьте кусочное выражение путем определения выражения как в противном случае значение нового кусочного выражения. Это действие комбинирует два кусочных выражения. piecewise не проверяет на наложение или конфликт условий. Вместо этого как, если еще лестничная структура, piecewise возвращает значение для первого истинного условия.

Измените условие x<2 в кусочном выражении к x<0 при помощи subs .

Добавьте условие x>5 со значением 1/x к pw путем создания нового кусочного выражения с pw как в противном случае значение.

Входные параметры

cond Условие
символьное условие | символьная переменная

Условие, заданное как символьное условие или переменная. Символьная переменная представляет неизвестное условие.

Пример: x> 2

val — Значение, когда условие удовлетворено
номер | вектор | матрица | многомерный массив | символьное число | символьная переменная | символьный вектор | символьная матрица | символьный многомерный массив | символьная функция | символьное выражение

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

otherwiseVal — Значение, если никакие условия не верны
номер | вектор | матрица | многомерный массив | символьное число | символьная переменная | символьный вектор | символьная матрица | символьный многомерный массив | символьная функция | символьное выражение

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

Выходные аргументы

pw — Кусочное выражение или функция
символьное выражение | символьная функция

Кусочное выражение или функция, возвращенная как символьное выражение или функция. Значение pw является значением val первого условия cond , который верен. Чтобы найти значение pw , используйте subs , чтобы заменить переменные в pw .

Советы

piecewise не проверяет на наложение или конфликт условий. Кусочное выражение возвращает значение первого истинного условия и игнорирует любой после истинных выражений. Таким образом piecewise подражает если еще лестничная структура.

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

Введенный в R2017b
Документация Symbolic Math Toolbox
Поддержка

© 1994-2019 The MathWorks, Inc.

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.

Кусочная функция в MATLAB

В этом руководстве будет обсуждаться, как определить кусочную функцию или выражение, используя функцию piecewise() в MATLAB.

Определите кусочную функцию или выражение, используя функцию piecewise() в MATLAB

Чтобы определить кусочную функцию или выражение в MATLAB, вы можете использовать функцию piecewise() . Эта функция возвращает функцию или выражение, которое содержит кусочную функцию или выражение. Чтобы определить кусочную функцию, вы должны поместить условие и его значение в функцию piecewise() , а затем второе условие и его значение и так далее. Вы также можете установить значение, которое будет истинным, если ни одно из условий не будет истинным. Например, давайте определим простую кусочную функцию. См. Код ниже.

В приведенном выше коде мы определили кусочную функцию, значение которой равно -2, если x меньше нуля, и 2, если x больше нуля, и если ни одно из условий не выполняется, ее значение будет 1. Используется третья строка. чтобы проверить функцию, и вы можете увидеть в выводе, что функция работает правильно. Посетите эту ссылку, чтобы узнать больше о функции piecewise() .

REDMOND

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *