Vectorize the loops within the function
2 次查看(过去 30 天)
显示 更早的评论
Hi, I am trying to create a function for Lagrange's interpolation and I wanted to know if there is a way to vectorize it that makes the code run faster
function y=lagrange(xx,yy,x)
% xx and yy are vectors of data values, x is the vector I want to interpolate
n=size(xx,2);
y=zeros(1,length(x));
for k=1:length(x)
for i=1:n
L=1;
for j =1:n
if j~=i
L=L*(x(k)-xx(j))/(xx(i)-xx(j));
end
end
y(k) =y(k)+yy(i)*L;
end
end
end
I tried to do the following but the code is actually slower
for k=1:length(x)
for i=1:n
j=1:n;j(j==i)=[];
L=prod((x(k)-xx(j))./(xx(i)-xx(j)));
y(k) =y(k)+yy(i)*L;
end
end
Any help is appreciated, thank you!
2 个评论
采纳的回答
Srivardhan Gadila
2020-2-18
In line 3 of the vectorized code, replace 'j(j==i)=[];' with 'j(i) = [ ];' as it takes time for finding i, which in this case is not needed and also consider declaring any fixed array before itself and not inside for loops.
n=size(xx,2);
y=zeros(1,length(x));
nvec = 1:n;
for k=1:length(x)
for i= nvec
j=nvec;j(i)=[];
y(k) =y(k)+yy(i)*prod((xx(j)-x(k))./(xx(j)-xx(i)));
end
end
Vectorized code often runs much faster than the corresponding code containing loops but not always. Please refer to the following for more information Vectorization.
0 个评论
更多回答(0 个)
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!