Changeset 806c18 in git for factory/cf_resultant.cc


Ignore:
Timestamp:
Nov 15, 2010, 4:34:57 PM (13 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '91fdef05f09f54b8d58d92a472e9c4a43aa4656f')
Children:
7c3bca08c96331a56864c1d35b8c2e8ff2e0be89
Parents:
c840d97af622b4e4da8761738b540e21144f716b
Message:
format

git-svn-id: file:///usr/local/Singular/svn/trunk@13655 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/cf_resultant.cc

    rc840d9 r806c18  
    4848    // some checks on triviality
    4949    if ( f.isZero() || g.isZero() ) {
    50         trivialResult[0] = 0;
    51         return trivialResult;
     50        trivialResult[0] = 0;
     51        return trivialResult;
    5252    }
    5353
    5454    // make x main variable
    5555    if ( f.mvar() > x || g.mvar() > x ) {
    56         if ( f.mvar() > g.mvar() )
    57             X = f.mvar();
    58         else
    59             X = g.mvar();
    60         F = swapvar( f, X, x );
    61         G = swapvar( g, X, x );
     56        if ( f.mvar() > g.mvar() )
     57            X = f.mvar();
     58        else
     59            X = g.mvar();
     60        F = swapvar( f, X, x );
     61        G = swapvar( g, X, x );
    6262    }
    6363    else {
    64         X = x;
    65         F = f;
    66         G = g;
     64        X = x;
     65        F = f;
     66        G = g;
    6767    }
    6868    // at this point, we have to calculate the sequence of F and
     
    8383    // make sure that S[j+1] is regular and j < n
    8484    if ( m == n && j > 0 ) {
    85         S[j-1] = LC( S[j], X ) * psr( S[j+1], S[j], X );
    86         j--;
     85        S[j-1] = LC( S[j], X ) * psr( S[j+1], S[j], X );
     86        j--;
    8787    } else if ( m < n ) {
    88         S[j-1] = LC( S[j], X ) * LC( S[j], X ) * S[j+1];
    89         j--;
     88        S[j-1] = LC( S[j], X ) * LC( S[j], X ) * S[j+1];
     89        j--;
    9090    } else if ( m > n && j > 0 ) {
    91         // calculate first step
    92         r = degree( S[j], X );
    93         R = LC( S[j+1], X );
    94 
    95         // if there was a gap calculate similar polynomial
    96         if ( j > r && r >= 0 )
    97             S[r] = power( LC( S[j], X ), j - r ) * S[j] * power( R, j - r );
    98 
    99         if ( r > 0 ) {
    100             // calculate remainder
    101             S[r-1] = psr( S[j+1], S[j], X ) * power( -R, j - r );
    102             j = r-1;
    103         }
     91        // calculate first step
     92        r = degree( S[j], X );
     93        R = LC( S[j+1], X );
     94
     95        // if there was a gap calculate similar polynomial
     96        if ( j > r && r >= 0 )
     97            S[r] = power( LC( S[j], X ), j - r ) * S[j] * power( R, j - r );
     98
     99        if ( r > 0 ) {
     100            // calculate remainder
     101            S[r-1] = psr( S[j+1], S[j], X ) * power( -R, j - r );
     102            j = r-1;
     103        }
    104104    }
    105105
    106106    while ( j > 0 ) {
    107         // at this point, 0 < j < n and S[j+1] is regular
    108         r = degree( S[j], X );
    109         R = LC( S[j+1], X );
    110        
    111         // if there was a gap calculate similar polynomial
    112         if ( j > r && r >= 0 )
    113             S[r] = (power( LC( S[j], X ), j - r ) * S[j]) / power( R, j - r );
    114 
    115         if ( r <= 0 ) break;
    116         // calculate remainder
    117         S[r-1] = psr( S[j+1], S[j], X ) / power( -R, j - r + 2 );
    118 
    119         j = r-1;
    120         // again 0 <= j < r <= jOld and S[j+1] is regular
     107        // at this point, 0 < j < n and S[j+1] is regular
     108        r = degree( S[j], X );
     109        R = LC( S[j+1], X );
     110
     111        // if there was a gap calculate similar polynomial
     112        if ( j > r && r >= 0 )
     113            S[r] = (power( LC( S[j], X ), j - r ) * S[j]) / power( R, j - r );
     114
     115        if ( r <= 0 ) break;
     116        // calculate remainder
     117        S[r-1] = psr( S[j+1], S[j], X ) / power( -R, j - r + 2 );
     118
     119        j = r-1;
     120        // again 0 <= j < r <= jOld and S[j+1] is regular
    121121    }
    122122
    123123    for ( j = 0; j <= S.max(); j++ ) {
    124         // reswap variables if necessary
    125         if ( X != x ) {
    126             S[j] = swapvar( S[j], X, x );
    127         }
     124        // reswap variables if necessary
     125        if ( X != x ) {
     126            S[j] = swapvar( S[j], X, x );
     127        }
    128128    }
    129129
     
    148148    // f or g in R
    149149    if ( degree( f, x ) == 0 )
    150         return power( f, degree( g, x ) );
     150        return power( f, degree( g, x ) );
    151151    if ( degree( g, x ) == 0 )
    152         return power( g, degree( f, x ) );
     152        return power( g, degree( f, x ) );
    153153
    154154    // f and g are linear polynomials
     
    180180    // here because this may involve variable swapping.
    181181    if ( f.isZero() || g.isZero() )
    182         return 0;
     182        return 0;
    183183    if ( f.mvar() < x )
    184         return power( f, g.degree( x ) );
     184        return power( f, g.degree( x ) );
    185185    if ( g.mvar() < x )
    186         return power( g, f.degree( x ) );
     186        return power( g, f.degree( x ) );
    187187
    188188    // make x main variale
     
    190190    Variable X;
    191191    if ( f.mvar() > x || g.mvar() > x ) {
    192         if ( f.mvar() > g.mvar() )
    193             X = f.mvar();
    194         else
    195             X = g.mvar();
    196         F = swapvar( f, X, x );
    197         G = swapvar( g, X, x );
     192        if ( f.mvar() > g.mvar() )
     193            X = f.mvar();
     194        else
     195            X = g.mvar();
     196        F = swapvar( f, X, x );
     197        G = swapvar( g, X, x );
    198198    }
    199199    else {
    200         X = x;
    201         F = f;
    202         G = g;
     200        X = x;
     201        F = f;
     202        G = g;
    203203    }
    204204    // at this point, we have to calculate resultant( F, G, X )
     
    210210    // catch trivial cases
    211211    if ( m+n <= 2 || m == 0 || n == 0 )
    212         return swapvar( trivialResultant( F, G, X ), X, x );
     212        return swapvar( trivialResultant( F, G, X ), X, x );
    213213
    214214    // exchange F and G if necessary
    215215    int flipFactor;
    216216    if ( m < n ) {
    217         CanonicalForm swap = F;
    218         F = G; G = swap;
    219         int degswap = m;
    220         m = n; n = degswap;
    221         if ( m & 1 && n & 1 )
    222             flipFactor = -1;
    223         else
    224             flipFactor = 1;
     217        CanonicalForm swap = F;
     218        F = G; G = swap;
     219        int degswap = m;
     220        m = n; n = degswap;
     221        if ( m & 1 && n & 1 )
     222            flipFactor = -1;
     223        else
     224            flipFactor = 1;
    225225    } else
    226         flipFactor = 1;
     226        flipFactor = 1;
    227227
    228228    // this is not an effective way to calculate the resultant!
    229229    CanonicalForm extFactor;
    230230    if ( m == n ) {
    231         if ( n & 1 )
    232             extFactor = -LC( G, X );
    233         else
    234             extFactor = LC( G, X );
     231        if ( n & 1 )
     232            extFactor = -LC( G, X );
     233        else
     234            extFactor = LC( G, X );
    235235    } else
    236         extFactor = power( LC( F, X ), m-n-1 );
     236        extFactor = power( LC( F, X ), m-n-1 );
    237237
    238238    CanonicalForm result;
Note: See TracChangeset for help on using the changeset viewer.