Changeset ae8a3a in git for factory/facAlgFuncUtil.cc


Ignore:
Timestamp:
Dec 27, 2014, 4:10:36 PM (9 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
4058df38c2114c692455481741dc4f1a8439e01b
Parents:
2f3b2753bc2be6d7396f61b99d46ba1977c9388d
git-author:
Martin Lee <martinlee84@web.de>2014-12-27 16:10:36+01:00
git-committer:
Martin Lee <martinlee84@web.de>2015-03-17 21:34:47+01:00
Message:
fix: bug in substitution
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/facAlgFuncUtil.cc

    r2f3b27 rae8a3a  
    122122{
    123123  if (isFunctionField)
    124     ASSERT (2*a.length() == b.length(), "wrong length of lists");
     124    ASSERT ((a.length() - 1)*4 == b.length() || (a.length() == 1 && b.length() == 2), "wrong length of lists");
    125125  else
    126     ASSERT (a.length() == b.length(), "lists of equal length expected");
     126    ASSERT ((a.length() - 1)*2 == b.length() || (a.length() == 1 && b.length() == 1), "lists of equal length expected");
    127127  CFListIterator j= b;
    128   CanonicalForm result= f, tmp, powj;
     128  CanonicalForm result= f, tmp, powj, tmp3;
    129129  CFListIterator i= a;
    130   int length= a.length();
    131   int count= 0;
    132   for (; i.hasItem() && j.hasItem(); i++, j++, count++)
    133   {
    134     if (length - count == 2)
    135     {
    136       if (!isFunctionField)
    137       {
    138         result= result (b.getLast(), a.getLast().mvar());
    139         result= result (j.getItem(), i.getItem().mvar());
    140         break;
    141       }
    142       else
    143       {
    144         tmp= b.getLast();
     130  CanonicalForm tmp1= i.getItem();
     131  i++;
     132  CanonicalForm tmp2= j.getItem();
     133  j++;
     134  for (;i.hasItem() && j.hasItem(); i++, j++)
     135  {
     136    if (!isFunctionField)
     137    {
     138      result= result (j.getItem(), i.getItem().mvar());
     139      result= result (tmp2, tmp1.mvar());
     140      tmp1= i.getItem();
     141      j++;
     142      if (j.hasItem())
     143        tmp2= j.getItem();
     144    }
     145    else
     146    {
     147        tmp= j.getItem();
    145148        j++;
     149        tmp3= j.getItem();
    146150        j++;
    147         powj= power (tmp, degree (result, a.getLast().mvar()));
    148         result= evaluate (result, j.getItem(), tmp, powj, a.getLast().mvar());
     151        powj= power (j.getItem(), degree (result, i.getItem().mvar()));
     152        result= evaluate (result, tmp3, j.getItem(), powj, i.getItem().mvar());
     153
     154        if (fdivides (powj, result, tmp3))
     155          result= tmp3;
     156
     157        result /= vcontent (result, Variable (i.getItem().level() + 1));
     158
     159        powj= power (tmp, degree (result, tmp1.mvar()));
     160        result= evaluate (result, tmp2, tmp, powj, tmp1.mvar());
    149161
    150162        if (fdivides (powj, result, tmp))
    151163          result= tmp;
    152164
    153         result /= vcontent (result, Variable (a.getLast().level() + 1));
    154         j--;
    155         j--;
    156         tmp= j.getItem();
     165        result /= vcontent (result, Variable (tmp1.level() + 1));
     166        tmp1= i.getItem();
    157167        j++;
    158         powj= power (j.getItem(), degree (result, i.getItem().mvar()));
    159         result= evaluate (result, tmp, j.getItem(), powj, i.getItem().mvar());
    160 
    161         if (fdivides (powj, result, tmp))
    162           result= tmp;
    163 
    164         result /= vcontent (result, Variable (i.getItem().level() + 1));
    165         break;
    166       }
    167     }
    168     else
    169     {
    170       if (!isFunctionField)
    171         result= result (j.getItem(), i.getItem().mvar());
    172       else
    173       {
    174         tmp= j.getItem();
    175         j++;
    176         powj= power (j.getItem(), degree (result, i.getItem().mvar()));
    177         result= evaluate (result, tmp, j.getItem(), powj, i.getItem().mvar());
    178 
    179         if (fdivides (powj, result, tmp))
    180           result= tmp;
    181 
    182         result /= vcontent (result, Variable (i.getItem().level() + 1));
    183       }
     168        if (j.hasItem())
     169          tmp2= j.getItem();
    184170    }
    185171  }
Note: See TracChangeset for help on using the changeset viewer.