Changeset 327efa2 in git for factory/facHensel.cc


Ignore:
Timestamp:
Sep 14, 2011, 2:38:38 PM (13 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', '4a9821a93ffdc22a6696668bd4f6b8c9de3e6c5f')
Children:
09723d9937585aae280f53597c2c61b2b3e6304a
Parents:
725e6002e0b07ad1474e14f72296c0c85a47ae4d
Message:
different lifting  in precomputeLeadingCoeff
extend henselLift122 to lift more than two factors


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

Legend:

Unmodified
Added
Removed
  • factory/facHensel.cc

    r725e600 r327efa2  
    27972797
    27982798  Pi [0] += tmp[0]*xToJ*F.mvar();
     2799
     2800  int degPi, degBuf;
     2801  for (int l= 1; l < factors.length() - 1; l++)
     2802  {
     2803    degPi= degree (Pi [l - 1], x);
     2804    degBuf= degree (bufFactors[l + 1], x);
     2805    if (degPi > 0 && degBuf > 0)
     2806    {
     2807      M (j + 1, l + 1)= mulNTL (Pi [l - 1] [j], bufFactors[l + 1] [j]);
     2808      if (j + 2 <= M.rows())
     2809        M (j + 2, l + 1)= mulNTL (Pi [l - 1][j + 1], bufFactors[l + 1] [j + 1]);
     2810    }
     2811
     2812    if (degPi > 0 && degBuf > 0)
     2813      uIZeroJ= mulNTL (Pi[l -1] [0], buf[l + 1]) +
     2814               mulNTL (uIZeroJ, bufFactors[l+1] [0]);
     2815    else if (degPi > 0)
     2816      uIZeroJ= mulNTL (uIZeroJ, bufFactors[l + 1]);
     2817    else if (degBuf > 0)
     2818      uIZeroJ= mulNTL (Pi[l - 1], buf[1]);
     2819    else
     2820      uIZeroJ= 0;
     2821
     2822    Pi [l] += xToJ*uIZeroJ;
     2823
     2824    one= bufFactors [l + 1];
     2825    two= Pi [l - 1];
     2826    if (degBuf > 0 && degPi > 0)
     2827    {
     2828      while (one.hasTerms() && one.exp() > j) one++;
     2829      while (two.hasTerms() && two.exp() > j) two++;
     2830      for (k= 1; k <= (int) ceil (j/2.0); k++)
     2831      {
     2832        if (k != j - k + 1)
     2833        {
     2834          if ((one.hasTerms() && one.exp() == j - k + 1) &&
     2835              (two.hasTerms() && two.exp() == j - k + 1))
     2836          {
     2837            tmp[l] += mulNTL ((bufFactors[l + 1] [k] + one.coeff()),
     2838                      (Pi[l - 1] [k] + two.coeff())) - M (k + 1, l + 1) -
     2839                      M (j - k + 2, l + 1);
     2840            one++;
     2841            two++;
     2842          }
     2843          else if (one.hasTerms() && one.exp() == j - k + 1)
     2844          {
     2845            tmp[l] += mulNTL ((bufFactors[l + 1] [k] + one.coeff()),
     2846                               Pi[l - 1] [k]) - M (k + 1, l + 1);
     2847            one++;
     2848          }
     2849          else if (two.hasTerms() && two.exp() == j - k + 1)
     2850          {
     2851            tmp[l] += mulNTL (bufFactors[l + 1] [k],
     2852                      (Pi[l - 1] [k] + two.coeff())) - M (k + 1, l + 1);
     2853            two++;
     2854           }
     2855        }
     2856        else
     2857          tmp[l] += M (k + 1, l + 1);
     2858      }
     2859    }
     2860
     2861    if (degPi >= j + 1 && degBuf >= j + 1)
     2862    {
     2863      if (j + 2 <= M.rows())
     2864        tmp [l] += mulNTL ((Pi [l - 1] [j + 1]+ Pi [l - 1] [0]),
     2865                           (bufFactors [l + 1] [j + 1] + bufFactors [l + 1] [0])
     2866                          ) - M(1,l+1) - M (j + 2,l+1);
     2867    }
     2868    else if (degPi >= j + 1)
     2869    {
     2870      if (degBuf > 0)
     2871        tmp[l] += mulNTL (Pi [l - 1] [j+1], bufFactors [l + 1] [0]);
     2872      else
     2873        tmp[l] += mulNTL (Pi [l - 1] [j+1], bufFactors [l + 1]);
     2874    }
     2875    else if (degBuf >= j + 1)
     2876    {
     2877      if (degPi > 0)
     2878        tmp[l] += mulNTL (Pi [l - 1] [0], bufFactors [l + 1] [j + 1]);
     2879      else
     2880        tmp[l] += mulNTL (Pi [l - 1], bufFactors [l + 1] [j + 1]);
     2881    }
     2882
     2883    Pi[l] += tmp[l]*xToJ*F.mvar();
     2884  }
    27992885  return;
    28002886}
     
    28092895  CFList bufFactors2= factors;
    28102896  bufFactors2.removeFirst();
    2811   CanonicalForm s,t;
    2812   extgcd (bufFactors2.getFirst(), bufFactors2.getLast(), s, t);
    2813   diophant= CFList();
    2814   diophant.append (t);
    2815   diophant.append (s);
     2897  diophant= diophantine (F[0], bufFactors2);
    28162898  DEBOUTLN (cerr, "diophant= " << diophant);
    28172899
     
    28462928  }
    28472929
     2930  for (i= 1; i < Pi.size(); i++)
     2931  {
     2932    if (degree (Pi[i-1], x) > 0 && degree (bufFactors [i+1], x) > 0)
     2933    {
     2934      M (1,i+1)= mulNTL (Pi[i-1] [0], bufFactors[i+1] [0]);
     2935      Pi [i]= M (1,i+1) + (mulNTL (Pi[i-1] [1], bufFactors[i+1] [0]) +
     2936                       mulNTL (Pi[i-1] [0], bufFactors [i+1] [1]))*x;
     2937    }
     2938    else if (degree (Pi[i-1], x) > 0)
     2939    {
     2940      M (1,i+1)= mulNTL (Pi[i-1] [0], bufFactors [i+1]);
     2941      Pi [i]=  M(1,i+1) + mulNTL (Pi[i-1] [1], bufFactors[i+1])*x;
     2942    }
     2943    else if (degree (bufFactors[i+1], x) > 0)
     2944    {
     2945      M (1,i+1)= mulNTL (Pi[i-1], bufFactors [i+1] [0]);
     2946      Pi [i]= M (1,i+1) + mulNTL (Pi[i-1], bufFactors[i+1] [1])*x;
     2947    }
     2948    else
     2949    {
     2950      M (1,i+1)= mulNTL (Pi [i-1], bufFactors [i+1]);
     2951      Pi [i]= M (1,i+1);
     2952    }
     2953  }
     2954
    28482955  for (i= 1; i < l; i++)
    28492956    henselStep122 (F, bufFactors2, bufFactors, diophant, M, Pi, i, LCs);
     
    28542961  return;
    28552962}
     2963
    28562964
    28572965/// solve \f$ E=sum_{i= 1}^{r}{\sigma_{i}prod_{j=1, j\neq i}^{r}{f_{i}}}\f$
Note: See TracChangeset for help on using the changeset viewer.