Лабораторная работа №1
.docМосковский Государственный университет путей сообщения (МИИТ)
Лабораторная работа №4
Численные методы решения нелинейных алгебраических уравнений
Вариант №
Выполнил:
МОСКВА 2008
-
Код программы
#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;
}
-
Листинг программы