Автор: Пользователь скрыл имя, 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.Список литературы.
x[i]=(F[i]-l-t)/A[
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
Информация о работе Решение систем линейных алгебраических уравнений