How to plot a piecewise defined function?
이전 댓글 표시
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
Azzi Abdelmalek
2012년 12월 6일
Your program is working, what is the expected result?
Jan
2012년 12월 6일
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
2012년 12월 6일
Simon
2012년 12월 7일
답변 (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');
댓글 수: 6
Simon
2012년 12월 6일
Andrei Bobrov
2012년 12월 6일
see ADD in my answer
Simon
2012년 12월 6일
Andrei Bobrov
2012년 12월 6일
corrected
Simon
2012년 12월 6일
Simon
2012년 12월 6일
카테고리
도움말 센터 및 File Exchange에서 Surface and Mesh Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!