How to plot a piecewise defined function?
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Hi
I want to plot a piecewise defined function. My Problem is, that the plot isn't right and I don't find the mistake... would be great, if somebody could help me!
function CubicSpline
clear all;
clc;
close all;
%CatmullRom:
B1=0;
C1=1/2;
x=-2:.01:2;
y1=zeros(size(x));
if abs(x)< 1,
y1=1/6*((12-(9*B1)-(6*C1))*abs(x).^3 +(-18+(12*B1)+(6*C1))*abs(x).^2 + (6-(2*B1)));
elseif 1 <= abs(x) < 2
y1 = 1/6*(((-B1-6*C1)*abs(x).^3 + (6*B1+30*C1)*abs(x).^2 + (-12*B1-48*C1)*abs(x)+(8*B1+24*C1)));
else y1 = 0;
end
figure(1);clf; hold on;
plot(x,y1,'r')%,x, y2, 'b', x, y3, 'g'
xlabel('X-Axis')
ylabel('Function values')
grid on;
legend({'CatmullRom: B = 0, C = 1/2'},'Location','EastOutside')
5 Commenti
Risposte (1)
Andrei Bobrov
il 6 Dic 2012
Modificato: Andrei Bobrov
il 6 Dic 2012
B1=0;
C1=1/2;
x0 = -2:.1:2;
x=abs(x0);
y1=zeros(size(x));
t = [x < 1, x >= 1 & x < 2];
y1(t(:,1)) = 1/6*((12-(9*B1)-(6*C1))*x(t(:,1)).^3 +...
(-18+(12*B1)+(6*C1))*x(t(:,1)).^2 + (6-(2*B1)));
y1(t(:,2)) = 1/6*(((-B1-6*C1)*x(t(:,2)).^3 +...
(6*B1+30*C1)*x(t(:,2)).^2 + (-12*B1-48*C1)*x(t(:,2))+(8*B1+24*C1)));
ADD (corrected)
t1 = x0 <= -1;
t2 = x0 > -1 & x0 < 1;
t3 = x0 >= 1;
plot(x0(t1),y1(t1),'r'); hold on
plot(x0(t2),y1(t2),'g');
plot(x0(t3),y1(t3),'k');
6 Commenti
Vedere anche
Categorie
Scopri di più su Automated Driving Toolbox in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!