Решение систем линейных алгебраических уравнений

Автор: Пользователь скрыл имя, 23 Декабря 2010 в 19:32, лабораторная работа

Краткое описание

Представить реализацию метода простой итерации для решения систем линейных алгебраических уравнений.
Запишем исходную систему уравнений в векторно-матричном виде: Ax=F.

Оглавление

1.Постанoвка задачи №1, метод решения.
2.Постановка задачи №2, метод решения.
3. Реализация на языке С++ задачи №1.
4. Реализация на языке С++ задачи №2.
5. Реализация на языке Fortran задачи №1.
6. Реализация на языке Fortran задачи №2.
7. Реализация в Matlab задачи №1.
8. Реализация в Matlab задачи №2.
9. Вывод.
10.Список литературы.

Файлы: 1 файл

Лаба2.doc

— 79.00 Кб (Скачать)

Нижегородский Технический Университет

Институт  Радиотехники и Информационных Технологий 
 

Кафедра «Прикладная Математика и Информатика» 
 
 
 
 
 
 
 
 
 
 

Отчёт по лабораторной работе №2

Тема: «Решение систем линейных алгебраических уравнений» 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Выполнила: Волынкина В.М.

                                                                                                                        группа 04-ПМ

                                                                                               Проверила:  Катаева Л.Ю. 
 
 
 
 
 
 
 
 
 
 
 
 
 

Нижний  Новгород

2008 
 

Содержание. 

1.Постанoвка  задачи №1, метод решения.

2.Постановка  задачи №2, метод решения.

3. Реализация  на языке С++ задачи №1.

4. Реализация  на языке С++ задачи №2.

5. Реализация  на языке Fortran задачи №1.

6. Реализация  на языке Fortran задачи №2.

7. Реализация  в Matlab задачи №1.

8. Реализация  в Matlab задачи №2.

9. Вывод.

10.Список литературы. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

1.Постановка  задачи №1. Метод  решения. 

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

 Запишем исходную  систему уравнений в векторно-матричном  виде: Ax=F.

Пусть Е - заданное приближение.

Матрицу А всегда можно привести к виду, когда на диагонали находятся максимальные значения.  Только в этом случае итерационный метод применяют.

Приведение матрицы  А  происходит путём нахождения в  строке максимального элемента и  перестановки этой строки на место  той строки, номер которой совпадает  с номером столбца максимального  элемента.

Затем из каждого  уравнения выражаем хi

Чтобы запустить  итерационный процесс, необходимо задать начальные приближения значений неизвестных: хi(0)=0.

Затем подставим  нулевые значения переменных в правые части уравнений. Получим некоторые  значения переменных хi: Будем рассматривать их в качестве следующего (первого) приближения хi(1).

Проверим, удовлетворяют  ли заданной точности получившиеся значения. Найдём модули разности  получившегося  приближения и начального: !х(1)-х(0)! Если значения модулей больше заданного приближения, продолжаем итерационный процесс.

На следующем  шаге подставляем в правые части  формул х(1) приближения, получаем значения х(2) приближений, проверяем модули разности и т.д.

Итерационный  процесс продолжается до тех пор, пока все значения х i(k) не станут близкими к xi(k+1), т.е. пока модули разности не станут меньше заданного приближения: !х(к+1)-х(к)!<Е. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2.Постановка  задачи №2. Метод  решения. 

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

 Запишем исходную  систему уравнений в векторно-матричном  виде: Ax=F.

Пусть Е - заданное приближение.

Приводим матрицу  А к виду, когда на диагонали  находятся максимальные значения.

(как в методе  простой итерации). 

Затем из каждого уравнения выражаем хi

Чтобы запустить  итерационный процесс, необходимо задать начальные приближения значений неизвестных: хi(0)=0.

 Затем подставим  нулевые значения переменных  в правую часть первого уравнения,  т.е. в формулу для х1. В следующие формулы для хi будем подставлять значения переменных, найденные на этом же шаге. Например: формула

