Есть две проблемы.
Сначала у вас есть ошибка в вашем методе.Вот исправление:
function lagrange_interpolate(X,Y,t)
C = ones(length(X))
d = 0.0
for i = 1:length(X)
for j = [1:i-1;i+1:length(X)]
C[i] = C[i]*(t-X[j])/(X[i]-X[j])
end
d = d + Y[i] * C[i]
end
return d
end
еще более простой подход - написать:
function lagrange_interpolate(X,Y,t)
idxs = eachindex(X)
sum(Y[i] * prod((t-X[j])/(X[i]-X[j]) for j in idxs if j != i) for i in idxs)
end
Вторая проблема заключается в том, что вы неправильно применяете вещание.Вы должны написать:
lagrange_interpolate.(Ref(X), Ref(Y), T)
, потому что вы не хотите, чтобы X
и Y
транслировались поверх (а Ref
защищает завернутое в нем значение от трансляции, см. https://docs.julialang.org/en/latest/manual/arrays/#Broadcasting-1).
Также в этом случае, возможно, будет использовано следующее понимание:
[lagrange_interpolate(X, Y, t) for t in T]
будет легче читать (но это вопрос стиля).