jazzinsilhouette
jazzinsilhouette

Reputation: 103

Evaluating a function over a given interval for plotting

I'm supposed to plot a certain Lagrange polynomial over a given interval [a,b] using a function that evaluates this polynomial pointwise:

function y = evalLagrangePolynomial(X, k, x)

n = numel(X);
y = 1;

for i=1:n
    if i ~= k
        y = y * (x - X(i)) / (X(k) - X(i));
    end
end
end

However i'm a little confused how to tackle this problem; is there some native matlab function for this kind of situation?

Upvotes: 0

Views: 407

Answers (1)

user1543042
user1543042

Reputation: 3442

I don't know of a native function but, here's one I wrote up.

XY = sortrows(rand(10, 2));
X = XY(:,1);
Y = XY(:,2);
x = linspace(0, 1, 100);
y = LagrangePolynomial(X, Y, x);
plot(x, y, '-', X, Y, 'o')

LagrangePoly

With the function

function y = LagrangePolynomial(X, Y, x)
    if isscalar(x)
        l = GenerateLagrangePolynomial(X, x)';
        y = sum(l .* Y);
    else
        y = arrayfun(@(w) LagrangePolynomial(X, Y, w), x);
    end
end

function l = GenerateLagrangePolynomial(X, x)
    [X, ~] = meshgrid(X, ones(size(X)));
    lPreprod = (x - X') ./ (X - X');

    lPreprod(isinf(lPreprod)) = 1;
    l = prod(lPreprod, 1);
end

Upvotes: 1

Related Questions