Changeset 61549b in git for Singular/LIB/linalg.lib


Ignore:
Timestamp:
Nov 5, 2001, 10:17:05 AM (22 years ago)
Author:
Mathias Schulze <mschulze@…>
Branches:
(u'spielwiese', '4a9821a93ffdc22a6696668bd4f6b8c9de3e6c5f')
Children:
1f8111cd2acad6f5a631540b24272cf5aca44000
Parents:
5f403d5fffa49541688757a3ff48dc8d052361f2
Message:
*** empty log message ***


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

Legend:

Unmodified
Added
Removed
  • Singular/LIB/linalg.lib

    r5f403d5 r61549b  
    11//GMG last modified: 04/25/2000
    22//////////////////////////////////////////////////////////////////////////////
    3 version="$Id: linalg.lib,v 1.19 2001-08-25 14:56:41 mschulze Exp $";
     3version="$Id: linalg.lib,v 1.20 2001-11-05 09:17:05 mschulze Exp $";
    44category="Linear Algebra";
    55info="
     
    2626 pos_def(A,i);        test symmetric matrix for positive definiteness
    2727 hessenberg(M);       transforms M to Hessenberg form
    28  spnormalize(a[,m]);  normalize spectrum
    29  eigenval(M);         eigenvalues of M with multiplicities
     28 spnf(a[,m][,v|V]);   normalize spectrum
     29 eigenvalues(M);      eigenvalues of M with multiplicities
    3030 jordan(M);           Jordan data of constant square matrix M
    3131 jordanbasis(M);      Jordan basis of constant square matrix M
     
    13351335///////////////////////////////////////////////////////////////////////////////
    13361336
    1337 static proc spappend(list l,number e,int m)
    1338 {
    1339   if(size(l)==0)
    1340   {
    1341     l=list(ideal(e),intvec(m));
    1342   }
    1343   else
    1344   {
    1345     int n=ncols(l[1]);
    1346     l[1][n+1]=e;
    1347     l[2][n+1]=m;
    1348   }
    1349   return(l);
    1350 }
    1351 ///////////////////////////////////////////////////////////////////////////////
    1352 
    1353 proc spnormalize(ideal e,list #)
    1354 "USAGE:    spnormalize(a,w[,m]);
     1337proc spnf(ideal e,list #)
     1338"USAGE:   spnf(e[,m][,v|V]); ideal e, intvec m, module v, list V
    13551339RETURN:
    13561340@format
    1357 list Sp: normalized spectrum (a,m)
     1341list Sp: normalized spectrum (e,m[,V])
    13581342  ideal Sp[1]: numbers in a in increasing order
    13591343  intvec Sp[2]:
    1360     int Sp[2][i]: multiplicity of number Sp[1][i] in a
     1344    int Sp[2][i]: multiplicity of number Sp[1][i] in e
     1345  list Spp[3]:
     1346    module Spp[3][i]: module associated to number Spp[1][i]
    13611347@end format
    1362 EXAMPLE:  example spnormalize; shows examples
     1348EXAMPLE: example spnf; shows examples
    13631349"
    13641350{
     1351  int n=ncols(e);
    13651352  intvec m;
     1353  module v;
     1354  list V;
    13661355  int i,j;
    1367   if(size(#)==0)
    1368   {
    1369     for(i=ncols(e);i>=1;i--)
     1356  while(i<size(#))
     1357  {
     1358    i++;
     1359    if(typeof(#[i])=="intvec")
     1360    {
     1361      m=#[i];
     1362    }
     1363    if(typeof(#[i])=="module")
     1364    {
     1365      v=#[i];
     1366      for(j=n;j>=1;j--)
     1367      {
     1368        V[j]=module(v[j]);
     1369      }
     1370    }
     1371    if(typeof(#[i])=="list")
     1372    {
     1373      V=#[i];
     1374    }
     1375  }
     1376  if(m==0)
     1377  {
     1378    for(i=n;i>=1;i--)
    13701379    {
    13711380      m[i]=1;
    13721381    }
    13731382  }
    1374   else
    1375   {
    1376     m=#[1];
    1377   }
    1378 
    1379   list l;
    1380   number e0;
    1381   int m0;
    1382   for(i=ncols(e);i>=1;i--)
     1383
     1384  int k;
     1385  ideal e0;
     1386  intvec m0;
     1387  list V0;
     1388  number e1;
     1389  int m1;
     1390  for(i=n;i>=1;i--)
    13831391  {
    13841392    if(m[i]!=0)
     
    13901398          if(number(e[i])>number(e[j]))
    13911399          {
    1392             e0=number(e[i]);
     1400            e1=number(e[i]);
    13931401            e[i]=e[j];
    1394             e[j]=e0;
    1395             m0=m[i];
     1402            e[j]=e1;
     1403            m1=m[i];
    13961404            m[i]=m[j];
    1397             m[j]=m0;
     1405            m[j]=m1;
     1406            if(size(V)>0)
     1407            {
     1408              v=V[i];
     1409              V[i]=V[j];
     1410              V[j]=v;
     1411            }
    13981412          }
    13991413          if(number(e[i])==number(e[j]))
     
    14011415            m[i]=m[i]+m[j];
    14021416            m[j]=0;
     1417            if(size(V)>0)
     1418            {
     1419              V[i]=V[i]+V[j];
     1420            }
    14031421          }
    14041422        }
    14051423      }
    1406       l=spappend(l,number(e[i]),m[i]);
    1407     }
    1408   }
    1409 
     1424      k++;
     1425      e0[k]=e[i];
     1426      m0[k]=m[i];
     1427      if(size(V)>0)
     1428      {
     1429        V0[k]=V[i];
     1430      }
     1431    }
     1432  }
     1433
     1434  if(size(V0)>0)
     1435  {
     1436    n=size(V0);
     1437    module U=std(V0[n]);
     1438    for(i=n-1;i>=1;i--)
     1439    {
     1440      V0[i]=simplify(reduce(V0[i],U),1);
     1441      if(i>=2)
     1442      {
     1443        U=std(U+V0[i]);
     1444      }
     1445    }
     1446  }
     1447
     1448  list l;
     1449  if(k>0)
     1450  {
     1451    l=e0,m0;
     1452    if(size(V0)>0)
     1453    {
     1454      l[3]=V0;
     1455    }
     1456  }
    14101457  return(l);
    14111458}
     
    14251472    int l[2][i]: multiplicity of eigenvalue l[1][i]
    14261473@end format
    1427 EXAMPLE: example eigenval; shows examples
     1474EXAMPLE: example eigenvalues; shows examples
    14281475"
    14291476{
    14301477  M=jet(hessenberg(M),0);
    14311478  int n=ncols(M);
     1479  int k;
     1480  ideal e;
     1481  intvec m;
    14321482  number e0;
    14331483  intvec v;
    1434   list l,f;
    1435   int i,j,k;
     1484  list l;
     1485  int i,j;
    14361486  j=1;
    14371487  while(j<=n)
     
    14541504    if(size(v)==1)
    14551505    {
    1456       l=spappend(l,number(M[v,v]),1);
     1506      k++;
     1507      e[k]=M[v,v];
     1508      m[k]=1;
    14571509    }
    14581510    else
    14591511    {
    1460       f=factorize(det(submat(M,v,v)-var(1)));
    1461       for(i=size(f[1]);i>=1;i--)
     1512      l=factorize(det(submat(M,v,v)-var(1)));
     1513      for(i=size(l[1]);i>=1;i--)
    14621514      {
    1463         e0=number(jet(f[1][i]/var(1),0));
     1515        e0=number(jet(l[1][i]/var(1),0));
    14641516        if(e0!=0)
    14651517        {
    1466           l=spappend(l,number((e0*var(1)-f[1][i])/e0),f[2][i]);
     1518          k++;
     1519          e[k]=(e0*var(1)-l[1][i])/e0;
     1520          m[k]=l[2][i];
    14671521        }
    14681522      }
    14691523    }
    14701524  }
    1471   return(spnormalize(l[1],l[2]));
     1525  return(spnf(e,m));
    14721526}
    14731527example
     
    16001654  def e,m=#[1..2];
    16011655
    1602   int i;
    1603   for(i=1;i<=ncols(e);i++)
     1656  for(int i=1;i<=ncols(e);i++)
    16041657  {
    16051658    if(deg(e[i]>0))
     
    16101663  }
    16111664
    1612   int j,k,l;
     1665  int j,k,l,n;
    16131666  matrix N0,N1;
    16141667  module K0,K1;
     
    16181671  intvec w;
    16191672
    1620   for(i=ncols(e);i>=1;i--)
     1673  for(i=1;i<=ncols(e);i++)
    16211674  {
    16221675    N0=M-e[i]*freemodule(ncols(M));
     
    16481701        for(j=l;j>=1;j--)
    16491702        {
    1650           U=module(u)+U;
    1651           w=2*j-l-1,w;
     1703          U=U+module(u);
     1704          n++;
     1705          w[n]=2*j-l-1;
    16521706          u=N0*u;
    16531707        }
     
    16551709    }
    16561710  }
    1657   w=w[1..size(w)-1];
     1711
    16581712  return(list(U,w));
    16591713}
     
    16961750      for(i=s[k];i>=2;i--)
    16971751      {
    1698         J[j,j+1]=1;
     1752        J[j+1,j]=1;
    16991753        j++;
    17001754        J[j,j]=e[k];
Note: See TracChangeset for help on using the changeset viewer.