Добавил:
Кафедра ВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3 лаба

.m
Скачиваний:
12
Добавлен:
08.02.2022
Размер:
2 Кб
Скачать
n = 5;
a = -2;
b = 2;
d = 1;
D = 10;
eps = 0.01;
x = a : 0.01 : b;
f = @(x) exp(sin(x.^3));
nodes = linspace(a, b, n + 2);
ds = (0);

while abs(D - d) > eps
    T = zeros(n + 2, n + 2);
    F = zeros(n + 2, 1);
    for i = 1 : n + 2
        F(i, 1) = f(nodes(i));
        for j = 1 : n + 1
            T(i, j) = nodes(i) ^ (j - 1);
        end
        T(i, n + 2) = (-1)^i;
    end
    temp = T\F;
    d = abs(temp(n + 2));
    P = flip(temp(1 : n + 1)');
    
    [D, point] = max(abs(f(x) - polyval(P, x)));
    point_x = x(point);

    if point_x < nodes(1)
        if sign(f(nodes(1)) - polyval(P, nodes(1))) == sign(f(point_x) - polyval(P, point_x))
            nodes(1) = point_x;
        else
            nodes = circshift(nodes, 1);
            nodes(1) = point_x;
        end
    elseif point_x > nodes(n + 2)
        if sign(f(nodes(n + 2)) - polyval(P, nodes(n + 2))) == sign(f(point_x) - polyval(P, point_x))
            nodes(n + 2) = point_x;
        else
            nodes = circshift(nodes, -1);
            nodes(n + 2) = point_x;
        end
    else
        k1 = 1;
        for i = 1 : n + 1
            if nodes(i) < point_x && point_x < nodes(i + 1)
                k1 = i;
                break;
            end
        end
        t1 = nodes(k1);
        k2 = k1 + 1;
        t2 = nodes(k2);

        if sign(f(t1) - polyval(P, t1)) == sign(f(point_x) - polyval(P, point_x))
            nodes(k1) = point_x;
        else
            nodes(k2) = point_x;
        end
    end
    
    ds(end + 1) = d;
end

subplot(2, 1, 1);
hold on
plot(x, f(x), 'green');
plot(x, polyval(P, x), 'red');
for i = 1 : n + 2
    scatter(nodes(i), 0);
    plot([nodes(i) nodes(i)], [f(nodes(i)) polyval(P, nodes(i))]);
end
hold off
subplot(2, 1, 2);
hold on
for i = 1 : length(ds)
    scatter(i, ds(i));
end
hold off
Соседние файлы в предмете Компьютерная математика