How to draw all three plots on the same graph to get the exact graph given in the image?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Anitha Limann
am 7 Okt. 2021
Kommentiert: Anitha Limann
am 19 Okt. 2021
Hi I am using this code to generate clamped splines for three data sets.
% no 27
x=[1 2 5 6 7 8 10 13 17]';
y=[3.0 3.7 3.9 4.2 5.7 6.6 7.1 6.7 4.5]';
% no 271
% x1=[17 20 23 24 25 27 27.7]';
% y1=[4.5 7.3 6.1 5.6 5.8 5.4 4.1]';
% no 272
% x2=[27.7 28 29 30]';
% y2=[4.1 4.3 4.1 3.0]';
clmp=[3.0 4.5]'; %clamped condition
l=length(x);
hx=x(2:l)-x(1:l-1);
hy=y(2:l)-y(1:l-1);
g=[3*(hy(1)/hx(1)-clmp(1)); 3*(hy(2:l-1)./hx(2:l-1)- ...
hy(1:l-2)./hx(1:l-2)); 3*(clmp(2)-hy(l-1)/hx(l-1))];
Z=zeros(l);
Z(2:l-1,2:l-1)=2*(diag(hx(1:l-2))+diag(hx(2:l-1)));
Z(2:l-1,1:l-2)=Z(2:l-1,1:l-2)+diag(hx(1:l-2));
Z(2:l-1,3:l)=Z(2:l-1,3:l)+diag(hx(2:l-1));
Z(1,1:2)=[2*hx(1) hx(1)];
Z(l,l-1:l)=[hx(l-1) 2*hx(l-1)];
c=Z\g; %gaussian elimination
b=hy(1:l-1)./hx(1:l-1)-hx(1:l-1).*(2*c(1:l-1)+c(2:l))/3;
d=(c(2:l)-c(1:l-1))./hx/3;
s=[(1:l-1)' y(1:l-1) b c(1:l-1) d];
pp=mkpp(x',s(:,5:-1:2));
Then I used following script to plot a single plot showing all three splines together.
no27;
xx=linspace(1,17,100);
yy=ppval(pp,xx);
plot(xx,yy,x,y,'r*')
axis equal; grid on; grid minor;
hold on;
%%
no271;
xx1=linspace(17,27.7,100);
yy1=ppval(pp,xx1);
plot(xx1,yy1,x1,y1,'k*')
%%
no272;
xx2=linspace(27.7,30,100);
yy2=ppval(pp,xx2);
plot(xx2,yy2,x2,y2,'b*')
hold off;
The above image is a text book image and my graph should have be the same because i am using the same data set. But for some reasons i cannot get the exact plot given in image with my code. Please some one help me with this. The graph i got is attached below.
2 Kommentare
Akzeptierte Antwort
DGM
am 10 Okt. 2021
I'm not sure if you're just after a working plot, or if you're trying to implement the spline interpolation itself. I'm going to assume you're just after a plot.
N = 100; % samples per segment
% no 27
x0 = [1 2 5 6 7 8 10 13 17]';
y0 = [3.0 3.7 3.9 4.2 5.7 6.6 7.1 6.7 4.5]';
es0 = [1 -2/3]; % endslopes
% no 271
x1 = [17 20 23 24 25 27 27.7]';
y1 = [4.5 7.3 6.1 5.6 5.8 5.4 4.1]';
es1 = [3 -4];
% no 272
x2 = [27.7 28 29 30]';
y2 = [4.1 4.3 4.1 3.0]';
es2 = [1/3 -1.5];
xf0 = linspace(x0(1),x0(end),N);
yf0 = spline(x0,[es0(1); y0; es0(2)],xf0);
xf1 = linspace(x1(1),x1(end),N);
yf1 = spline(x1,[es1(1); y1; es1(2)],xf1);
xf2 = linspace(x2(1),x2(end),N);
yf2 = spline(x2,[es2(1); y2; es2(2)],xf2);
% constrained
plot(xf0,yf0,'b'); hold on
plot(xf1,yf1,'r')
plot(xf2,yf2,'k')
% unconstrained
plot(xf0,spline(x0,y0,xf0),'b:')
plot(xf1,spline(x1,y1,xf1),'r:')
plot(xf2,spline(x2,y2,xf2),'k:')
grid on
If you're trying to debug your spline implementation, it would take me a while to wrap my head around it. I don't immediately see how you're enforcing the endslopes (I'm assuming they're supposed to be?).
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Geometric Transformation and Image Registration finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!