Контрольная работа по "Математике"

Автор работы: Пользователь скрыл имя, 01 Декабря 2013 в 20:09, контрольная работа

Описание работы

На практике часто встречаются задачи связанные с решением уравнения вида f(х)=0.Точное решение не всегда возможно найти, поэтому разработаны численные методы: метод дихотомии, Ньютона и др. При этом решаются две задачи:
1. Вычисление корней с заданной заранее точностью.
2. Отыскание областей, где имеется один корень.

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

1. Введение…………………………………………………….……………3
2. Постановка задачи……………………………………………………...4
3. Методы решения..…………………………………………………….…6
4. Листинги программ…………………………………………………….11
5. Результаты………………………………………………………………19

Файлы: 1 файл

practic.doc

— 154.00 Кб (Скачать файл)

  //Вывод введенной системы

  clrscr();

  printf( "Sistema\n" );

  for ( i = 0; i < n; i++ )

  {

    for ( j = 0; j < n + 1; j++ )

      printf( "%7.2f ", mas[i] [j] );

    printf( "\n" );

  }

  //Сначала  все корни по порядку

  for ( i = 0; i < n + 1; i++ )

    otv[i] = i;

  //Прямой ход метода Гаусса

  for ( k = 0; k < n; k++ )

  { //На какой  позиции должен стоять главный  элемент

    glavelem( k, mas, n, otv ); //Установка главного элемента

    if ( fabs( mas[k] [k] ) < 0.0001 )

    {

      printf( "Odnogo reshenia net" );

      return ( 0 );

    }

    for ( j = n; j >= k; j-- )

      mas[k] [j] /= mas[k] [k];

    for ( i = k + 1; i < n; i++ )

      for ( j = n; j >= k; j-- )

        mas[i] [j] -= mas[k] [j] * mas[i] [k];

  }

  //Обратный ход

  for ( i = 0; i < n; i++ )

    x[i] = mas[i] [n];

  for ( i = n - 2; i >= 0; i-- )

    for ( j = i + 1; j < n; j++ )

      x[i] -= x[j] * mas[i] [j];

  //Вывод результата

  printf( "Otvet:\n" );

 

  for ( i = 0; i < n; i++ )

    for ( j = 0; j < n; j++ )

      if ( i == otv[j] )

      { //Расставляем корни по порядку

        printf( "%f\n", x[j] );

         getch();

        break;

      }

  return ( 0 );

  getch();

}

//----------------------------------------------

//Описание  функции

//----------------------------------------------

void glavelem( int k, double mas[] [N + 1], int n, int otv[] )

{

  int i, j, i_max = k, j_max = k;

  double temp;

  //Ищем максимальный  по модулю элемент

  for ( i = k; i < n; i++ )

    for ( j = k; j < n; j++ )

      if ( fabs( mas[i_max] [j_max] ) < fabs( mas[i] [j] ) )

      {

        i_max = i;

        j_max = j;

      }

  //Переставляем  строки

  for ( j = k; j < n + 1; j++ )

  {

    temp = mas[k] [j];

    mas[k] [j] = mas[i_max] [j];

    mas[i_max] [j] = temp;

  }

  //Переставляем столбцы

  for ( i = 0; i < n; i++ )

  {

    temp = mas[i] [k];

    mas[i] [k] = mas[i] [j_max];

    mas[i] [j_max] = temp;

  }

  //Учитываем  изменение порядка корней

  i = otv[k];

  otv[k] = otv[j_max];

  otv[j_max] = i;

}

 

 

 

 

РЕЗУЛЬТАТЫ

 

1.

х≈-0.0001

2.

х≈-0.00002

3.

х≈0.00004

4.

При n=20 I=10.116

5.

При n=20 I=10.121

6.

x1=1; x2=2; x3=3.

 


Информация о работе Контрольная работа по "Математике"