Hi, I have the following query using spline interpolation for angular data. The code attached below is from matlab documentation:
x = pi*[0:.5:2];
y = [0 1 0 -1 0 1 0;
1 0 1 0 -1 0 1];
pp = spline(x,y);
yy = ppval(pp, linspace(0,2*pi,101));
plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or')
axis equal
This code gives the closed piecewise polynomial for circle of radius 1unit. Now if I calculate the value of plynomial for a given query point, it doesnt give me the correct answer. why??
For ex: xq = 0; yq = ppval(pp,xq);
It gives yq = [1;0] but it should be yq = [1,-1];

1 commentaire

Julius Muschaweck
Julius Muschaweck le 23 Août 2021
If you think my answer is correct, please make it the "accepted answer".Thanks

Connectez-vous pour commenter.

 Réponse acceptée

Julius Muschaweck
Julius Muschaweck le 22 Août 2021

0 votes

Your x has five values, your y has seven values. This is a mismatch.
I think you should use
y = [0 1 0 -1 0;
1 0 -1 0 1];
and when you do that,
xq = 0; yq = ppval(pp,xq);
gives you [0;1] as it should. Your "circle" looks more triangular, but that's ok since the sine is badly approximated by the spline with only 5 support points.

6 commentaires

mukesh bisht
mukesh bisht le 22 Août 2021
Here also it gives yq = [0;1] for xq = 0;
But in actual at x= 0, the y values are [-1,1]. This is the problem, it is not giving correct answers
Julius Muschaweck
Julius Muschaweck le 22 Août 2021
Modifié(e) : Julius Muschaweck le 22 Août 2021
Why do you think it should be [1, -1] (a row vector) and not [0;1] == [sin(0); cos(0)] (a column vector)?
mukesh bisht
mukesh bisht le 22 Août 2021
Because, the piecewise polynomial is representing the circle of radius 1 with centre (0,0).
Hence, when my x = 0; y = radius i.e. y = -1,1. See, the attached figure, red dots corresponds to the query points at x = 0. Clearly, the point x= 0 & y = 0 doesn'nt lie on circle.
Here, my aim is to back calculate the y values using the piecewise polynomial obtained using spline interpolation
Julius Muschaweck
Julius Muschaweck le 22 Août 2021
Isn't a radius a scalar number -- how can it be -1,1?
Your code, with
x = pi*[0:.5:2];
y = [0 1 0 -1 0;
1 0 -1 0 1];
uses x as the angle, and the first and second row of y are the first and second coordinate of unit circle points in a plane, i.e.
y = [sin(x);
cos(x)];
Then, at xq = 0, you get yq = [0; 1], which is the first column of y, and a point on the unit circle.
Your expected value [-1, 1] is not a point on the unit circle.
mukesh bisht
mukesh bisht le 22 Août 2021
ok. Thanks. I got it
darova
darova le 23 Août 2021

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by