
Московский Авиационный Институт
(национальный исследовательский институт)
Факультет прикладной математики
и физики
Кафедра вычислительной математики и программирования
Курсовая работа
по курсу
«Информатика»
1 Семестр
«Составление, отладка, тестирование и документирование программ на языке Си в среде OC UNIX»
Студент: Штанов А.В.
Группа: 8О-106Б, №15
Руководитель: Толоченко А.В.
Оценка
Дата
Москва
2011 год
Постановка задачи:
Составить программу на языках Си с процедурами решения трансцендентных алгебраических уравнений различными численными методами (итераций, Ньютона и половинного деления – дихотомии). Вариант номер 15.
Общий метод решения:
Создаем три функции (одна решает с помощью метода дихотомии, другая с помощью итераций, и третья методом Ньютона) и выводим значения получившихся корней.
Метод дихотомии заключается в делении отрезка пополам и его сужения в два раза на каждом шаге, в зависимости от знака функции в середине отрезка.
Метод итераций. Идея заключается в замене F(x)=0 уравнением вида x=f(x).
Начальное приближение корня это середина отрезка. Далее следующему значению х присваивается значение f от предыдущего значения х. Условием окончания является сравнение разницы текущего значения х и предыдущего с Машинным Эпсилон.
Достаточное условие сходимости метода итераций: |F’(x)|<1
В методе Ньютона следующее значение х на каждом шаге получается путем вычитания от предыдущего значения, значения разности исходной функции на производную этой функции.
Достаточное условие сходимости метода Ньютона: |F(x)*F’’(x)| < (F’(x))2
После проверки выяснилось, что для 15 варианта метод Ньютона не будет работать, т.к. условие |(0.4+arctg(sqrt(x))-x)*((-3*x-1)/(4*x^(3/2)*(x+1)^2))| < ( 1/(sqrt(x)*(2*x+2))-1)^2 выполняется не на всем отрезке [a;b].
Функциональное назначение:
Программа предназначена для нахождения решений трансцендентных алгебраических уравнений различными численными методами. Обрабатываемые данные имеют тип double.
Описание логической структуры (словесное описание алгоритма):
Создаем функции, отвечающие за определенные компоненты программы (подсчет машинного Эпсилон, подсчёт основной функции, её производной и т.д.). В основной функции выводится полученные корни уравнений различными методами.
Оборудование:
Процессор AMD Athlon 64 X2 Dual Core Processor 4200+ 2.21Ghz.
ОП 2.00 Гб.
НМД 200 Гб
Операционная система семейства Unix, наименование Ubuntu версия 11.10.
Интерпретатор команд bash.
Редактор текстов gedit.
Описание переменных и констант:
Имя |
Тип |
Назначения |
eps |
double |
Хранит значение машинного Эпсилон |
a1 |
double |
Хранит значение начала отрезка функции 15 |
b1 |
double |
Хранит значение конца отрезка функции 15 |
a2 |
double |
Хранит значение начала отрезка функции 16 |
b2 |
double |
Хранит значение конца отрезка функции 16 |
Описание подпрограмм:
double epsilon()
Считает машинное Эпсилон
Имя |
Тип |
Вид |
Назначения |
z |
double |
входной параметр и возвращаемое значение |
входной параметр и результат вычислений |
double func_15_1(double x)
Считает значение функции F(x) взятое из начального уравнения F(x)=0 (для варианта №15)
Имя |
Тип |
Вид |
Назначения |
x |
double |
входной параметр возвращаемое значение (0.4+arctg(sqrt(x))-x) |
входной параметр, результат вычислений (0.4+arctg(sqrt(x))-x) |
double func_15_2(double x)
Считает значение функции f(x) взятое из уравнения f(x)=x (для варианта №15)
Имя |
Тип |
Вид |
Назначения |
x |
double |
входной параметр возвращаемое значение (0.4+arctg(sqrt(x))) |
Входной параметр, результат вычислений
(0.4+arctg(sqrt(x))) |
double func_15_3(double x)
Считает значение деления функции F(x) на функцию F’(x) (для варианта №15)
Имя |
Тип |
Вид |
Назначения |
x |
double |
входной параметр возвращаемое значение (x^0.5)*2*(1+x)*(0.4+arctg(x^0.5)-x)))/x^0.5*2*(1+x)-1) |
Входной параметр, результат вычислений (x^0.5)*2*(1+x)*(0.4+arctg(x^0.5)-x)))/x^0.5*2*(1+x)-1) |
double func_16_1(double x)
Считает значение функции F(x) взятое из начального уравнения F(x)=0 (для варианта №16)
Имя |
Тип |
Вид |
Назначения |
x |
double |
входной параметр возвращаемое значение (3*sin(x^0.5)))+(0.35*x)-3.8) |
Входной параметр, результат вычислений (3*sin(x^0.5))+(0.35*x)-3.8) |
double func_16_2 (double x)
Считает значение функции f(x) взятое из уравнения f(x)=x (для варианта №16)
Имя |
Тип |
Вид |
Назначения |
x |
double |
входной параметр возвращаемое значение (3.8-(3*sin(x^0.5)))/0.35) |
Входной параметр, результат вычислений
(3.8-(3*sin(x^0.5)))/0.35) |
double func_16_3 (double x)
Считает значение деления функции F(x) на функцию F’(x) (для варианта №16)
Имя |
Тип |
Вид |
Назначения |
x |
double |
Входной параметр возвращаемое значение (x^0.5)*(7*x+60*sin(x^0.5))-76))/(7*x^0.5)+30*cos(x^0.5))) |
Входной параметр, результат вычислений
(x^0.5)*(7*x+60*sin(x^0.5))-76))/(7*x^0.5)+30*cos(x^0.5))) |
double dichotomy(double a, double b, double eps, double (foo)(double))
Вычисляет корень методом дихотомии
Имя |
Тип |
Вид |
Назначения |
foo(double x) |
double |
входная функция |
Вычисляет значение функции F(x) взятое из начального уравнения F(x)=0 |
a |
double |
входной параметр |
Хранит текущее значение начала отрезка |
b |
double |
входной параметр |
Хранит текущее значение конца отрезка |
х |
double |
возвращаемое значение |
Хранит текущее значение корня, результат вычислений |
eps |
double |
входной параметр |
Значение машинного Эпсилон |
double iteration(double a, double b, double eps, double (foo)(double))
Вычисляет корень методом итераций
Имя |
Тип |
Вид |
Назначения |
foo(double x) |
double |
входная функция |
Вычисляет значение функции f(x) взятое из уравнения f(x)=x |
a |
double |
входной параметр |
Хранит текущее значение начала отрезка |
b |
double |
входной параметр |
Хранит текущее значение конца отрезка |
х |
double |
возвращаемое значение |
Хранит текущее значение корня, результат вычислений |
x0 |
double |
переменная |
Хранит начальный икс/икс с предыдущего шага |
d |
double |
переменная |
Хранит разность х текущего и х с предыдущего шага |
eps |
double |
входной параметр |
Значение машинного Эпсилон |
double newton(double a, double b, double eps, double (foo)(double))
Вычисляет корень методом Ньютона
Имя |
Тип |
Вид |
Назначения |
foo(double x) |
double |
входная функция |
Вычисляет значение деления функции F(x) на функцию F’(x) (для варианта №15)
|
x0 |
double |
переменная |
Хранит значение корня на предыдущем шаге цикла |
a |
double |
входной параметр |
Хранит текущее значение начала отрезка |
b |
double |
вхо в дной параметр |
Хранит текущее значение конца отрезка |
х |
double |
возвращаемое значение |
Хранит текущее значение корня, результат вычислений |
d |
double |
переменная |
Хранит разность х текущего и х с предыдущего шага |
eps |
double |
входной параметр |
Значение машинного Эпсилон |