Changeset fd1101 in git


Ignore:
Timestamp:
Nov 21, 2013, 4:33:34 PM (10 years ago)
Author:
Adi Popescu <adi_popescum@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
2e10a09e739396e2397d3b2288761c701dce9d66
Parents:
e212bd68feb2c9b1d4a81fd65f7b8f304908a7b9
Message:
Problems solved. It remains to test it more and to optimize it
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/hilb.cc

    re212bd rfd1101  
    228228// ---------------------------------- ADICHANGES ---------------------------------------------
    229229//!!!!!!!!!!!!!!!!!!!!! Just for Monomial Ideals !!!!!!!!!!!!!!!!!!!!!!!!!!!!
    230 void PutInVector(int degvalue, int oldposition, int where)
     230static void PutInVector(int degvalue, int oldposition, int where)
    231231{
    232232    hilbertpowerssorted.resize(hilbertpowerssorted.size()+2);
     
    240240}
    241241
    242 void SortPowerVec()
     242static void SortPowerVec()
    243243{
    244244    int i,j;
     
    256256            PutInVector(hilbertpowers[i], i, 0);
    257257        }
    258         if(hilbertpowers[i]>=hilbertpowerssorted[hilbertpowerssorted.size()-2])
     258        if((hilbertpowers[i]>=hilbertpowerssorted[hilbertpowerssorted.size()-2]) && (flag == TRUE))
    259259        {
    260260            flag=FALSE;
     
    281281}
    282282
    283 int DegMon(poly p, ring tailRing)
     283static int DegMon(poly p, ring tailRing)
    284284{
    285285    int i,deg;
    286286    deg = 0;
    287     for(i=0;i<=tailRing->N;i++)
     287    for(i=1;i<=tailRing->N;i++)
    288288    {
    289289        deg = deg + p_GetExp(p, i, tailRing);
     
    292292}
    293293
    294 poly SearchP(ideal I, ring tailRing)
     294static poly SearchP(ideal I, ring tailRing)
    295295{
    296296    int i,j,exp;
     
    302302            res = p_ISet(1, tailRing);
    303303            res = p_Copy(I->m[i], tailRing);
    304             for(j=0;j<=tailRing->N;j++)
     304            for(j=1;j<=tailRing->N;j++)
    305305            {
    306306                exp = p_GetExp(I->m[i], j, tailRing);
     
    316316}
    317317
    318 poly ChoosePVar (ideal I, ring tailRing)
     318static poly ChoosePVar (ideal I, ring tailRing)
    319319{
    320320    bool flag=TRUE;
     
    344344}
    345345
    346 ideal idSimplify(ideal I, ring tailRing)
     346static ideal idSimplify(ideal I, ring tailRing)
    347347{
    348348    int i,j;
    349349    bool flag;
    350350    /*std::vector<int>  var;
    351     for(i=0;i<=tailRing->N;i++)
     351    for(i=1;i<=tailRing->N;i++)
    352352    {
    353353        if(p_GetExp(I->[IDELEMS(I)-1], tailRing)>0)
     
    361361    {
    362362        flag=TRUE;
    363         for(j=0;(j<=tailRing->N)&&(flag);j++)
     363        for(j=1;(j<=tailRing->N)&&(flag);j++)
    364364        {
    365365            if(p_GetExp(I->m[i], j, tailRing) < p_GetExp(I->m[IDELEMS(I)-1], j, tailRing))
     
    378378
    379379
    380 void eulerchar (ideal I, ring tailRing)
     380/*static void eulerchar (ideal I, ring tailRing)
    381381{
    382382    //gmp_printf("\nEuler char: %Zd\n", ec);
     
    385385    {
    386386        mpz_init(dummy);
    387         //change: era 1 in loc de 0
    388387        mpz_set_si(dummy, 1);
    389388        mpz_sub(ec, ec, dummy);
     
    394393        if(!p_IsOne(I->m[0], tailRing))
    395394        {
    396             //aici nu era nimic
    397             //mpz_set_si(dummy, 1);
    398             //mpz_add(ec, ec, dummy);
    399395            return;
    400396        }
     
    421417    ideal Iplusp = id_Add(I,p,tailRing);
    422418    Iplusp=idSimplify(Iplusp, tailRing);
    423     //mpz_t i,j;
    424     //i = eulerchar(Ip, ec, tailRing);
    425     //j = eulerchar(Iplusp, ec, tailRing);
    426     //mpz_add(ec, i,j);
    427419    eulerchar(Ip, tailRing);
    428420    eulerchar(Iplusp, tailRing);
    429421    return;
    430 }
    431 
    432 poly SqFree (ideal I, ring tailRing)
     422}*/
     423
     424static bool JustVar(ideal I, ring tailRing)
     425{
     426    int i,j;
     427    bool foundone;
     428    for(i=0;i<=IDELEMS(I)-1;i++)
     429    {
     430        foundone = FALSE;
     431        for(j = 1;j<=tailRing->N;j++)
     432        {
     433            if(p_GetExp(I->m[i], j, tailRing)>0)
     434            {
     435                if(foundone == TRUE)
     436                {
     437                    return(FALSE);
     438                }
     439                foundone = TRUE;
     440            }
     441        }       
     442    }
     443    return(TRUE);
     444}
     445
     446static void eulerchar (ideal I, ring tailRing, int variables)
     447{
     448    //gmp_printf("\nEuler char: %Zd\n", ec);
     449    mpz_t dummy;
     450    if(JustVar(I, tailRing) == TRUE)
     451    {
     452        if(IDELEMS(I) == variables)
     453        {
     454            mpz_init(dummy);
     455            if((variables % 2) == 0)
     456                {mpz_set_si(dummy, 1);}
     457            else
     458                {mpz_set_si(dummy, -1);}
     459            mpz_add(ec, ec, dummy);
     460        }
     461        return;       
     462    }
     463    ideal p = idInit(1,1);
     464    p->m[0] = SearchP(I, tailRing);
     465    //idPrint(I);
     466    //printf("\nSearchP founded: \n");pWrite(p->m[0]);
     467    ideal Ip = idQuot(I,p,TRUE,TRUE);
     468    ideal Iplusp = id_Add(I,p,tailRing);
     469    Iplusp=idSimplify(Iplusp, tailRing);
     470    int i,howmanyvarinp = 0;
     471    for(i = 1;i<=tailRing->N;i++)
     472    {
     473        if(p_GetExp(p->m[0],i,tailRing)>0)
     474        {
     475            howmanyvarinp++;
     476        }
     477    }   
     478    eulerchar(Ip, tailRing, variables-howmanyvarinp);
     479    eulerchar(Iplusp, tailRing, variables);
     480    return;
     481}
     482
     483static poly SqFree (ideal I, ring tailRing)
    433484{
    434485    int i,j;
     
    437488    for(i=IDELEMS(I)-1;(i>=0)&&(flag);i--)
    438489    {
    439         for(j=0;(j<=tailRing->N)&&(flag);j++)
     490        for(j=1;(j<=tailRing->N)&&(flag);j++)
    440491        {
    441492            if(p_GetExp(I->m[i],j,tailRing)>1)
     
    450501}
    451502
    452 void rouneslice(ideal I, ideal S, poly q, ring tailRing, poly x)
     503static void rouneslice(ideal I, ideal S, poly q, ring tailRing, poly x)
    453504{
    454505    int i,j;
     
    474525    {
    475526        m = p_Copy(I->m[i],tailRing);
    476         for(j=0;j<=tailRing->N;j++)
     527        for(j=1;j<=tailRing->N;j++)
    477528        {
    478529            dummy = p_GetExp(m,j,tailRing);
     
    507558    }
    508559    m = p_ISet(1,tailRing);
    509     for(i=0;i<=tailRing->N;i++)
     560    for(i=1;i<=tailRing->N;i++)
    510561    {
    511562        dummy=0;
     
    538589            m = p_ISet(1,tailRing);
    539590            //m = p_Divide(x,I->m[i],tailRing);
    540             for(j=tailRing->N; j>=0; j--)
     591            //      THIS IS FOR THE OTHER IDEA FOR COMPUTING THE EULER CHARACTERISTIC!!!! INSTEAD
     592            m = I->m[i];
     593            /*for(j=tailRing->N; j>=1; j--)
    541594            {
    542595                p_SetExp(m,j, p_GetExp(x,j,tailRing)- p_GetExp(I->m[i],j,tailRing),tailRing);
    543             }
     596            }*/
     597           
    544598            printf("    ");
    545599            p_Setm(m, tailRing);
     
    549603        printf("\n Euler Characteristic = ");
    550604        mpz_init(dummympz);
    551         eulerchar(koszsimp, tailRing);
     605        eulerchar(koszsimp, tailRing, tailRing->N);
    552606        //gmp_printf("dummy %Zd \n", dummympz);
    553607        gmp_printf("ec %Zd \n", ec);
     
    583637}
    584638
    585 void slicehilb(ideal I, ring tailRing)
     639static void slicehilb(ideal I, ring tailRing)
    586640{
    587641    printf("Adi changes are here: \n");
Note: See TracChangeset for help on using the changeset viewer.