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

3 лаба

.m
Скачиваний:
12
Добавлен:
08.02.2022
Размер:
1.9 Кб
Скачать
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
Соседние файлы в предмете Компьютерная математика