How to plot a piecewise defined function?
1 次查看(过去 30 天)
显示 更早的评论
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')
回答(1 个)
Andrei Bobrov
2012-12-6
编辑:Andrei Bobrov
2012-12-6
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');
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Scatter Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!