Метод дихотомии, метод итерации, метод Ньютона подходит для первого уравнения (1).

Министерство общего и профессионального образования РФ

Московский Авиационный Институт

(Национальный Исследовательский Университет)

Факультет прикладной математики и физики

Кафедра вычислительной математики и программирования

 

Задание №4

Тема: «Процедуры и функции в качестве параметров»

I семестр

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

­_______________________

(фамилия, инициалы)

­­­­­­­­­­­­­­­­­ ___________________________ (подпись) (дата)

Студент _________________

(группа)

_________________________

(фамилия, инициалы)

_________________________

(подпись) (дата)

 

_________

(оценка)

 

 

Москва 2012 г.

 

 

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

Составить программу на языке Си с процедурами решения трансцендентных алгебраических уравнений различными методами (итераций, Ньютона и половинного деления – дихотомии). Нелинейные уравнения оформить как параметры-функции, разрешив относительно неизвестной величины в случае необходимости. Применить каждую процедуру к решению двух уравнений, заданных двумя строками таблицы, начиная с варианта с заданным номером. Если метод неприменим, дать математическое обоснование и графическую иллюстрацию, например, с использованием gnuplot.

Вариант №14.

 

Метод решения:

Создаем три функции (первая решается с помощью метода дихотомии, вторая с помощью итераций, третья методом Ньютона) и выводим значения получившихся корней.

Предполагается, что функция F(x) достаточно гладкая, монотонная и существует единственный корень уравнения x [a,b].

 

Описание методов:

· Метод дихотомии (половинного деления)

Методом половинного деления возможно лишь в том случае, если известно, что на заданном отрезке [a,b] имеется корень, и он является единственным, при этом функция должна иметь на концах отрезка разные знаки: (то есть метод не подходит если функция задает параболу на заданном отрезке). Метод заключается в делении отрезка пополам и его сужении в два раза на каждом шаге итерационного процесса, в зависимости от знака функции в середине отрезка.

Итерационный процесс строится следующим образом: за начальное приближение принимаются границы исходного отрезка . Далее вычисления проводятся по формулам:

o Если

·

·

o Если

·

·

Процесс повторяется до тех пор, пока не будет выполнено условие окончания.

 

· Метод итераций

Метод заключается в замене исходного уравнения F(x)=0 уравнением вида x=f(x). Достаточное условие сходимости метода итераций: |f’(x)|<1, x[a,b].

Начальное приближение корня - это середина исходного отрезка. Далее следующему значению x присваивается значение f от предыдущего значения х. Условием окончания является сравнение разницы текущего значения x и предыдущего с машинным эпсилон.

· Метод Ньютона

Метод Ньютона является частным случаем метода итераций.

В методеследующее значение x (на каждом шаге) получается путем вычитания от предыдущего значения, значения разности исходной функции на производную этой функции. Достаточное условие сходимости метода Ньютона: |F(x)*F’’(x)| < (F’(x))2 .

Функциональное назначение:

Программа предназначена для нахождения решений трансцендентных алгебраических уравнений различными численными методами(итераций, Ньютона и половинного деления-дихотомии). Обрабатываемые данные имеют тип double.

 

Описание алгоритма:

Создаем функции, отвечающие за определенные компоненты программы (подсчёт основной функции, её производной, вычисление корня методом дихотомии, методом итераций, методом Ньютона). В основной функции выводится полученные корни уравнений различными методами.

 

Общие сведения о программе:

Операционная система: Ubuntu 10.04 LTS Lucid Lynx

Язык программирования: C

Число строк программы: 64

Программа компилируется и вызывается с помощью g++ cours4.cpp – o cours4.exe

 

Уравнения по заданию:

· [1, 2](1)

· [1, 2] (2)

Описание переменных и констант:

Имя Тип Назначения
eps double Хранит значение машинного эпсилон
a double Хранит значение начала отрезка функции
b double Хранит значение конца отрезка функции
c double Переменная, принимающая значения на отрезке [a, b]
с1 double Переменная максимально приближенная к с

Описание подпрограмм:

double Halving(double f(double), double a, double b) – вычисляет корень методом дихотомии

{ double c; while(fabs(b-a)>eps && f(c)!=0) { c=(a+b)/2; if(f(a)*f(c)>0) a=c; else b=c; } return c;}

double Iteration(double F(double), double a, double b) – вычисляет корень методом итерации

{ double c=(a+b)/2, c1=c+1; while(fabs(c-c1)>eps && F(c)!=c) { c1=c; c=F(c); } return c;}

 

double Newton(double f(double), double fp(double), double a, double b) – вычисляет корень методом Ньютона

{ double c=(a+b)/2, c1=c+1; while(fabs(c-c1)>eps && f(c)!=c) { c1=c; c=c-f(c)/fp(c); } return c;}

 

 

double f1(double x) – задается функция f1 для метода дихотомии(1)
{return sin(x/2)/cos(x/2)-cos(x/2)/sin(x/2)+x;}

 

double F1(double x) - задается функция F1 для метода итерации(1)
{return 2*atan(cos(x/2)/sin(x/2)-x);}

 

double fp1(double x) – задается производная функции f1(fp1) для метода Ньютона(1)
{return 1/(2*cos(x/2)*cos(x/2))+1/(2*sin(x/2)*sin(x/2))+1;}

 

Метод дихотомии, метод итерации, метод Ньютона подходит для первого уравнения (1).

Helving root of f1=1.076875

Iteration root of f1=1.076875

Newton root of f1= 1.076874(небольшая погрешность зависит от машинного эпсилон)

double f2(double x) -задается функция f2 для метода дихотомии(2)
{return 0.4+atan(sqrt(x))-x;}


double F2(double x) - задается функция F2 для метода итерации(2)
{return 0.4+atan(sqrt(x));}


double fp2(double x)- – задается производная функции f2(fp2) для метода Ньютона(2)
{return (1/(1+x))*(1/2*(sqrt(x)));}