Интерполирование функций, страница 2

end

*****************************************************

function i_pol = main(n, type)

x_m = razb(n, type);

f = zn_func(x_m);

rr_m = rr(f, x_m, n);

i_pol = pol(rr_m, x_m, n);

*****************************************************

function x = RazbFn(n, type)

xmin = -1;

xmax = 1;

if type == 1

    h = (xmax - xmin)/n;

    for t = 1: 1: n + 1

        x(t) = xmin + h * (t - 1);

    end

end

if type == 2

    for i = 1: 1: n + 1

        x(n + 2 - i) = cos(pi*(2*i -  1)/(2*(n + 1)));

    end

end

*****************************************************

function f = zn_func(x)

x1 = -0.5;

x2 = 0.5;

x3 = -1;

x4 = 1;

A = [1 x1 0 abs(x1-x2);1 x2 abs(x2-x1) 0;1 x3 abs(x3-x1) abs(x3-x2);1 x4 abs(x4-x1) abs(x4-x2)];

b = [-1; 1; -1;1];

b = A\b;

f = b(1)+b(2)*x+b(3)*abs(x-x1)+b(4)*abs(x-x2);

*****************************************************

function rr = RR(f, x, n)

mat_rr = zeros(n+1, n+1);

for t = 1: 1: n + 1

    mat_rr(t, 1) = f(t);

end

for u = 1: 1: n

    for t = 1: 1: n

        if t + u <= n + 1

            mat_rr(t, u + 1) = (mat_rr(t + 1, u) - mat_rr(t, u))/(x(t + u) - x(t));

        end

    end

end

for t = 1: 1: n + 1

    rr(t) = mat_rr(1, t);

end

*****************************************************

function i_pol = pol(rr_m, x_m, n)

u = 0;

i_pol = zeros(1, 201);

for x = -1: 0.01: 1

    u = u + 1;

    for t = 1: 1: n + 1

        r = 1;

        for q = 1: 1: t - 1

            r = r * (x - x_m(q));

        end

        i_pol(u) = i_pol(u) + rr_m(t) * r;

    end

end

5.  Решение.

(Графики на следующей странице)

6.  Выводы.

Были построены графики интерполяционных полиномов при равномерном выборе узлов и при выборе узлов по Чебышеву для трех заданных n(2, 6, 14). При равномерном выборе узлов на концах заданного интервала при достаточно больших n происходит сильное увеличение погрешности. При выборе узлов по Чебышеву функция апроксимируется более точно.