Решение задач методом Зейделя

Автор работы: Пользователь скрыл имя, 22 Ноября 2011 в 23:45, контрольная работа

Описание

Цель работы:
Приобретение навыков решения систем линейных алгебраических уравнений итерационными методами.

Работа состоит из  1 файл

лаба3(Зейдель) наташке.doc

— 97.50 Кб (Скачать документ)

1.  Цель работы:

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

2.  Описание стационарного метода Зейделя: 

Пусть дана система линейных алгебраических уравнений

Ax=b

с неособенной  матрицей (det 0) . Предварительно необходимо привести эту систему к виду

x=Bx+

т.е. первое уравнение системы разрешили  относительно x1 , второе – относительно x2 и т.д.

      Предположим, что известно начальное приближение

х 0=(

) 

к точному  решению X*=( ) системы. Тогда все следующие приближения найдем по формулам

   

            (1)

…………………………………………….

        

 

Как видно, каждое из полученных приближений для неизвестных немедленно вводится в вычисления и порядок уравнений при итерациях сохраняется. 

Для стационарного  метода Зейделя верны следующие  утверждения:

1)      Итерационный процесс сходится при любом начальном приближении х 0

тогда и только тогда, когда все корни  уравнения

                                           =0

по модулю меньше 1. 

2)   Итерационный процесс сходится  при любом начальном приближении  х 0

если, если для матрицы В выполняется одно из неравенств:

а)   ;

б)   . 
 

3.  Постановка задачи.

      Найти с помощью стационарного метода Зейделя решение системы линейных уравнений с матричными элементами

                                      

и свободными членами  , где i, j=1,2,3,4,5, N=4, k=4. Допустимая погрешность  . 

4.  Алгоритм решения. 

Пусть исходная система приведена к каноническому  виду: x=Bx+ .

I   Задание начального приближения:

1. i=1,2,…,n, n-размерность системы

     1.1   ; -элементы столбца  

Бесконечный цикл:

      II   Запись текущего приближения в матрицу :

      2. i=1,2,…,n, n-размерность системы

            2.1   ;

     III  Реализация итерационного процесса в стационарном методе Зейделя по формулам (1):

      3. i=1,2,…,n

            3.1    y=0;

            3.2    j=1,2,…,n

            3.2.1   y= ; -элементы матрицы В. 

            3.3   ;

     IV  Проверка очередного найденного приближения на точность:

      4. k=0;

      5.  i=1,2,…,n

           5.1    если   то  k=k+1; z-заданная точность

      6.  если  k=n  то выход из бесконечного цикла.

        

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

#include "stdafx.h"

#include<stdio.h>

#include<conio.h>

#include<iostream>

#include<math.h>

using namespace std;

int i,j;

void main()

  setlocale(LC_ALL ,"Russian");

  void Amatrix(double**,double*,int n);

  int k,m,n;

  double **a,**uu,*b,*x,*ll;

  double h=0,v;

  n=5;

  a=new double*[n];

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

       a[i]=new double[n];

  uu=new double*[n];

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

       uu[i]=new double[n];

  b=new double[n];

  ll=new double[n];

  x=new double[n];

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

  {

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

       {

            if (i<j) a[i][j]=i+1+j+1-double(4)/double(3)-4;

            if (i==j) a[i][j]=i+1+j+1+1+4;

            if (i>j) a[i][j]=i+1+j+1-0.8-4;

       }

       b[i]=3*(i+1)+2+4;

  } 

  cout<<"\nРасширенная матрица A\n";

  Amatrix(a,b,n);

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

  {

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

     {

           if(i!=j)

              uu[i][j]=-a[i][j]/a[i][i];

                       else uu[i][j]=0;

              }

              ll[i]=b[i]/a[i][i];

  }

  cout<<"\nМатрица A' и столбец  б(бета) в формуле x=A'*x+б\n";

  Amatrix(uu,ll,n);

 

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

             x[i]=ll[i];

            

  for(;;)

  {

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

                      b[i]=x[i];

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

            {

                      h=0;

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

                                 h+=uu[i][j]*x[j];

                      x[i]=h+ll[i];

            }

            k=0;

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

                      if(fabs(b[i]-x[i])<=v) k++;

                      if(k==n) break;

  } 

  cout<<"\nРешение";

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

       cout<<"\nx["<<i+1<<"]="<<x[i];

  getch();

} 

void Amatrix(double **a,double *b,int n)

{

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

{

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

             printf("%.6f   ",a[i][j]);

          printf("%.6f\n",b[i]);

}

} 

6.  Результаты работы программы. 

Информация о работе Решение задач методом Зейделя