Получившиеся  значения переменных будем рассматривать  как следующие приближения.

После каждого  итерационного шага делаем проверку по принципу, описанному в методе простой итерации. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

3. Реализация на  языке С++ задачи  №1. 

#include <iostream>

using namespace std;

int main()

{

int c=0,n,p,z;

float l=0,t=0,E,max,r;

cout<<"kol-vo perem=";

cin>>n;

cout<<n<<endl;

float A[n][n],F[n], x[n],y[n],q[n];

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

{

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

   {

      cout<<"A["<<i<<"]["<<j<<"]=";

      cin>>A[i][j];

   }

}

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

      cout<<"F["<<i<<"]=";

      cin>>F[i];

}

cout<<"priblijenie=";

cin>>E;

cout<<E<<endl;

//---------------privedenie matrici--------------------------

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

{ max=A[i][0];

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

            

              if (max<A[i][j]) {max=A[i][j];p=i,z=j;} 

            }

      if (p!=z) {for (int j=0;j<n;j++)                       {

              q[j]=A[z][j];

              A[z][j]=A[p][j];

              A[p][j]=q[j];

            }

                 }

}

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

{

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

   {

      cout<<"A["<<i<<"]["<<j<<"]="<<A[i][j]<<"   ";

   }

}

cout<<"privedena"<<endl;

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

for (int i=0;i<n;i++)                           //1 shag

{

      x[i]=F[i]/A[i][i];

      cout<<"x["<<i<<"]="<<x[i]<<endl;

}    

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

                        if (x[i]<E) {c=c+1;}  

                       }

if (c==n) {goto END;}

else c=0;

goto V;

V: for (int i=0;i<n;i++) {y[i]=x[i];}

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

   {

      l=0; t=0;

    for (int j=0;j<i;j++)

      {

         if(j<i) {l=l+A[i][j]*y[j];}

      }

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

      {

            if(k<n) {t=t+A[i][k]*y[k];}

      }

   x[i]=(F[i]-l-t)/A[i][i];

   cout<<"x["<<i<<"]="<<x[i];

  }

cout<<endl;

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

{

        r=x[i]-y[i];

        if(r<0){r=-r;}

        if (r<E){c=c+1;}

}

if (c==n) {goto END;}

else {c=0;

        goto V;}

END: cout<<"Zadacha reshena!"<<endl;

return 0;

} 
 

4. Реализация на  языке С++ задачи  №2.

#include <iostream>

using namespace std;

int main()

{

int c=0,n,p,z;

float l=0,t=0,E,max,r;

cout<<"kol-vo perem=";

cin>>n;

cout<<n<<endl;

float A[n][n],F[n], x[n],y[n],q[n];

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

{

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

   {

      cout<<"A["<<i<<"]["<<j<<"]=";

      cin>>A[i][j];

   }

}

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

{

      cout<<"F["<<i<<"]=";

      cin>>F[i];

}

cout<<"priblijenie=";

cin>>E;

cout<<E<<endl;

cout<<"OK!"<<endl;

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

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

{

      max=A[i][0];

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

      {

            if (max<A[i][j]) {max=A[i][j];p=i,z=j;}

      }

      if (p!=z) {for (int j=0;j<n;j++)           {

                        q[j]=A[z][j];

                        A[z][j]=A[p][j];

                        A[p][j]=q[j];

                  }

                } 

}

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

{

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

      {

       cout<<"A["<<i<<"]["<<j<<"]="<<A[i][j]<<"   ";

      }

}

cout<<"privedena"<<endl;

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

V: for (int i=0;i<n;i++)

      {

            y[i]=x[i];

      }

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

      {

            l=0;

            t=0;

            for (int j=0;j<i;j++)

            {

                  if(j<i){l=l+A[i][j]*x[j];} 

            }

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

            {

                  if(k<n) {t=t+A[i][k]*x[k];}

            }

Информация о работе Решение систем линейных алгебраических уравнений