Для построения графика кусочно-заданной функции в Matlab есть две возможности.
I. Можно в цикле for вычислить значения аргумента x и соответствующие значения функции.
II. Можно воспользоваться тем, что в matlab определено умножение логического значения на число с плавающей точкой. Обозначим логическое через
b, а с плавающей точкой через
d. Если логическое имеет значение True, то результат
b*d число
d. Если логическое имеет значение False, то результат
0.
Пусть надо построить график функции на промежутке
c шагом 0.05
I. Сначала зададим массивы и сохраним в
N их длину. Затем вычислим в цикле значения
Y. За циклом воспользуемся функцией
plot для построения графика.
X = [-1.5:0.05:1.5];
N = length(X);
Y = zeros(1,N);
for i = 1:N
if X(i) < -1
Y(i) = -1;
elseif X(i) <= 1
Y(i) = X(i);
else
Y(i) = 1;
end
end
plot(X, Y)
II. Зададим для удобства inline-функцию. (inline устарела, и не будет со временем поддерживаться. В новых версиях рекомендуется вместо inline использовать анонимные функции.)
f = inline('(x<-1).*(-1)+ and(x >=-1, x <=1).*x+(x>1).*1');
X = [-1.5:0.05:1.5];
Y = f(X);
plot(X, Y);
Синтаксис цикла for, условной конструкции if и нужных функций (например,
plot) подробно изложен в учебниках и Сети. В чем проблемы?
-- Вс 19.03.2017 16:02:38 --Наконец, можно воспользоваться условной индексацией.
X = [-1.5:0.05:1.5]
Y(X<-1) = -1;
Ind = and(-1 <=X, X <=1);
Y(Ind) = X(Ind);
Y(X > 1) = 1;
plot(X, Y)
Условная индексация и «векторная парадигма» Matlab позволяют во многих случаях не использовать «универсальные управляющие структуры» (
for,
if,
while).