
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра МВЭ
Отчет
По лабораторной работе №9
по дисциплине «Алгоритмы и вычислительные средства»
Тема:Решение нелинейных трансцендентных уравнений
Студент гр. 3206 |
|
Корепанов Д. М. |
Руководитель |
|
Шевченко С. А. |
Санкт-Петербург
2024
Цель
Изучение и программирование стандартного алгоритма решения нелинейных уравнений по методу Ньютона.
Постановка задачи
Дано уравнение вида
0.1x3+20cos(x)+10=0 (0.1)
Найти все точки пересечения графика соответствующей функции
f(x)=0.1x3+20cos(x)+10 с осью абсцисс.
Алгоритм выполнения работы
Реализовать алгоритм поиска корней уравнения (0.1) по методу Ньютона в Matlab.
Вставить комментарии к операторам программы.
Вставить в программу стандартные функции tic, toc для оценки времени решения задачи.
Проверить корректность работы программы путем поиска корня при начальном приближении x0=-3 и зафиксировать количество итераций.
Изменяя вручную положение начального приближения x0, найти все точки пересечения функции с осью абсцисс.
Для одного из корней построить график зависимости количества итераций функции newton от величины погрешности tol. Величину погрешности варьировать в пределах от 1 до 1e-6, корень уравнения выбирается произвольно.
Опробовать работу программы на нижеследующих уравнениях
Корни
уравнения (0.3) отыскивать в диапазоне
значений x
[-0.7;2]
Для уравнений (0.2)-(0.4) исследовать зависимость точности определения корня от положения начального приближения x0.
Модифицировать исходную программу таким образом, чтобы в ней происходил приближенный поиск корней с точностью до величины h. При обнаружении пересечения функцией оси абсцисс должна вызываться функция newton, уточняющая положение корня с точностью до величины tol.
Модифицировать программу по п.9 таким образом, чтобы на графике функций отображалась каждая из касательных к графику функции на каждой из итераций функции newton.
Оформить отчет, включив в него тексты подготовленных программ, графики функций и листинги результатов к заданиям 4-9. В выводах к работе отразить
Основная часть
Рисунок 1 – Блок-схема алгоритма
Рисунок 2 – Блок-схема задаваемой функции newton
4.1.1. Код программы 1
clc
clear
f = @(x) 0.1*x.^3 + 20*cos(x) + 10;
h = 0.1;
df = @(x) (f(x+h) - f(x-h))/(2*h);
tol = 1e-6;
iterlimit = 200;
ezplot(f);
grid on
x0 = -1;
function[root, iter] = newton(f, df, x0, tol, iterlimit);
iter = 1;
old_root = x0;
root = x0 - (f(x0)/df(x0));
while iter <= iterlimit && abs(root - old_root) > tol
old_root = root;
root = old_root = f(old_root)/df(old_root);
iter = iter + 1
if iter == iterlimit
root = []
break
end
end
end
tic
[root, iter] = newton(f, df, x0, tol, iterlimit);
if ~isempty(root);
disp(['Корень при х0 = ', num2str(x0)]);
disp(['х = ', num2str(root)]);
disp(['f(x) = ', num2str(f(root))]);
disp(['Количество итераций = ', num2str(iter)]);
else
disp('Превышено число итераций');
end
Toc
4.1.2. Листинг результатов
Рисунок 3 – Скриншот окна программы с результатами алгоритма
4.2. Рассмотрение зависимости
Рассмотрим зависимость итераций от погрешности для x0 = -3
Рисунок 4 – Скриншот окна программы с посмотренным графиком зависимости количества итераций от погрешности
4.3.1. Код программы 2
clc
clear
f = @(x) 0.1*x.^3 + 20*cos(x) + 10;
h = 0.1; %Шаг производной
df = @(x) (f(x+h) - f(x-h))/(2*h); %Вычисление производной
tol = 1e-6; %Точность
iterlimit = 200; %Предел итераций
ezplot(f); %Создание графика
grid on
x0 = [];
function[root, iter] = newton(f, df, x0, tol, iterlimit);
iter = 0;
while abs(f(x0)) > tol && iter < iterlimit
x1 = x0 - f(x0)/df(x0);
x0 = x1;
iter = iter + 1;
end
if abs(f(x0)) <= tol
root = x0;
else
root = [];
end
end
for x = -6.5:h:6.5
if f(x)*f(x+h) < 0
x0 = [x0, x];
end
end
tic
for i=1:length(x0);
[root, iter] = newton(f, df, x0(i), tol, iterlimit);
if ~isempty(root);
disp(['Корень при х0 = ', num2str(x0(i))]);
disp(['х = ', num2str(root)]);
disp(['f(x) = ', num2str(f(root))]);
disp(['Количество итераций = ', num2str(iter)]);
disp(' ');
else
disp('Превышено число итераций');
end
end
Toc
4.3.2. Листинг результатов
Рисунок 5 – Скриншот окна программы с результатами алгоритма
Вывод
В ходе выполненной работы был рассмотрен алгоритм решения трансцендентных уравнений с построением графика. Рассмотрена зависимость количества итераций от погрешности значения функции.
Зависимость количества итераций от погрешности: Обратная, при уменьшении погрешности количество итераций растёт.