Код для метода Жордана с выбором главного элемента по столбцу на С
Как модифицировать код с поиском главного элемента по всей матрице, чтобы получить код с выбором главного элемента по столбцу?
indi - массив элементов типа int размера n для того чтобы менять строки/столбцы(i/j) матрицы.
int sole(double *a, double *b, int *indi, int *indj, int n)
{
for(int i=0; i<n; i++)
{
indi[i]=i;
indj[i]=i;
}
for(int k=0; k<n; k++)
{
if(fabs(amax(a, indi, indj, k, n))<EPS)
return -1;
else
{
B(k)/=A(k,k);
for(int j=k+1; j<n; j++)
A(k,j)/=A(k,k);
for(int i=0; i<n; i++)
if(i!=k)
{
B(i)-=A(i,k)*B(k);
for(int j=k+1; j<n; j++)
A(i,j)-=A(i,k)*A(k,j);
}
}
}
for(int i=0; i<n; i++)
{
a[indj[i]]=B(i);
}
for(int i=0; i<n; i++)
{
b[i]=a[i];
}
return 0;
}
double amax(double *a, int *indi, int *indj, int k, int n)
{
double max=A(k,k);
int imax=k, jmax=k, c;
for(int i=k; i<n; i++)
for(int j=k; j<n; j++)
if(fabs(A(i,j))>fabs(max))
{
max=A(i,j);
imax=i;
jmax=j;
}
if(jmax>k)
{
c=indj[k];
indj[k]=indj[jmax];
indj[jmax]=c;
}
if(imax>k)
{
c=indi[k];
indi[k]=indi[imax];
indi[imax]=c;
}
return max;
}