Форум MATLAB и Simulink
Когда на вход подаю вектор и з значений одного дипазона(типа t=0:1:5) то на выхоже получаю то что и ожидается увидеть, а если хотя бы одно значение попдает в другой дипазон то матлаб ругается:
. Error using ==> reshape
To RESHAPE the number of elements must not change.
Error in ==> sym.double at 37
X = reshape(X,siz);
Error in ==> sym.subs at 166
NEWf = double(sym(maple(‘map’,’F’,char(sym([NEWexpr])))));
Error in ==> tesrLt at 8
y=subs(f,b,x);
Почему это происходит я не могу понять. Ну и в догонку можно ли подобные функции дифференцировать либо интегрировать, если нет то как надо задавать кусочные функции чтобы можно было проводить аналитеческие проебразованиями над ними.
Форум MATLAB и Simulink
Нужно задать функцию f(u), равную
f1(u), если uf2(u), если u1f3(u), если u2f1,f2,f3 — известные полиномы 1-й степени.
Как задать такую функцию в матлаб?
U235 Пользователь Сообщения: 814 Зарегистрирован: Пт июл 01, 2005 10:13 am
Сообщение U235 » Ср сен 28, 2011 7:26 pm
oboltys88 Пользователь Сообщения: 4 Зарегистрирован: Ср сен 28, 2011 5:20 pm
Сообщение oboltys88 » Ср сен 28, 2011 8:52 pm
попоробвал сделать указананным выше способом. в результате создается матлабовская переменная особого типа с аттрибутами. мне бы хотелось имеенно двумерный массив точек. чтобы я мог использовать эту функцию в дальнейшем — просто записав f(u) в уравнение и матлаб понимал бы что функция кусочная.
допустим как построить график после процедуры mkpp?
Как запустить функцию matlab?
В командной строке (command window) создаёшь переменную x и массив params размером 1х2. Далее в командной строке вызываешь функцию mu=bellmf(x, params).
Пример что должно получиться:
>> x = 1; >> params = [1, 0]; >> mu=bellmf(x, params) mu = 0.5000
А вообще советую посмотреть examples в matlab help.
Отслеживать
ответ дан 29 мая 2017 в 10:46
71 4 4 бронзовых знака
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как задать кусочную функцию в 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.
Построение графика функций одной переменной MatLab
В режиме непосредственных вычислений доступны практически все возможности системы. Широко используется, например, построение графиков различных функций, дающих наглядное представление об их поведении в широком диапазоне изменения аргумента. При этом графики строятся в отдельных масштабируемых и перемещаемых окнах.
Возьмем вначале простейший пример — построение графика синусоиды. Следует помнить, что MATLAB (как и другие СКМ) строит графики функций по ряду точек, соединяя их отрезками прямых, т. е. осуществляя линейную интерполяцию функции в интервале между смежными точками. Зададим интервал изменения аргумента х от 0 до 10с шагом 0.1. Для построения графика достаточно вначале задать вектор х=0:0.1:10, а затем использовать команду построения графиков plot(sin(x)). Это показано на рис. 3.1.
Вектор х задает интервал изменения независимой переменной от 0 до 10 с шагом 0.1. Почему взят такой шаг, а не, скажем, 1? Дело в том, что plot строит не истинный график функции sin(x), а лишь заданное числом элементов вектора х число точек. Эти точки затем просто соединяются отрезками прямых, т. е. осуществляется кусочно-линейная интерполяция данных графика. При 100 точках полученная кривая глазом воспринимается как вполне плавная, но при 10-20 точках она будет выглядеть состоящей из отрезков прямых.
Графики MATLAB строит в отдельных окнах, называемых графическими окнами. С первого взгляда видны отличия графического окна, показанного на рис. 3.1, от командного окна MATLAB. В главном меню окна появилась позиция Tools (Инструменты), которая позволяет вывести или скрыть инструментальную панель, видимую в верхней части окна графики на рис. 3.1. Средства этой панели (мы их рассмотрим полнее в дальнейшем) позволяют легко управлять параметрами графиков и наносить на них текстовые комментарии в любом месте.
Построение кусочно-символьной функции в Matlab
Я пытаюсь создать кусочно-символическую функцию в Matlab. Причина, по которой он должен быть символическим, заключается в том, что я хочу иметь возможность интегрировать/дифференцировать функцию впоследствии и/или вставлять фактические значения. У меня есть следующая функция:
например, я хочу поместить эту функцию в переменную (скажем, f), а затем вызвать
и получить (скалярный) результат 2/3.
Я пробовал различные вещи, включая функцию piecewise () и символические сравнения, но ничего не помогало. вы можете помочь?
2 ответов
один из вариантов-это использовать heaviside функция, чтобы сделать каждое уравнение равным нулю вне его заданного диапазона, а затем добавить их все вместе в одно уравнение:
Другой альтернативой является выполнение интеграции для каждой функции над каждым поддиапазоном, а затем добавить результаты:
обновление:
хотя в вопросе упоминается, что piecewise функция не работает, ответ Карана предполагает, что это так, по крайней мере, в более новых версиях. Документация для piecewise В настоящее время говорит, что он был представлен в R2016b, но он явно присутствовал намного раньше. Я нашел его в документации для Symbolic Math Toolbox еще R2012b, но синтаксис вызова был другим, чем сейчас. Я не мог найти его в более ранней документации для Symbolic Math Toolbox, но он появился как функция в других наборах инструментов (таких как Statistics and Spline Toolboxes), что объясняет его упоминание в вопросе (и почему он не работал для символических уравнений в то время).
Научный форум dxdy
Последний раз редактировалось ciay 19.03.2017, 15:41, всего редактировалось 2 раз(а).
приветствую)помогите реализовать данную программу в matlab.
построить график сложной функции
, t
, 20
, t>45
используя цикл for на промежутке [0;50] с шагом 0,5
Последний раз редактировалось GAA 19.03.2017, 18:26, всего редактировалось 11 раз(а).
Для построения графика кусочно-заданной функции в Matlab есть две возможности.
I. Можно в цикле for вычислить значения аргумента x и соответствующие значения функции.
II. Можно воспользоваться тем, что в matlab определено умножение логического значения на число с плавающей точкой. Обозначим логическое через b , а с плавающей точкой через d . Если логическое имеет значение True, то результат b*d число d . Если логическое имеет значение False, то результат 0 .
Пусть надо построить график функции на промежутке
c шагом 0.05
Как узнать chat id telegram bot
