Метод Крамера. Не большая проблема.
Добавлено: 18 май 2013, 20:22
я написала программу по курсовой работе, "Программная реализация задачи нахождения решения системы линейных уравнений по формулам Крамера», я написала функцию для нахождения определителя. Возникла 1 проблема, когда я вызываю эту функцию для нахождения побочных определителей. Как потом можно обратиться к результату? мне нужно каждый из побочных определителей поделить на определитель основной матрицы. Программа работает и находит все определители. Подскажите, пожалуйста, я пробовала сделать массив из значений побочных определителей, но программа не правильно работает.
Код: Выделить всё
double determinant(double **matrica_a, int n)
{int i,j,k,r; double c,M,max,s, det=1, **a;
a=new double*[n];
for(i=0;i<n;i++) a[i]=new double [n];
for(i=0;i<n;i++)
for(j=0;j<n;j++) a[i][j]=matrica_a[i][j];
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; }
if(r!=k) det=-det;
for(j=0;j<n;j++)
{c=a[k][j]; a[k][j]=a[r][j]; a[r][j]=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];
}
for(i=0;i<n;i++) det*=a[i][i];
return det;
}
int main(int argc, char* argv[])
{int result, i, j, g, N;
double **a,b; double *x, *y;
cout<<"N="; cin>>N;
a=new double*[N];
x=new double[N];
y=new double[N];
for(i=0;i<N;i++) a[i]=new double[N];
cout<<"input matrix A"<<endl;
for(i=0;i<N;i++)
for(j=0;j<N;j++) cin>>a[i][j];
cout<<"\n A="<<endl;
for (i=0; i<N; i++)
{
for (j=0; j<N; j++) cout<<setw(4)<<a[i][j]<<" ";
cout<<endl;
}
cout<<"input matrix B"<<endl;
for(i=0;i<N;i++) cin>>x[i];
cout<<"\n B="<<endl;
for (i=0; i<N; i++) cout<<x[i]<<endl;
cout<<"\ndeterminant="<<determinant(a,N)<<endl;
for(j=0;j<N;j++)
{
for(i=0; i<N; i++)
{g=a[i][j]; a[i][j]=x[i]; x[i]=g;}
cout<<"\ndeterminant pobochnii="<<determinant(a,N)<<endl;
for(i=0; i<N; i++)
{g=a[i][j]; a[i][j]=x[i]; x[i]=g;}
}
cin>>N;
for(i=0; i<N; i++)
delete [] a[i];
delete [] a;
delete [] x;
delete [] y;}
//------------------------------------