重心式による多項式補間を行うアルゴリズムを書くことになっている課題が与えられました。式は次のように述べています。
p(x)=(SIGMA_(j = 0 to n)w(j)* f(j)/(x --x(j)))/(SIGMA_(j = 0 to n)w(j)/(x --x(j)))
私はうまく機能するアルゴリズムを書きました、そして私は私が望む多項式出力を手に入れます。ただし、これには非常に長いループを使用する必要があり、グリッド数が多い場合は、多くの厄介なループ操作を実行する必要があります。したがって、これらすべてのループを回避するために、これをどのように改善できるかについて誰かが何かヒントを持っていれば、私は大いに感謝します。
アルゴリズムでは、補間することになっている与えられたポイントx
をf
表します。 w
は、アルゴリズムを実行する前に計算された重心の重みを表します。そしてgrid
、補間が行われるべきlinspaceは次のとおりです。
function p = barycentric_formula(x,f,w,grid)
%Assert x-vectors and f-vectors have same length.
if length(x) ~= length(f)
sprintf('Not equal amounts of x- and y-values. Function is terminated.')
return;
end
n = length(x);
m = length(grid);
p = zeros(1,m);
% Loops for finding polynomial values at grid points. All values are
% calculated by the barycentric formula.
for i = 1:m
var = 0;
sum1 = 0;
sum2 = 0;
for j = 1:n
if grid(i) == x(j)
p(i) = f(j);
var = 1;
else
sum1 = sum1 + (w(j)*f(j))/(grid(i) - x(j));
sum2 = sum2 + (w(j)/(grid(i) - x(j)));
end
end
if var == 0
p(i) = sum1/sum2;
end
end