Курсовая работа
  • формат pdf
  • размер 94,47 КБ
  • добавлен 27 декабря 2013 г.
Итерационные процессы. Функции как параметры
Цель работы
Составить программу на языке Си с процедурами решения трансцедентных алгебраических уравнений различными численными методам (итераций, Ньютона и половинного деление — дихотомии). Уравнения оформить как функции параметры, разрешив относительно неизвестной величины в случае необходимости. Применить каждую процедуру к решению двух уравнений — заданного вариантом и следующего за ним. Если метод неприменим, дать математическое обоснование и графическую иллюстрацию, например, с использованием gnuplot.
Алгоритм решения задачи
Сначала найдем машинное эпсилон, с помощью функций epsilon и findent. Алгоритм нахождения следующий: 1) на входе в цикл eps равно 1, 2) делим eps на 2 до тех пор, пока предикат (1 + eps/2) 1 дает значение ИСТИНА . Функция findent нужна чтобы вычислять машинное эпсилон для типа данных float, а не для регистра процессора, так как его размер часто превышает 64 бита, то можно получить совершенно неправильное значение. После этого в переменную prec запишем количество точных бит. Важное замечание, так как машинное эпсилон будет использоваться в нескольких независимых функциях, то эта переменная будет объявлена как глобальная, чтобы не передавать ее каждый раз, как параметр функции.
В теле основной функции будем сразу выводить результаты работы функций, сначала для дихотомии 2 и 3 вариант, потом итерации и в конце метод Ньютона. Так как для всех случаев условия сходимости выполняются, то корень точно существует.
Алгоритм нахождения корня в трех методах:
Дихотомия использует первоначальные функции без изменений, поэтому ей передаются как параметр функции f1_d и f2_d для 2 и 3 варианта соответственно, а также значения концов отрезка. Мы идем по циклу до тех пор, пока b – a eps, так как b a всегда, то обратная проверка не нужна. В переменную middle записывается значение (a + b) / 2; потом идет проверка, если f(a) * f(middle) 0, то тогда a = middle, а иначе b = middle. Когда цикл завершает свою работу, мы возвращаем значение middle, что и будет приближенным значением корня уравнения.
Итерации – этот метод использует первоначальные уравнения, приведенные к виду x = f(x), что соответствует функциям f1_i и f2_i. Мы всегда держим в памяти значения текущего и предыдущего шага метода, вначале перед входом в цикл они равны
x1 = (a + b) / 2
x2 = f(x1).
Цикл выполняется до тех пор, пока разница x1 и x2 отличима от эпсилон. В теле цикла происходит следующее, в x1 записывается значение x2, а в x2 записывается f(x2). На выходе из цикла в переменной x2 будет содержаться корень уравнения.
Метод Ньютона – аналогичен методу итераций, но сюда передаются 2 функции f1_d и f1_n для 2 варианта, f2_d и f2_n для 3 варианта. Функции f1_n и f2_n возвращают значения производных первоначальных функций. Вначале
x1 = (a + b) / 2,
x2 = x1 – f_d(x1)/f_n(x1)
Цикл выполняется до тех пор, пока разница x1 и x2 отличима от эпсилон. В теле цикла происходит следующее, в x1 записывается значение x2, а в x2 записывается x2 – f_d(x2)/f_n(x2). На выходе из цикла в переменной x2 будет содержаться корень уравнения.
Студент: Ашайкин Ф. И. из 8O-101Б.
Преподаватель: Никитин И. К.
МАИ. Факультет прикладной математики.
Кафедра вычислительной математики и программирования. 2013 г.
Похожие разделы