Меню
  Список тем
  Поиск
Полезная информация
  Краткие содержания
  Словари и энциклопедии
  Классическая литература
Заказ книг и дисков по обучению
  Учебники, словари (labirint.ru)
  Учебная литература (Читай-город.ru)
  Учебная литература (book24.ru)
  Учебная литература (Буквоед.ru)
  Технические и естественные науки (labirint.ru)
  Технические и естественные науки (Читай-город.ru)
  Общественные и гуманитарные науки (labirint.ru)
  Общественные и гуманитарные науки (Читай-город.ru)
  Медицина (labirint.ru)
  Медицина (Читай-город.ru)
  Иностранные языки (labirint.ru)
  Иностранные языки (Читай-город.ru)
  Иностранные языки (Буквоед.ru)
  Искусство. Культура (labirint.ru)
  Искусство. Культура (Читай-город.ru)
  Экономика. Бизнес. Право (labirint.ru)
  Экономика. Бизнес. Право (Читай-город.ru)
  Экономика. Бизнес. Право (book24.ru)
  Экономика. Бизнес. Право (Буквоед.ru)
  Эзотерика и религия (labirint.ru)
  Эзотерика и религия (Читай-город.ru)
  Наука, увлечения, домоводство (book24.ru)
  Наука, увлечения, домоводство (Буквоед.ru)
  Для дома, увлечения (labirint.ru)
  Для дома, увлечения (Читай-город.ru)
  Для детей (labirint.ru)
  Для детей (Читай-город.ru)
  Для детей (book24.ru)
  Компакт-диски (labirint.ru)
  Художественная литература (labirint.ru)
  Художественная литература (Читай-город.ru)
  Художественная литература (Book24.ru)
  Художественная литература (Буквоед)
Реклама
Разное
  Отправить сообщение администрации сайта
  Соглашение на обработку персональных данных
Другие наши сайты
Приглашаем посетить
  Гоголь (gogol-lit.ru)

   

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

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

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

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

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

группа 04-ПМ

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

2008

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

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

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

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

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

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

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

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

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

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

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

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

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

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

итерационный процесс.

<Е.

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

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

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

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

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

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

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

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

формула

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

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

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

#include <iostream>

using namespace std;

int main()

{

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

<<"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<<"]=";

>>A[i][j];

}

}

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

{

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

cin>>F[i];

}

<<"priblijenie=";

cin>>E;

cout<<E<<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;}

}

<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;

<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];

<0){r=-r;}

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

}

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

else {c=0;

goto V;}

<<"Zadacha reshena!"<<endl;

return 0;

}

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

<iostream>

int main()

{

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

cout<<"kol-vo perem=";

cin>>n;

cout<<n<<endl;

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++)

{

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

}

<n;j++) {

q[j]=A[z][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++)

{

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

}

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

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

}

cout<<endl;

<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;

}

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

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

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 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

enddo

r=X(i)-y(i)

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

endif

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

clear

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

for i=1:n

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

end

end

for i=1:n

end

p=0;

z=0;

max=0;

c=0;

d=0;

if (det(A)~=0)

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(p,j)=q(j);

end

end

end

end

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

end

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

<0

r=-r;

end

<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

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)

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

y(i)=x(i);

end

for i=1:n

l=0;

t=0;

for j=0:i

<i

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

end

end

if k<n

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

<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

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

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

9. Вывод.

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