0men (06.11.2019 15:50, просмотров: 218) ответил йцукен на Итерации никакие не нужны, система линейных уравнений решается в один проход. Теория описана в 100500 учебниках, но если вы хотите готовый код, тут несколько сложнее: полно простых программ, написанных какими-то пионерами, на другом полюсе -
готовый код
unsigned char gaussjordan
(
float * bvec,
float * amtrx,
float * xvec,
unsigned char numequ
)
{
unsigned char j,k,l,m,n,ite,ie=1;
float w,q,d;
float eps=0.00000001;
unsigned char label[ numequ];
for( n=0; n<numequ; n++ )
label[ n ]=0;
for( n=0; n<numequ; n++ )
{
w=0;
for( m=0; m<numequ; m++ )
{
q = fabs( amtrx[ (numequ+1)*m ] );
if ((q>w) && (label[ m ]==0))
{
w = q;
ite = m;
d = amtrx[ (numequ+1)*m ];
}
}
if (w<eps)
{
ie=0;
break;
}
m = numequ*ite;
label[ ite ] = 1;
for( l=0; l<numequ; l++)
{
if (l!=ite)
{
k = numequ*l;
q = amtrx[ k+ite ];
for( j=0; j<numequ; j++ )
amtrx[ k+j ] = (amtrx[ k+j ]*d-amtrx[ m+j ]*q)/d;
bvec[l]=(bvec[l]*d-bvec[ite]*q)/d;
}
}
}
for( n=0; n<numequ; n++ )
{
if ((fabs(amtrx[(numequ+1)*n]))<eps)
{
ie = 0;
break;
}
xvec[ n ] = bvec[ n ]/amtrx[ (numequ+1)*n ];
}
return ie;
}