лаб_1. Численные методы
![]()
|
МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики» ![]() Кафедра «Информатика» Лабораторная работа № 1 по теме «Методы решения нелинейных уравнений» по дисциплине «Численные методы» Выполнил: Проверил: Москва 1. ЗаданиеВыбрать индивидуальное задание из табл. 1-1: нелинейное уравнение; методы решения нелинейного уравнения для выполнения 3-х итераций; Отделить корни заданного уравнения графическим и аналитическим методом с использованием средств пакета Scilab. Для каждого из заданных методов провести исследование функции нелинейного уравнения: проверить выполнение условий сходимости вычислительного процесса, в случае расходящегося процесса – сделать необходимые преобразования для обеспечения сходимости; выбрать начальное приближение к корню; сформулировать условие окончания этапа уточнения корня. С использованием итерационной формуле 1-го заданного методу провести расчет трех итераций с использованием средств мат. пакета. Результаты расчета свести в табл. 1-2. Оценить погрешность результата после 3-х итераций. Для 2-го заданного метода выполнить решение уравнения с точностью 10-4, создав программу, реализующую заданный метод. Произвести расчет, а результаты решений свести в табл. 1-2. Найти решение нелинейного уравнения на отдел 2. Вариант задания![]() 4 – метод хорд, а 1 – метод половинного деления. 3. Выполнение 3.1 Этап отделения корня ![]() Из построенного графика функции f(x) видно, что на отрезке [-0.4;-0.3] есть один корень. На этом графический способ отделения корней заканчивается. Другой вариант отделения корня – решить задачу аналитически. Для аналитического отделения корня построена таблица. Она требует пояснений. В столбцах таблицы выведены некоторые значения аргумента x на заданном отрезке, а также значения функций f(x), ![]() Видно, что на отрезке [-0.4;-0.3] функция f(x) меняет знак, значит существует, по крайней мере, один корень. Значения первой производной ![]() ![]() ![]() ![]() ![]() 3.2 Этап уточнения корня Необходимые и достаточные условия для метода хорд: ![]() ![]() ![]() ![]() ![]() В нашем случае на отрезке [-0.4;-0.3] требования сходимости выполняются. На этапе отделения корня было показано, что для функции f(x)=x-sin(1/x) вторая производная ![]() ![]() Таким образом, полагая ![]() В рассматриваемой задаче рекуррентная формула принимает следующий вид ![]() ![]() ![]() Оценку погрешности можно проводить по любой из формул ![]() ![]() ![]() Для получения решения уравнения методом хорд воспользуемся следующей рекуррентной формулой: ![]() Результаты вычислений представлены в виде следующей таблицы:
Оценку погрешности результата, вычисленного методом хорд, получим по формуле ![]() | ![]() ![]() ![]() Метод половинного деления, написанный на питоне: import math def half_interval(a, b): return (a + b) / 2 def get_parametr(): a = float(input("Введите точку a :")) b = float(input("Введите точку b :")) E = float(input("Введите точность E:")) print('a = {a} Тип:{a1}\nb = {b} Тип {b1}\nE = {E} Тип:{E1}' .format(a=a, a1=type(a), b=b, b1=type(b), E=E, E1=type(E)) ) return a, b, E def func(x): return x - math.sin(1/x) def start(): a, b, E = get_parametr() counter = 0 max_counter = 200 while abs(b - a) > E: counter += 1 if counter >= max_counter: break if abs(b - a) <= E: break print('\n\nШаг №{counter}'.format(counter=counter)) fa = func(a) c = half_interval(a, b) fc = func(c) if fa * fc > 0: a = c else: b = c print('fa = {f_a} fc = {f_c} fa * fc = {res}'.format(f_a=fa, f_c=fc, res=fa * fc)) print('a = {a} b = {b} x = {x} fx = {f_x}'.format(a=a, b=b, x=(a+b)/2, f_x=fc))
|