Changeset f7920d7 in git


Ignore:
Timestamp:
Feb 16, 2002, 7:07:49 PM (21 years ago)
Author:
Mathias Schulze <mschulze@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'f875bbaccd0831e36aaed09ff6adeb3eb45aeb94')
Children:
7656d7ef34fdb1322019e176e07b6cbc09bf3261
Parents:
b760e984c47d38e60c36e200c211040230bad496
Message:
*mschulze: case eigenvalues not in basefield


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

Legend:

Unmodified
Added
Removed
  • Singular/eigenval.cc

    rb760e9 rf7920d7  
    22*  Computer Algebra System SINGULAR      *
    33*****************************************/
    4 /* $Id: eigenval.cc,v 1.7 2002-02-16 13:49:03 mschulze Exp $ */
     4/* $Id: eigenval.cc,v 1.8 2002-02-16 18:07:49 mschulze Exp $ */
    55/*
    66* ABSTRACT: eigenvalues of constant square matrices
     
    185185{
    186186  int n=MATROWS(M);
    187   int i,j;
    188 
    189   for(int k=1;k<n-1;k++)
    190   {
    191     j=k+1;
    192     while(j<n&&MATELEM(M,j,k)==0)
     187
     188  for(int k=1,j=2;k<n-1;k++,j=k+1)
     189  {
     190    while(j<=n&&MATELEM(M,j,k)==0)
    193191      j++;
    194192
    195     if(MATELEM(M,j,k)!=0)
     193    if(j<=n)
    196194    {
    197195      M=evSwap(M,j,k+1);
    198196
    199       for(i=j+1;i<=n;i++)
     197      for(int i=j+1;i<=n;i++)
    200198        M=evRowElim(M,i,k+1,k);
    201199    }
     
    233231    return(l);
    234232  }
     233
     234  M=(matrix)idJet((ideal)M,0);
    235235
    236236  M=evHessenberg(M);
     
    271271      for(int i=0;i<IDELEMS(e0);i++)
    272272      {
    273         number e1=nNeg(pGetCoeff(e0->m[i]));
    274         pDeleteLm(&e0->m[i]);
    275         if(pGetExp(e0->m[i],1)==0)
    276           e->m[k]=pNSet(nDiv(pGetCoeff(e0->m[i]),e1));
     273        if(pNext(e0->m[i])==NULL)
     274        {
     275          (*m)[k]=(*m0)[i];
     276          k++;
     277        }
    277278        else
    278           e->m[k]=pNSet(nDiv(e1,pGetCoeff(e0->m[i])));
    279         nDelete(&e1);
    280         (*m)[k]=(*m0)[i];
    281         k++;
     279        if(pGetExp(e0->m[i],1)<2&&pGetExp(pNext(e0->m[i]),1)<2&&
     280           pNext(pNext(e0->m[i]))==NULL)
     281        {
     282          number e1=nNeg(pGetCoeff(e0->m[i]));
     283          if(pGetExp(pNext(e0->m[i]),1)==0)
     284            e->m[k]=pNSet(nDiv(pGetCoeff(pNext(e0->m[i])),e1));
     285          else
     286            e->m[k]=pNSet(nDiv(e1,pGetCoeff(pNext(e0->m[i]))));
     287          nDelete(&e1);
     288          (*m)[k]=(*m0)[i];
     289          k++;
     290        }
     291        else
     292        {
     293          e->m[k]=e0->m[i];
     294          e0->m[i]=NULL;
     295          (*m)[k]=(*m0)[i];
     296          k++;
     297        }
    282298      }
    283299
     
    290306  idDelete((ideal *)&M);
    291307
    292   for(int i=0;i<n-1;i++)
    293   {
    294     if(e->m[i]!=NULL)
    295     for(int j=i+1;j<n;j++)
    296     {
    297       if(e->m[j]!=NULL)
    298       if(nEqual(pGetCoeff(e->m[i]),pGetCoeff(e->m[j])))
    299       {
    300         (*m)[i]+=(*m)[j];
    301         (*m)[j]=0;
     308  for(int i0=0;i0<n-1;i0++)
     309  {
     310    for(int i1=i0+1;i1<n;i1++)
     311    {
     312      if(pEqualPolys(e->m[i0],e->m[i1]))
     313      {
     314        (*m)[i0]+=(*m)[i1];
     315        (*m)[i1]=0;
    302316      }
    303317      else
    304       if(nGreater(pGetCoeff(e->m[i]),pGetCoeff(e->m[j])))
    305       {
    306         poly p=e->m[i];
    307         e->m[i]=e->m[j];
    308         e->m[j]=p;
    309         int k=(*m)[i];
    310         (*m)[i]=(*m)[j];
    311         (*m)[j]=k;
     318      {
     319        if(e->m[i0]==NULL&&!nGreaterZero(pGetCoeff(e->m[i1]))||
     320           e->m[i1]==NULL&&
     321          (nGreaterZero(pGetCoeff(e->m[i0]))||pNext(e->m[i0])!=NULL)||
     322           e->m[i0]!=NULL&&e->m[i1]!=NULL&&
     323          (pNext(e->m[i0])!=NULL&&pNext(e->m[i1])==NULL||
     324           pNext(e->m[i0])==NULL&&pNext(e->m[i1])==NULL&&
     325           nGreater(pGetCoeff(e->m[i0]),pGetCoeff(e->m[i1]))))
     326        {
     327          poly e1=e->m[i0];
     328          e->m[i0]=e->m[i1];
     329          e->m[i1]=e1;
     330          int m1=(*m)[i0];
     331          (*m)[i0]=(*m)[i1];
     332          (*m)[i1]=m1;
     333        }
    312334      }
    313335    }
Note: See TracChangeset for help on using the changeset viewer.