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

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

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


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


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


Отчёт по лабораторной работе №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];}


}


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

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

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

Слов:1605
Символов:17543
Размер:34.26 Кб.