int TestInverse(const int size_m)
{
int i,j,errors=0;
matrix matrix_a(size_m,size_m);
//--- kare matrisi doldur
MatrixTestFirst(matrix_a);
//--- mikrosaniye ölç
ulong t1=GetMicrosecondCount();
//--- ters matrisi al
matrix inverse=matrix_a.Inv();
//--- ölç
ulong t2=GetMicrosecondCount();
//--- doğruluğu kontrol et
matrix identity=matrix_a.MatMul(inverse);
//---
for(i=0; i<size_m; i++)
{
for(j=0; j<size_m; j++)
{
double value;
//--- köşegen boyunca 1'ler olmalıdır
if(i==j)
value=1.0;
else
value=0.0;
if(MathClassify(identity[i][j])>FP_ZERO)
errors++;
else
{
if(identity[i][j]!=value)
{
double diff=MathAbs(identity[i][j]-value);
//--- çok fazla çarpma ve bölme, bu nedenle kontrol hassasiyetini azalt
if(diff>1e-9)
errors++;
}
}
}
}
//---
double elapsed_time=double(t2-t1)/1000.0;
printf("Inversion of matrix %d x %d %s errors=%d time=%.3f ms",size_m,size_m,errors==0?"passed":"failed",errors,elapsed_time);
return(errors);
}
|