MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by buxZED on 16 Mar 2011

can anyone explain me how to use this program

http://www.mathworks.com/matlabcentral/fileexchange/899-lagrange-polynomial-interpolation

function y=lagrange(x,pointx,pointy) % %LAGRANGE approx a point-defined function using the Lagrange polynomial interpolation % % LAGRANGE(X,POINTX,POINTY) approx the function definited by the points: % P1=(POINTX(1),POINTY(1)), P2=(POINTX(2),POINTY(2)), ..., PN(POINTX(N),POINTY(N)) % and calculate it in each elements of X % % If POINTX and POINTY have different number of elements the function will return the NaN value % % function wrote by: Calzino % 7-oct-2001 % n=size(pointx,2); L=ones(n,size(x,2)); if (size(pointx,2)~=size(pointy,2)) fprintf(1,'\nERROR!\nPOINTX and POINTY must have the same number of elements\n'); y=NaN; else for i=1:n for j=1:n if (i~=j) L(i,:)=L(i,:).*(x-pointx(j))/(pointx(i)-pointx(j)); end end end y=0; for i=1:n y=y+pointy(i)*L(i,:); end end

*No products are associated with this question.*

Answer by Matt Tearle on 16 Mar 2011

Accepted answer

`pointx` and `pointy` are two vectors of data values, `x` is a vector of points where you want to interpolate. For example:

x = 0:10; y = x.^2; xx = linspace(0,10); yy = lagrange(xx,x,y); plot(x,y,'o',xx,yy,'.')

As an aside, with no offense intended to Calzino, there are other options available for interpolation. Firstly, of course, `interp1` is a standard MATLAB function, with options for linear, cubic spline, and PCHIP interpolation. Cleve Moler (aka The Guy Who Wrote MATLAB) also has a Lagrange interpolation function available for download.

buxZED on 17 Mar 2011

still dont get it

given the points x0 , x1 , x2 , x3 , x4

and the values f(x0 ), f(x1 ), f(x2 ), f(x3 ), f(x4 )

how can i get an 4th order accurat function f in position x

just point me in the right derection

Jan Simon on 17 Mar 2011

I think, Matt Tearle's example does point in the right direction already. But I can repeat it:

y = lagrange(x, [x0,x1,x2,x3,x4], [f(x0),f(x1),f(x2),f(x3),f(x4)]);

This is exactly found in the help section of the function.

Matt Tearle on 17 Mar 2011

Right, what Jan said. In my example,x and y are vectors of the points x0, x1, ..., x4 and f(x0), ..., f(x4). The new point you're calling x is what I called xx. I used a vector of points, but it could be a single value.

Answer by Matt Fig on 16 Mar 2011

This is really a question for the author of the program. I believe it is also bad etiquette to post somebody's code like that without permission.

Did you try to contact the author?

Matt Tearle on 16 Mar 2011

It's from File Exchange, so I don't seem any great harm in posting it.

Matt Fig on 16 Mar 2011

Ah, but I wasn't talking about harm, just polite behavior. The author should have been contacted first, that's all.

Matt Tearle on 16 Mar 2011

Fair call. I guess it does open the door for people to bash the author's code in a separate location, which would be uncool.

## 0 Comments