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

Shevchenko / 2sem / LR9

.docx
Скачиваний:
9
Добавлен:
08.06.2024
Размер:
199.02 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра МВЭ

Отчет

По лабораторной работе №9

по дисциплине «Алгоритмы и вычислительные средства»

Тема:Решение нелинейных трансцендентных уравнений

Студент гр. 3206

Корепанов Д. М.

Руководитель

Шевченко С. А.

Санкт-Петербург

2024

  1. Цель

Изучение и программирование стандартного алгоритма решения нелинейных уравнений по методу Ньютона.

  1. Постановка задачи

Дано уравнение вида

0.1x3+20cos(x)+10=0 (0.1)

Найти все точки пересечения графика соответствующей функции

f(x)=0.1x3+20cos(x)+10 с осью абсцисс.

  1. Алгоритм выполнения работы

  1. Реализовать алгоритм поиска корней уравнения (0.1) по методу Ньютона в Matlab.

  2. Вставить комментарии к операторам программы.

  3. Вставить в программу стандартные функции tic, toc для оценки времени решения задачи.

  4. Проверить корректность работы программы путем поиска корня при начальном приближении x0=-3 и зафиксировать количество итераций.

  5. Изменяя вручную положение начального приближения x0, найти все точки пересечения функции с осью абсцисс.

  6. Для одного из корней построить график зависимости количества итераций функции newton от величины погрешности tol. Величину погрешности варьировать в пределах от 1 до 1e-6, корень уравнения выбирается произвольно.

  7. Опробовать работу программы на нижеследующих уравнениях

Корни уравнения (0.3) отыскивать в диапазоне значений x [-0.7;2]

  1. Для уравнений (0.2)-(0.4) исследовать зависимость точности определения корня от положения начального приближения x0.

  2. Модифицировать исходную программу таким образом, чтобы в ней происходил приближенный поиск корней с точностью до величины h. При обнаружении пересечения функцией оси абсцисс должна вызываться функция newton, уточняющая положение корня с точностью до величины tol.

  3. Модифицировать программу по п.9 таким образом, чтобы на графике функций отображалась каждая из касательных к графику функции на каждой из итераций функции newton.

  4. Оформить отчет, включив в него тексты подготовленных программ, графики функций и листинги результатов к заданиям 4-9. В выводах к работе отразить

  1. Основная часть

Рисунок 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 – Скриншот окна программы с результатами алгоритма

  1. Вывод

В ходе выполненной работы был рассмотрен алгоритм решения трансцендентных уравнений с построением графика. Рассмотрена зависимость количества итераций от погрешности значения функции.

Зависимость количества итераций от погрешности: Обратная, при уменьшении погрешности количество итераций растёт.

Соседние файлы в папке 2sem