2016-11-15 3 views
0

Я хочу построить следующую функциюMatlab участок для многих отраслей (функция кусочно)

I(x) = 5*(1+x/2) for -2 < x < 0 
     5*(1-x/2) for 0 < x < 2 
     0  elsewhere 

Я использую следующий скрипт:

clc; close all; clear all; 
L = 4; 
x = -20:1:20; 
I((-L/2) < x & x<0) = 5*(1 + x/(L/2)); 
I(0 < x & x < (L/2)) = 5*(1 - x/(L/2)); 
plot (x,I), grid 

Это не работает. Не могли бы вы мне помочь?

ответ

1

Вам необходимо выбрать, какие значения x использовать для каждого условия. Что-то вроде этого:

L = 4; 
x = -5:0.1:5; 
I = zeros(size(x)); 
cond1 = (-L/2)<x & x<0; 
cond2 = 0<x & x<(L/2); 
I(cond1) = 5*(1 + x(cond1)/(L/2)); 
I(cond2) = 5*(1 - x(cond2)/(L/2)); 
plot (x,I), grid 

Не уверен, что вы хотите делать, когда условия boundry x=0, x=-2 и x=2. Но вам просто нужно изменить cond1 и cond2.

+0

спасибо mpaskov. Он работает отлично. – User1961

1

Существует одна новая функция для функции кусочна в Символическом Math Toolbox: piecewise

так

syms x 
y = piecewise(-2<x<0,5*(1+x/2),0<x<2,5*(1-x/2),0); 
fplot(y) 
Смежные вопросы