33 lines
559 B
C
33 lines
559 B
C
|
|
#define EPS 1.0e-6
|
|
|
|
void simp2(float **a, int m, int n, int *ip, int kp)
|
|
{
|
|
int k,i;
|
|
float qp,q0,q,q1;
|
|
|
|
*ip=0;
|
|
for (i=1;i<=m;i++)
|
|
if (a[i+1][kp+1] < -EPS) break;
|
|
if (i>m) return;
|
|
q1 = -a[i+1][1]/a[i+1][kp+1];
|
|
*ip=i;
|
|
for (i=*ip+1;i<=m;i++) {
|
|
if (a[i+1][kp+1] < -EPS) {
|
|
q = -a[i+1][1]/a[i+1][kp+1];
|
|
if (q < q1) {
|
|
*ip=i;
|
|
q1=q;
|
|
} else if (q == q1) {
|
|
for (k=1;k<=n;k++) {
|
|
qp = -a[*ip+1][k+1]/a[*ip+1][kp+1];
|
|
q0 = -a[i+1][k+1]/a[i+1][kp+1];
|
|
if (q0 != qp) break;
|
|
}
|
|
if (q0 < qp) *ip=i;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#undef EPS
|