Задание функции
30.10.2019
Доброго времени суток. Столкнулся с такой проблемой - не могу понять как задать функцию. Агумент функции имеет точку, назовем ее x1 (x1 известен), до и после которой функция имеет разные зависимости от аргумента, пусть это будет x^2 и sin(x). Как задать функцию, чтобы потом работать с ней как с единым целым, не деля ее на 2 части? Заранее спасибо!
Лучший ответ
y=x.^2.*(x<=x1)+sin(x).*(x>x1);
Ответы
y=x.^2.*(x<=x1)+sin(x).*(x>x1);
Спасибо большое!)
ОКей!
Такие функции называют кусочно-заданными. В этом решении использовано "логическое свойство МАТЛАБ", true+1=1. Такое есть еще в Python. Как по мне, это Великое Качество МАТЛАБ!
Здравствуйте. А вы не подскажите как задать кусочно-заданную функцию на наскольких интервалах (а не на одном, как в вопросе), т.е. для x1<x2, x3<=x4, например?
Есть два метода.
№1, как в любом другом языке программирования:
function y=FuncOnSeveralIntervals(x,a)
%Example of a PiceWise function on several intervals
% {-a, if x<-1
%y={ax, if -1<=x<=0
% {x^2, if 0<x<1
% {1, if x>=1
%Example of use:
% >> ezplot('FuncOnSeveralIntervals(x,1)', [-2 2])
%Copyright Ye.Gayev, Dec. 2019.
if x<-1
y=-a;
elseif (-1<=x)&&(x<=0)
y=a*x;
elseif (0<x)&&(x<=1)
y=x^2;
else
y=1;
end
Ситуация сложнее, если функцию надо ПЕРИОДИЧЕСКИ ПРОДОЛЖИТЬ на всю числовую ось с интервала, скажем, [-2, 2]. А также -- научить понимать, согласно МАТЛАБ-стандарту, векторный аргумент. Сие можно посмотреть в моей книжке Сучасне програмування, Модулі 1,2. http://er.nau.edu.ua/handle/NAU/28248 (хоть она українською мовою, но понять, особенно математику и коды, легко).
Метод №2 -- как верно подсказывает Галкин Сергей Галкин Валентинович. Для данного случая:
function y=FuncOnSeveralIntervalsLogics(x,a)
%Example of a PiceWise function on several intervals
%by using MATLAB's Logical Feature.
% {-a, if x<-1
%y={ax, if -1<=x<=0
% {x^2, if 0<x<1
% {1, if x>=1
%Example of use:
% ezplot('FuncOnSeveralIntervalsLogics(x,1)', [-3 3])
%Copyright Ye.Gayev, Dec. 2019.
y= -a*(x<-1) + a*x*((-1<=x)&&(x<=0)) + x^2*( (0<x)&&(x<=1)) + (x>1);
Здесь, как и в предыдущем способе, остаются проблемы: 1. Чтобы понимала векторный аргумент, и 2. Чтобы была периодической на -Inf < x < Inf.
Отсылаю туда же:
Азарсков В.М., Гаєв Є.О.
Сучасне програмування, Модулі 1,2. http://er.nau.edu.ua/handle/NAU/28248
Хорошо, спасибо большое!
Отвечу завтра
Была опечатка: true+1=2