Решения нелинейных уравнений.

ЛАБОРАТОРНАЯ РАБОТА №1.

ИТЕРАЦИОННЫЕ МЕТОДЫ РЕШЕНИЯ

ИТЕРАЦИОННЫЕ МЕТОДЫ

РЕШЕНИЯ НЕЛИНЕЙНЫХ УРАВНЕНИЙ.

Работу выполнил студент группы 4181

Исхаков Рамиль Ильясович

Работу проверил преподаватель:

Комисарова Елена Михайловна

Цель работы:

Научиться решать нелинейные уравнения методом простых итераций, методом Ньютона и модифицированным методом Ньютона с помощью ЭВМ.

Содержание работы:

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

2. На конкретном примере усвоить порядок решения нелинейных уравнений с помощью ЭВМ указанными методами.

3. Составить программу (программы) на любом языке программирования и с ее помощью решить уравнение с точностью и . Сделать вывод о скорости сходимости всех трех методов.

4. Изменить и снова решить задачу. Сделать выводы о: скорости сходимости рассматриваемых методов; влиянии точности на скорость сходимости; влиянии выбора начального приближения в методе простых итераций на скорость сходимости.

5. Составить отчет о проделанной работе.

Задание на работу:

Вариант 3.

На отрезке [-1; 0]

Листинг программы на C++:

#include <stdio.h>

#include <math.h>

#define func(x) exp(4*x)+x //функция

#define funp(x) 4*exp(4*x)+1 //производная

int main()

{

// Метод простых итераций

int n = 0;

float x, y, z, c = -0.1; //eps1 = 0.001, eps2 = 0.01;

printf (" Hello Enter x0 fo Method of simple iteration please ");

float x0;

scanf ("%f", &x0);

x = x0;

printf ( "\n Please enter EPS1 for Method of simple iteration ");

float eps1;

scanf ("%f", & eps1);

printf ( "\n Please enter EPS2 for Method of simple iteration ");

float eps2;

scanf ("%f", & eps2);

printf ("\n\nMethod simple iterations with an accuracy of %4f %4f \n\n" ,eps1, eps2);

do

{

y = x+c*(func(x)); //МПП

z = x;

printf("%d %.6f %.6f %.6f %.4f\n",n++, x, y, fabs(y-x), fabs(func(y)));

x = y;

}

while( fabs(z-x) >= eps1 || fabs(func(x)) >= eps2 );

printf ( " end of cycle\n\n\n");

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

int k = 0;

float x1, y1, z1, c1 = -0.1;// eps3 = 0.001, eps4 = 0.01;

printf (" Hello entet x0 for Newton s method ");

float x10;

scanf ("%f", &x10);

x1 = x10;

printf ( "\n Please enter EPS1 for Newton method ");

float eps3;

scanf ("%f", & eps3);

printf ( "\n Please enter EPS2 for Newton method ");

float eps4;

scanf ("%f", & eps4);

printf ("\n\n Newton s method with an accuracy of %4f %4f \n\n" ,eps3, eps4);

do

{

y1 = x1-(func(x1))/(funp(x1)); //Метод Ньютона

z1 = x1;

printf("%d %.6f %.6f %.6f %.4f\n",k++, x1, y1, fabs(y1-x1), fabs(func(y1)));

x1 = y1;

}

while( fabs(z1-x1) >= eps3 || fabs(func(x1)) >= eps4 );

printf ( " end of cycle\n\n\n");

// Модифицированный метод Ньютона

int m = 0;

float x2, y2, z2, c2 = -0.1;// eps5 = 0.001, eps6 = 0.01;

printf (" Entet x0 for Modifiend Newton s method ");

float x20;

scanf ("%f", &x20);

x2 = x20;

printf ( "\n Please enter EPS1 for Modifiend Newton method ");

float eps5;

scanf ("%f", & eps5);

printf ( "\n Please enter EPS2 for Modifiend Newton method ");

float eps6;

scanf ("%f", & eps6); // Ввод второго условия окончания цикла (точности)

printf ("Modifiend Newton method with an accuracy of %4f %4f \n\n" ,eps5, eps6);

do

{

y2 = x2-(func(x2))/(funp(x20)); //Модифицированный метод Ньютона

z2 = x2;

printf("%d %.6f %.6f %.6f %.4f\n",m++, x2, y2, fabs(y2-x2), fabs(func(y2)));

x2 = y2;

}

while( fabs(z2-x2) >= eps5 || fabs(func(x1)) >= eps6 );

printf ( " end of cycle\n\n\n");

getchar();

return 0;

}

Таблицы результатов:

х0 Точность Метод простых итераций Метод Ньютона Модифицированный метод Ньютона
  ε x= x= x=
δ n= n= n=
  ε x= x= x=
δ n= n= n=
  ε x= x= x=
δ n= n= n=
  ε x= x= x=
δ n= n= n=
  ε x= x= x=
δ n= n= n=
  ε x= x= x=
δ n= n= n=
  ε x= x= x=
δ n= n= n=
  ε x= x= x=
δ n= n= n=

Выводы о проделанной работе:

__________________________________________________________________________________________________________________________________________________________________________________________________________

Наши рекомендации