How to plot a piecewise defined function?
Afficher commentaires plus anciens
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 commentaires
Azzi Abdelmalek
le 6 Déc 2012
Your program is working, what is the expected result?
Jan
le 6 Déc 2012
It is a waste of time to remove all loaded function after starting this function by "clear all". This does not even clean the local workspace, because there are no variables declared before.
Simon
le 6 Déc 2012
Simon
le 7 Déc 2012
Réponses (1)
Andrei Bobrov
le 6 Déc 2012
Modifié(e) : Andrei Bobrov
le 6 Déc 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 commentaires
Simon
le 6 Déc 2012
Andrei Bobrov
le 6 Déc 2012
see ADD in my answer
Simon
le 6 Déc 2012
Andrei Bobrov
le 6 Déc 2012
corrected
Simon
le 6 Déc 2012
Simon
le 6 Déc 2012
Catégories
En savoir plus sur Surface and Mesh Plots dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!