Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №1

.doc
Скачиваний:
16
Добавлен:
02.05.2014
Размер:
158.72 Кб
Скачать

Московский Государственный университет путей сообщения (МИИТ)

Лабораторная работа №4

Численные методы решения нелинейных алгебраических уравнений

Вариант №

Выполнил:

МОСКВА 2008

  1. Код программы

#include<iostream.h>

#include<conio.h>

#include<math.h>

static double const E = 0.000001; //точность

static double const A = -9; //точка А

static double const B = -4; //точка В

double getValueFunction(double x); //возвращает значение функции в точке х

double getValueFirstDerivativeFunction(double x); //возвращет значение первой производной функции в точке х

double getValueSecondDerivativeFunction(double x); //возвращает значение второй производной функции в точке х

int main(void)

{

int step[2] = {0,0}; //счетчик шагов для методов

double x[2] = {0.0,0.0}; //итерации предыдущая и последуящая

double f_A = getValueFunction(A);

double f_B = getValueFunction(B);

double temp;

clrscr();

if (f_A * f_B > 0) //проверка на пересечение оси ОХ

{

cout<<"Conditions applicability of methods are not executed "<<endl;

getch();

return 0;

}

//метод Ньютона

cout<<"[Method Nutona]"<<endl;

if(getValueFirstDerivativeFunction(0)*getValueSecondDerivativeFunction(0)>0)

x[1]=B;

else

x[1]=A;

do

{

step[0]++;

x[0]=x[1];

x[1]=x[0]-getValueFunction(x[0])/getValueFirstDerivativeFunction(x[0]);

}

while(E < fabs(x[0] - x[1]));

cout<<"X = "<<x[1]<<endl;

cout<<"Steps = "<<step[0]<<endl;

//метод хорд

cout<<"\n[Method Hord]"<<endl;

if(getValueFirstDerivativeFunction(A)*getValueSecondDerivativeFunction(A)>0)

{

x[1]=A;

temp=B;

}

else

{

x[1]=B;

temp=A;

}

do

{

step[1]++;

x[0] = x[1];

x[1] = x[0] - getValueFunction(x[0])*((x[0]-temp)/(getValueFunction(x[0])-getValueFunction(temp)));

}

while(E < fabs(x[0] - x[1]));

cout<<"X = "<<x[1]<<endl;

cout<<"Steps = "<<step[1]<<endl;

getch();

return 0;

}

double getValueFunction(double x)

{

double function = x-7*sin(0.3*x);

return function;

}

double getValueFirstDerivativeFunction(double x)

{

double firstDerivativeFunction = 1-2.1*cos(0.3*x);

return firstDerivativeFunction;

}

double getValueSecondDerivativeFunction(double x)

{

double firstDerivativeFunction = 0.63*sin(0.3*x);

return firstDerivativeFunction;

}

  1. Листинг программы