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

Автор: Пользователь скрыл имя, 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 Кб (Скачать)

            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;

} 
 
 

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

        n=0

        c=0

        read(*,*)n,e

        dimension A(n,n),F(n),X(n),y(n)

        t=0

        l=0

        do i=1:n:1

          do j=1:n:1

            read (*,*) A(i,j)

          enddo

        enddo

        do i=1:n:1

          read (*,*) F(i)

        enddo

        write ('priblizhenie=')

        read (*,*) e

        do i=1:n:1

            X(i)=F(i)/A(i)(i)

        enddo

        do i=1:n:1

            if (X(i).lt.e) c=c+1

            endif

            if (c.eq.n) goto END

            endif

            else c=0

              goto V

        enddo  

   V:   do i=1:n:1

            y(i)=X(i)

        enddo

        do i=1:n:1

            l=0

            t=0

           do j=1:i:1

                if (j.lt.i) l=l+A(i)(j)*y(j)

                endif

           enddo

           do k=i+1:n:1

            if (k.lt.n) t=t+A(i)(k)*y(k)

            endif

           enddo

          X(i)=(F(i)-l-t)/A(i)(i)

         enddo

         do i=i:n:1

           r=X(i)-y(i)

             if (r.lt.0) r=-r

             endif

            if (r.lt.e) c=c+1

            endif

         enddo

         if (c.eq.n) goto END

         endif

            else c=0

            goto V            

     END: do i=0:n:1

            write (*,*) X(i)

          enddo

       

         end 
 
 
 

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

       n=0

        c=0

        read(*,*)n,e

        dimension A(n,n),F(n),X(n),y(n)

        t=0

        l=0

        do i=1:n:1

          do j=1:n:1

            read (*,*) A(i,j)

          enddo

        enddo

        do i=1:n:1

          read (*,*) F(i)

        enddo

        write ('priblizhene=')

        read (*,*) e

   V:   do i=1:n:1

          y(i)=X(i)

        enddo

        do i=1:n:1

            l=0

            t=0

          do j=1:i:1

                if (j.lt.i) l=l+A(i)(j)*X(j)

                endif

          enddo

          do k=i+1:n:1

            if (k.lt.n) t=t+A(i)(k)*X(k)

            endif

          enddo

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

         enddo

         do i=i:n:1

           r=X(i)-y(i)

             if (r.lt.0) r=-r

             endif

            if (r.lt.e) c=c+1

            endif

         enddo

         if (c.eq.n) goto END

            else c=0

            goto V

         endif

            

         END: do i=0:n:1

              write (*,*) y(i)

              enddo

       

         end 
 
 

       

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

clear

n=input('Vvedite kolichestvo peremennih: ');

for i=1:n

   for j=1:n

      A(i,j)=input('Vvedite element matrici A: ');

   end

end

for  i=1:n

   F(i)=input('Vvedite element matrici F: ');

end

E=input('Vvedite priblijenie: ');

p=0;

z=0;

max=0;

c=0;

d=0;

if (det(A)~=0)

for i=1:n

   max=A(i,1)

      for j=1:n

         if  max<A(i,j)

              max=A(i,j);

              p=i;

            z=j;

         end

      end

      if p~=z

         for j=1:n

            q(j)=A(z,i);

            A(z,j)=A(p,j);

            A(p,j)=q(j);

         end

      end

end

end

for i=1:n

   x(i)=F(i)/A(i,i);

end

for i=1:n

   if x(i)<E

      c=c+1;

   end

end

if c==n

   d=1;

end

while d==0

for i=1:n

    y(i)=x(i);

end

for i=1:n

    l=0;

    t=0;

      for j=0:i

         if j<i

            l=l+A(i,j)*y(j);

         end

      end

      for k=i+1:n

         if k<n

            t=t+A(i,k)*y(k);

         end

      end

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

end

for i=1:n

   r=x(i)-y(i)

      if r<0

         r=-r;

      end

      if r<E

         c=c+1

      end

end

if c==n

      d=1;

end

end 
 
 
 

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

clear

n=input('Vvedite kolichestvo peremennih: ');

for i=1:n

   for j=1:n

      A(i,j)=input('Vvedite element matrici A: ');

   end

end

for  i=1:n

   F(i)=input('Vvedite element matrici F: ');

end

E=input('Vvedite priblijenie: ');

p=0;

z=0;

max=0;

c=0;

d=0;

if (det(A)~=0)

for i=1:n

   max=A(i,1)

      for j=1:n

         if  max<A(i,j)

              max=A(i,j);

              p=i;

            z=j;

         end

      end

      if p~=z

         for j=1:n

            q(j)=A(z,i);

            A(z,j)=A(p,j);

            A(p,j)=q(j);

         end

      end

end

end

while d==0

for i=1:n

   y(i)=x(i);

end

for i=1:n

   l=0;

   t=0;

      for j=0:i

         if j<i

            l=l+A(i,j)*y(j);

         end

      end

      for k=i+1:n

         if k<n

            t=t+A(i,k)*y(k);

         end

      end

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

end

for i=1:n

   r=x(i)-y(i)

      if r<0

         r=-r;

      end

      if r<E

         c=c+1

      end

end

if c==n

      d=1;

end

end 
 
 

Рeзультаты задачи №1 на С++ и Fortran:

x[0]=1.004

x[1]=0.998

x[2]=0.998

Рeзультаты задачи №1 в Matlab: 

Рeзультаты задачи №2 на С++ и Fortran:

x[0]=1.00067

x[1]=0.999734

x[2]=0.999906

Рeзультаты задачи №1 в Matlab:  

Результаты программ на С++ и Fortran совпадают с результатами ручного счёта.  А в Matlab получились более точные числа, это связано с использованием другой системы счисления.  
 
 
 

9.Вывод.

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

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

Л.Н. Турчак , П.В. Плотников «Основы численных  методов» стр.124-131

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