Реферат

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

Работа добавлена на сайт bukvasha.net: 2015-10-28

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 20.2.2025



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

Институт Радиотехники и Информационных Технологий
Кафедра «Прикладная Математика и Информатика»
Отчёт по лабораторной работе №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

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<
float A[n][n],F[n], x[n],y[n],q[n];

for (int i=0; i
{

for (int j=0;j
{

cout<<"A["<
cin>>A[i][j];

}

}

for (int i=0;i
{

cout<<"F["<
cin>>F[i];

}

cout<<"priblijenie=";

cin>>E;

cout<
//---------------privedenie matrici--------------------------

for (int i=0;i
{ max=A[i][0];

for (int j=0;j
{

if (max
}

if (p!=z) {for (int j=0;j
q[j]=A[z][j];

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

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

}

}

}

for (int i=0; i
{

for (int j=0;j
{

cout<<"A["< }

}

cout<<"privedena"<
//------------------------------------------------------------

for (int i=0;i
{

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

cout<<"x["<
}

for (int i=0;i
if (x[i]
}

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

else c=0;

goto V;

V: for (int i=0;i
for (int i=0;i

{

l=0; t=0;

for (int j=0;j
{

if(j
}

for (int k=i+1;k
{

if(k
}

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

cout<<"x["<
}

cout<
for (int i=0;i
{

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

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

if (r
}

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

else {c=0;

goto V;}

END: cout<<"Zadacha reshena!"<
return 0;

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

#include

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<
float A[n][n],F[n], x[n],y[n],q[n];

for (int i=0; i
{

for (int j=0;j

{

cout<<"A["<
cin>>A[i][j];

}

}

for (int i=0;i
{

cout<<"F["<
cin>>F[i];

}

cout<<"priblijenie=";

cin>>E;

cout<
cout<<"OK!"<
//--------------------------------------------------------------

for (int i=0;i
{

max=A[i][0];

for (int j=0;j
{

if (max
}

if (p!=z) {for (int j=0;j
q[j]=A[z][j];

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

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

}

}

}

for (int i=0; i
{

for (int j=0;j
{

cout<<"A["< }

}

cout<<"privedena"<
//----------------------------------------------------------

V: for (int i=0;i
{

y[i]=x[i];

}

for (int i=0;i
{

l=0;

t=0;

for (int j=0;j
{

if(j

}

for (int k=i+1;k
{

if(k
}

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

cout<<"x["<
}

cout<
for (int i=0;i
{

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

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

if (r
}

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

else {

c=0;

goto V;

}

END: cout<<"Zadacha reshena!"<
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 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) 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 l=l+A(i,j)*y(j); end end for k=i+1:n if k 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 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 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 l=l+A(i,j)*y(j); end end for k=i+1:n if k 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 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

1. Контрольная работа Бюрократическая структура управления
2. Реферат на тему Вопросы расследования убийств замаскированных инсценировкой
3. Сочинение на тему Прочее - Если бы я был мэром
4. Статья на тему О невозможности для церкви изжить магизм
5. Реферат Российский рынок недвижимости возникновение, развитие
6. Реферат Отчет по педагогической практике в Воронежском Кооперативном Институте
7. Реферат на тему Gender Identity Conflict Essay Research Paper In
8. Реферат на тему Humphback Whales Essay Research Paper Humpback Whale
9. Биография Арцимович, Виктор Антонович
10. Реферат Остеомиелит