Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач 4.doc
Скачиваний:
6
Добавлен:
04.08.2019
Размер:
93.18 Кб
Скачать
  1. Описание логической структуры (словесное описание алгоритма):

Создаем функции, отвечающие за определенные компоненты программы (подсчет машинного Эпсилон, функции считающие через стандартные функции языка, считающие производные фунции и т.д.). Рассматриваем уравнения вида F(x)=0. Предполагаем, что функция достаточно гладкая и монотонная на отрезке([1,2]). На отрезке ищем приближенное решение с точностью , т.е. такое, что Также вводим переменные типа double функции F(x) = 0 , приведенной к виду f(x)=x.

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

Имя

Тип

Назначения

eps

double

Хранит значение машинного Эпсилон

х

double

Аргумент функции

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

double mod(double x)

Считает модуль данного аргумента

Имя

Тип

Вид

Назначения

X

Double

входной параметр и возвращаемое значение

Входной параметр и результат вычислений

double epsylon()

Считает машинное Эпсилон

Имя

Тип

Вид

Назначения

Eps

Double

входной параметр и возвращаемое значение

Входной параметр и результат вычислений

double F(double x)

Считает значение функции с помощью встроенных функций языка программирования.

Имя

Тип

Вид

Назначения

X

Double

входной параметр возвращаемое значение 0,1x^2-x*ln(x)

Входной параметр результата вычислений

0,1x^2-x*ln(x)

double f(double x)

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

Имя

Тип

Вид

Назначения

X

Double

входной параметр возвращаемое значение 0.2*x-ln(x)-1

Входной параметр результата вычислений

0.2*x-ln(x)-1

double ff(double x)

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

Имя

Тип

Вид

Назначения

X

Double

входной параметр возвращаемое значение 0.2-1/x

Входной параметр результата вычислений

0.2-1/x

double fp(double x)

Считает значение функции полученной преобразованиями функции F(x)=0 к виду x=f(x) с помощью встроенных функций языка программирования.

Имя

Тип

Вид

Назначения

X

Double

входной параметр возвращаемое значение 2-0.2*x+log(x)

Входной параметр результата вычислений

2-0.2*x+log(x)

double dichotomy(double x)

Использование метода дихотомии.

Имя

Тип

Назначения

X

Double

Происходит деление отрезка на 2 до тех пор, пока F(x)*F(A)>0.

double itertions (double x)

Использование метода итераций.

Имя

Тип

Назначения

X

Double

Заменяет функцию F(x)=0 функцией f(x)=x.

Сравниваются значения разности x-ов с

double Newton (double x)

Использование метода дихотомии.

Имя

Тип

Назначения

X

Double

Происходит приближение значения x по формуле

x^(k+1)=x^k-F(x^k)/F’(x^k).

пока |x^(k+1)-x^k|>eps и F’(x^k) не равно x^k.

  1. Входные данные:

Заданны два уравнения и промежутки монотонности, на которых ищем корень.

  1. Выходные данные:

Выводится вариант задания потом два ответа, полученных в резуьтате нахождения корней уравнений 0,1x^2-x*ln(x) всеми выше названными методами.

  1. Тестовые данные:

Вместо тестовых данных, используем реальные значение при аргументе 1,1183.

  1. Текст программы:

#include <conio.h>

#include <stdio.h>

#include <math.h>

double F(double x)

{

return (0.1*pow(x,2)-x*log(x));

}

double f(double x)

{

return (0.2*x-log(x)-1);

}

double fp(double x)

{

return (2-0.2*x+log(x));

}

double ff(double x)

{

return (0.2-1/x);

}

double mod(double x)

{

if(x>=0) return x;

else return -x;

}

double epsylon()

{

double eps=1.0;

while (eps+1>1)

{

eps/=2;

}

return eps;

}

double dichotomy(double A, double B, double F(double x))

{

int n=0;

double x, eps=epsylon();

while (n<57)

{

x=(A+B)/2;

if((F(x)*F(A))>0)

A=x;

if((F(x)*F(B))>0)

B=x;

n++;

}

return x;

}

double itertions(double A, double B, double fp(double x))

{

double x=(A+B)/2;

double xprev, eps=epsylon();

while (mod(x-xprev)>eps)

{

xprev=x;

x=f(xprev);

}

return x;

}

double Newton (double F (double), double f(double), double A, double B)

{

double C=(A+B)/2, C1= C+1;

while (fabs (C-C1)>epsylon() && f(C)!=C)

{C1=C; C=C-F(C)/f(C);}

return C;

}

int main()

{

double A=1.0;

double B=2.0;

printf("Variant 20 \n");

printf("Metod Dichotomii %.20f\n", dichotomy(A, B, F));

if(mod(fp(A))<1 && mod(fp(B)<1))

{

printf("Metod Iteracii %.20f\n", itertions(A, B, fp));

}

else printf("Metod Iteracii ne primenim\n");

if(mod(F(A)*ff(A))<pow(f(A),2) && mod(F(B)*ff(B))<pow(f(B),2))

{

printf("Metod Newton %.20f\n", Newton (F,f,A,B));

}

else printf("Metod Newton ne primenim\n");

getch();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]