# Vectorising piecewise quadratic interpolation function

조회 수: 8(최근 30일)
Su-Yeon Chung 2021년 8월 11일
답변: darova 2021년 8월 20일
function v = polyinterp(x,y,u)
n = length(x);
v = zeros(size(u));
for k = 1:n
w = ones(size(u));
for j = [1:k-1 k+1:n]
w = (u-x(j))./(x(k)-x(j)).*w;
end
v = v + w*y(k);
end
end
##### 댓글 수: 2표시숨기기 이전 댓글 수: 1
Su-Yeon Chung 2021년 8월 11일
Thanks for your comment! Even it's a better code, I want to know what the vertorised version would be.

댓글을 달려면 로그인하십시오.

### 답변(1개)

darova 2021년 8월 20일
Here is the vectorized version (not tested)
xkj0 = x-x';
xkj0 = xkj0.*eye(size(xkj0)) + eye(size(xkj0)); % make diagonal elements all ones (dividing by zero)
Xkj = repmat(xkj0,[1 1 length(u)]); % 3D matrix of differences xk-xj
U = repmat(reshape(u,1,1,[]),length(x)*[1 1]); % 3D matrix u
X = repmat(x(:),1,length(x),3); % 3D matrix x
W = (U-X)./Xkj;
Y = repmat(y(:),1,length(y),3); % 3D matrix y
temp = prod(W.*Y,2); % don't know direction of multiplication (rows?columns?)
v = sum(temp,1); % summing rows (maybe columns)?

댓글을 달려면 로그인하십시오.

R2020a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by