vprut1 (matrix A) { int n, i, j, m, lf; real er, x; n = DIM(A,0); MATRIX (VP, MAX, n, 1) MATRIX (L, MAX*MAX, n, n) MATRIX (R, MAX*MAX, n, n) m = 0; for (i=0; i<n; i++) VAL1(VP,i) = 0; er = 1; lf = 1; while ((m < 50) && /* (er > 0.5) */ lf ) { lr (A, L, R); printf ("L : "); print_matrix (L); printf ("R : "); print_matrix (R); prod_matrix (L, R, A); printf ("LR: "); print_matrix (A); prod_matrix (R, L, A); printf ("A : "); print_matrix (A); gets (buf); er = 0; m++; for (i=0; i<n; i++) for (j=0; j<n; j++) { if (j < i) { x = fabs (VAL2(A,i,j)); if (x > er) er = x; } } lf = 0; for (i=0; i<n; i++) { if (fabs(VAL2(A,i,i)-VAL1(VP,i)) > 1e-4) lf = 1; } for (i=0; i<n; i++) VAL1(VP,i) = VAL2(A,i,i); } if (m == 50) printf ("Non convergence\n"); else { print_matrix (A); } ENDMAT ENDMAT ENDMAT }
vprut (matrix A1, matrix VP) { int n, i, status; n = DIM(A1,0); MATRIX(A,MAX*MAX,n,n); status = vprut1 (A); for (i=0; i<n; i++) VAL1(VP,i) = VAL2(A,i,i); return status; ENDMAT }
void FORTE_FB_HYST_3::alg_REQ(void){ CIEC_REAL X; X = HYS()*0.5f; if((IN() < VAL1()-X)){ Q1() = true; } else if((IN() > VAL1() + X)){ Q1() = false; }; if((IN() < VAL2()-X)){ Q2() = false; } else if((IN() > VAL2()+X)){ Q2() = true; }; }