# Plotting a piecewise Function?

4 ビュー (過去 30 日間)
mk_ballav 2014 年 11 月 16 日
Answered: Star Strider 2014 年 11 月 16 日
Hey guys. I need a plot of a piecewise function in MATLAB and I don't know how to do it. I have alpha defined as, alpha = 0:0.1:2. here n1, n2 are numbers I defined earlier and vj(1,1), vj(2,1) are matrix elements.
f(x) = v1(1,1)*exp(1i*alpha*x)+v1(2,1)*exp(-1i*alpha*x), 0<x<1;
v2(1,1)*exp(1i*alpha*(x-1))+v2(2,1)*exp(-1i*alpha*(x-1)), 1<x<1+n1/n2;
v3(1,1)*exp(1i*alpha*(x-1-n1/n2))+v3(2,1)*exp(-1i*alpha*(x-1-n1/n2)), 1+n1/n2<x<2+n1/n2;
v4(1,1)*exp(1i*alpha*(x-2-n1/n2))+v4(2,1)*exp(-1i*alpha*(x-2-n1/n2)), 2+n1/n2<x<2+2n1/n2;
v5(1,1)*exp(1i*alpha*(x-2-2n1/n2))+v5(2,1)*exp(-1i*alpha*(x-2-2n1/n2)), 2+2n1/n2<x<3+2n1/n2;
I want to plot abs(f) versus x.

#### 0 件のコメント

サインイン to comment.

### 採用された回答

Star Strider 2014 年 11 月 16 日
This works:
[v1,v2,v3,v4 v5] = deal(rand(2,1)); % Created Data
n1 = 3; % Created Data
n2 = 5; % Created Data
x = linspace(-pi,pi,25); % Created Data
alpha = 0:0.1:2;
f = @(x,alpha) [v1(1,1).*exp(1i.*alpha.*x)+v1(2,1).*exp(-1i.*alpha.*x).*(0<x & x<1) + ...
v2(1,1).*exp(1i.*alpha.*(x-1))+v2(2,1).*exp(-1i.*alpha.*(x-1)).*(1<=x & x<(1+n1/n2)) + ...
v3(1,1).*exp(1i.*alpha.*(x-1-n1/n2))+v3(2,1).*exp(-1i.*alpha.*(x-1-n1/n2)).*(1+n1/n2<=x & x<(2+n1/n2)) + ...
v4(1,1).*exp(1i.*alpha.*(x-2-n1/n2))+v4(2,1).*exp(-1i.*alpha.*(x-2-n1/n2)).*(2+n1/n2<=x & x<(2+2.*n1/n2)) + ...
v5(1,1).*exp(1i.*alpha.*(x-2-2.*n1/n2))+v5(2,1).*exp(-1i.*alpha.*(x-2-2.*n1/n2)).*(2+2.*n1/n2<=x & x<(3+2.*n1/n2))];
[X,A] = meshgrid(x,alpha);
F = abs(f(X,A));
figure(1)
surf(X,A,F)
grid on
xlabel('\itx\rm')
ylabel('\alpha')
zlabel('|\itf\rm|')
Obviously, you will use your own data. I don’t have them so I created data to test it. Also, there were operators missing that I assumed were multiplications, so I inserted them.

#### 0 件のコメント

サインイン to comment.