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

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

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
ДОНЕЦЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
Кафедра “ЕПМ”
Звіт
З лабораторної роботи №5
“ ОБЕРНЕННЯ МАТРИЦЬ”
Виконав:ст.гр ЕСЕ-12а
Воронин Д.И.
Перевірив к.т.н., доцент Шлепньов С.В
Донецк-2013
Мета роботи: навчитися обчислювати матрицю, зворотну заданій за допомогою ЕОМ.
5.2 Завдання
Виконати обернення довільних квадратних матриць другого, третього і четвертого порядків з контролем результату.
Текст програми
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
int SLAU(float **matrica_a, int N, float *massiv_b,
float *x)
{
int i,j,k,r;
float c,M,max,s, **a, *b;
a=new float *[N];
for(i=0;i<N;i++)
a[i]=new float [N];
b=new float [N];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=matrica_a[i][j];
for(i=0;i<N;i++)
b[i]=massiv_b[i];
for(k=0;k<N;k++)
{
max=fabs(a[k][k]);
r=k;
for(i=k+1;i<N;i++)
if (fabs(a[i][k])>max)
{ max=fabs(a[i][k]);
r=i;}
for(j=0;j<N;j++)
{ c=a[k][j];
a[k][j]=a[r][j];
a[r][j]=c; }
c=b[k]; b[k]=b[r]; b[r]=c;
for(i=k+1;i<N;i++)
{ for(M=a[i][k]/a[k][k],j=k;j<N;j++)
a[i][j]-=M*a[k][j];
b[i]-=M*b[k];
}}
if (a[N-1][N-1]==0)
if(b[N-1]==0) return -1;
else return -2;
else
{for(i=N-1;i>=0;i--)
{for(s=0,j=i+1;j<N;j++)
s+=a[i][j]*x[j];
x[i]=(b[i]-s)/a[i][i];
}
return 0;
}}
int INVERSE(float **a, int n, float **y)
{ int i,j,res;
float *b, *x;
b=new float [n];
x=new float [n];
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
if (j==i) b[j]=1; else b[j]=0;
res=SLAU(a,n,b,x);
if (res!=0) break;
else
for(j=0;j<n;j++)
y[j][i]=x[j];
}
delete [] x;
delete [] b;
if (res!=0) return -1;
else return 0;}
int main(int argc, char** argv)
{
int i,j,n,k,result;
float **A,**B,**E;
cout<<"Vvedite razmer matrix:";
cin>>n;
A=new float *[n];
for(i=0;i<n;i++)
A[i]=new float [n];
B=new float *[n];
for(i=0;i<n;i++)
B[i]=new float [n];
cout<<"vvedite matrix A"<<endl;
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{cin>>A[i][j];}}
result=INVERSE(A,n,B);
if (result==0)
{ cout<<"Inverse matrix"<<endl;
for(i=0;i<n;cout<<endl,i++)
for(j=0;j<n;j++)
cout<<B[i][j]<<"\t";
}
else cout<<"No Inverse matrix"<<endl;
E=new float *[n];
for(i=0;i<n;i++)
E[i]=new float [n];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
E[i][j]+=A[i][k]*B[k][j];
cout<<"proverka Inverse"<<endl;
for(i=0;i<n;cout<<endl,i++)
for(j=0;j<n;j++)
cout<<E[i][j]<<"\t";
}
Блок-схеми
Далі на рис.1, рис. 2 та рис.3 буде наведено використані у програмі блок-схеми
Рис 1.1 Блок-схема функції SLAU
Рис 1.2 Блок-схема функ функції SLAU
Рис. 2 Блок-схема функції INVERS
Рис.3 Блок-схема функції main
Результат роботи програми
Висновок
У даній роботі навчитився обчислювати матрицю, зворотню заданій за допомогою ЕОМ.