'Evaluating argument list element number 1

I have the following function:

% function file: lagrange.m
function Yint = lagrange( x, y, Xint )
    n = length( x );
    for i = 1 : n
        L(i) = 1;
        for j = 1 : n
            if j ~= i
                L(i) = L(i) * (Xint - x(j)) / (x(i) - x(j));
            end
        end
    end
    Yint = sum( y .* L );
end

Then I try to use it from this script:

% script file: roteiro_lagrange.m
clear all
x  = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28];
y  = [2.682942 3.818595 3.28224 2.486395 3.082151 5.441169 8.313973 9.978716 9.824237 8.911958 9.00002 10.92685 13.84033 15.98121 16.30058 15.42419 15.7721 16.49803$
xi = [16.8 18.2 2.8 15.1 19.2 5.6 13.1 19.8 8.2 10.9 20.0 10.7 8.4 19.8 13.0 5.8 19.2 15.0 3.0 18.3 16.7 0.2 16.9 18.1 2.6 15.3 19.1 5.4];

n  = length(x)
ny = length(y)
YI = [];
for i = 1 : n
    xp = xi(i);
    for k = 2 : n
        if x(k) > xp
            xx = [x(k-1) x(k)];
            yy = [y(k-1) y(k)];
            yp = lagrange( xx, yy, xp );
            YI = [YI yp];
            break
        endif
    endfor
endfor
y_interp = YI'
plot( x, y, 'r', xi, YI, 'k*' )

but I get the following error when trying to run it:

 lagrange
error: 'x' undefined near line 3 column 10
error: called from
    lagrange at line 3 column 2
error: evaluating argument list element number 1
error: called from
    lagrange at line 3 column 2

(see screenshots of the problem here: https://imgur.com/a/1b5WwDC )



Solution 1:[1]

You are calling the function directly, with no arguments (note, in matlab/octave, lagrange is exactly the same as doing lagrange() ).

You should be calling your script instead.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Tasos Papastylianou