Changeset cb40b5 in git


Ignore:
Timestamp:
Mar 3, 2003, 6:33:30 PM (21 years ago)
Author:
Mathias Schulze <mschulze@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'fc741b6502fd8a97288eaa3eba6e5220f3c3df87')
Children:
2d3b6e645217a5863befcdae51a1295a92503fd0
Parents:
5be1b78743442ff24bf6fce5b9ca0512ab3481c1
Message:
*mschulze: evnf replaced by spnf


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

Legend:

Unmodified
Added
Removed
  • Singular/LIB/linalg.lib

    r5be1b7 rcb40b5  
    11//GMG last modified: 04/25/2000
    22//////////////////////////////////////////////////////////////////////////////
    3 version="$Id: linalg.lib,v 1.34 2003-02-19 15:56:54 Singular Exp $";
     3version="$Id: linalg.lib,v 1.35 2003-03-03 17:33:30 mschulze Exp $";
    44category="Linear Algebra";
    55info="
     
    2626 pos_def(A,i);        test symmetric matrix for positive definiteness
    2727 hessenberg(M);       Hessenberg form of M
    28  evnf(e[,m]);         eigenvalues normal form of (e[,m])
    2928 eigenvals(M);        eigenvalues with multiplicities of M
    3029 minipoly(M);         minimal polynomial of M
     30 spnf(sp);            normal form of spectrum sp
     31 spprint(sp);         print spectrum sp
    3132 jordan(M);           Jordan data of M
    3233 jordanbasis(M);      Jordan basis and weight filtration of M
    33  jordanmatrix(e,s,m); Jordan matrix with Jordan data (e,s,m)
     34 jordanmatrix(jd);    Jordan matrix with Jordan data jd
    3435 jordannf(M);         Jordan normal form of M
    3536";
     
    13021303  if(system("with","eigenval"))
    13031304  {
    1304    return(system("hessenberg",M));
     1305    return(system("hessenberg",M));
    13051306  }
    13061307
     
    13311332  print(M);
    13321333  print(hessenberg(M));
    1333 }
    1334 ///////////////////////////////////////////////////////////////////////////////
    1335 
    1336 proc evnf(ideal e,list #)
    1337 "USAGE:   evnf(e[,m]); ideal e, intvec m
    1338 ASSUME:  ncols(e)==size(m)
    1339 RETURN:  order eigenvalues e with multiplicities m
    1340 EXAMPLE: example evnf; shows examples
    1341 "
    1342 {
    1343   int n=ncols(e);
    1344   intvec m;
    1345   int i,j;
    1346   while(i<size(#))
    1347   {
    1348     i++;
    1349     if(typeof(#[i])=="intvec")
    1350     {
    1351       m=#[i];
    1352     }
    1353   }
    1354   if(m==0)
    1355   {
    1356     for(i=n;i>=1;i--)
    1357     {
    1358       m[i]=1;
    1359     }
    1360   }
    1361 
    1362   int k;
    1363   ideal e0;
    1364   intvec m0;
    1365   number e1;
    1366   int m1;
    1367   for(i=n;i>=1;i--)
    1368   {
    1369     if(m[i]!=0)
    1370     {
    1371       for(j=i-1;j>=1;j--)
    1372       {
    1373         if(m[j]!=0)
    1374         {
    1375           if(number(e[i])>number(e[j]))
    1376           {
    1377             e1=number(e[i]);
    1378             e[i]=e[j];
    1379             e[j]=e1;
    1380             m1=m[i];
    1381             m[i]=m[j];
    1382             m[j]=m1;
    1383           }
    1384           if(number(e[i])==number(e[j]))
    1385           {
    1386             m[i]=m[i]+m[j];
    1387             m[j]=0;
    1388           }
    1389         }
    1390       }
    1391       k++;
    1392       e0[k]=e[i];
    1393       m0[k]=m[i];
    1394     }
    1395   }
    1396 
    1397   list l;
    1398   if(k>0)
    1399   {
    1400     l=e0,m0;
    1401   }
    1402   return(l);
    1403 }
    1404 example
    1405 { "EXAMPLE:"; echo=2;
    14061334}
    14071335///////////////////////////////////////////////////////////////////////////////
     
    14231351  if(system("with","eigenval"))
    14241352  {
    1425    return(system("eigenvals",jet(M,0)));
     1353    return(system("eigenvals",jet(M,0)));
    14261354  }
    14271355
     
    14741402    }
    14751403  }
    1476   return(evnf(e,m));
     1404  return(spnf(list(e,m)));
    14771405}
    14781406example
     
    15381466  print(M);
    15391467  minipoly(M);
     1468}
     1469///////////////////////////////////////////////////////////////////////////////
     1470
     1471proc spnf(list sp)
     1472"USAGE:   spnf(list(a[,m])); ideal a, intvec m
     1473ASSUME:  ncols(a)==size(m)
     1474RETURN:  order a[i] with multiplicity m[i] lexicographically
     1475EXAMPLE: example spnf; shows examples
     1476"
     1477{
     1478  ideal a=sp[1];
     1479  int n=ncols(a);
     1480  intvec m;
     1481  list V;
     1482  module v;
     1483  int i,j;
     1484  for(i=2;i<=size(sp);i++)
     1485  {
     1486    if(typeof(sp[i])=="intvec")
     1487    {
     1488      m=sp[i];
     1489    }
     1490    if(typeof(sp[i])=="module")
     1491    {
     1492      v=sp[i];
     1493      for(j=n;j>=1;j--)
     1494      {
     1495        V[j]=module(v[j]);
     1496      }
     1497    }
     1498    if(typeof(sp[i])=="list")
     1499    {
     1500      V=sp[i];
     1501    }
     1502  }
     1503  if(m==0)
     1504  {
     1505    for(i=n;i>=1;i--)
     1506    {
     1507      m[i]=1;
     1508    }
     1509  }
     1510
     1511  int k;
     1512  ideal a0;
     1513  intvec m0;
     1514  list V0;
     1515  number a1;
     1516  int m1;
     1517  for(i=n;i>=1;i--)
     1518  {
     1519    if(m[i]!=0)
     1520    {
     1521      for(j=i-1;j>=1;j--)
     1522      {
     1523        if(m[j]!=0)
     1524        {
     1525          if(number(a[i])>number(a[j]))
     1526          {
     1527            a1=number(a[i]);
     1528            a[i]=a[j];
     1529            a[j]=a1;
     1530            m1=m[i];
     1531            m[i]=m[j];
     1532            m[j]=m1;
     1533            if(size(V)>0)
     1534            {
     1535              v=V[i];
     1536              V[i]=V[j];
     1537              V[j]=v;
     1538            }
     1539          }
     1540          if(number(a[i])==number(a[j]))
     1541          {
     1542            m[i]=m[i]+m[j];
     1543            m[j]=0;
     1544            if(size(V)>0)
     1545            {
     1546              V[i]=V[i]+V[j];
     1547            }
     1548          }
     1549        }
     1550      }
     1551      k++;
     1552      a0[k]=a[i];
     1553      m0[k]=m[i];
     1554      if(size(V)>0)
     1555      {
     1556        V0[k]=V[i];
     1557      }
     1558    }
     1559  }
     1560
     1561  if(size(V0)>0)
     1562  {
     1563    n=size(V0);
     1564    module U=std(V0[n]);
     1565    for(i=n-1;i>=1;i--)
     1566    {
     1567      V0[i]=simplify(reduce(V0[i],U),1);
     1568      if(i>=2)
     1569      {
     1570        U=std(U+V0[i]);
     1571      }
     1572    }
     1573  }
     1574
     1575  if(k>0)
     1576  {
     1577    sp=a0,m0;
     1578    if(size(V0)>0)
     1579    {
     1580      sp[3]=V0;
     1581    }
     1582  }
     1583  return(sp);
     1584}
     1585example
     1586{ "EXAMPLE:"; echo=2;
     1587  ring R=0,(x,y),ds;
     1588  list sp=list(ideal(-1/2,-3/10,-3/10,-1/10,-1/10,0,1/10,1/10,3/10,3/10,1/2));
     1589  spprint(spnf(sp));
     1590}
     1591///////////////////////////////////////////////////////////////////////////////
     1592
     1593proc spprint(list sp)
     1594"USAGE:   spprint(sp); list sp
     1595RETURN:  string s;  spectrum sp
     1596EXAMPLE: example spprint; shows examples
     1597"
     1598{
     1599  string s;
     1600  for(int i=1;i<size(sp[2]);i++)
     1601  {
     1602    s=s+"("+string(sp[1][i])+","+string(sp[2][i])+"),";
     1603  }
     1604  s=s+"("+string(sp[1][i])+","+string(sp[2][i])+")";
     1605  return(s);
     1606}
     1607example
     1608{ "EXAMPLE:"; echo=2;
     1609  ring R=0,(x,y),ds;
     1610  list sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
     1611  spprint(sp);
    15401612}
    15411613///////////////////////////////////////////////////////////////////////////////
     
    17361808///////////////////////////////////////////////////////////////////////////////
    17371809
    1738 proc jordanmatrix(ideal e,intvec s,intvec m)
    1739 "USAGE:   jordanmatrix(e,s,m); ideal e, intvec s, intvec m
     1810proc jordanmatrix(list jd)
     1811"USAGE:   jordanmatrix(list(e,s,m)); ideal e, intvec s, intvec m
    17401812ASSUME:  ncols(e)==size(s)==size(m)
    17411813RETURN:
     
    17461818"
    17471819{
     1820  ideal e=jd[1];
     1821  intvec s=jd[2];
     1822  intvec m=jd[3];
    17481823  if(ncols(e)!=size(s)||ncols(e)!=size(m))
    17491824  {
     
    17771852  intvec s=1,2;
    17781853  intvec m=1,1;
    1779   print(jordanmatrix(e,s,m));
     1854  print(jordanmatrix(list(e,s,m)));
    17801855}
    17811856///////////////////////////////////////////////////////////////////////////////
     
    17881863"
    17891864{
    1790   list l=jordan(M,#);
    1791   return(jordanmatrix(l[1],l[2],l[3]));
     1865  return(jordanmatrix(jordan(M,#)));
    17921866}
    17931867example
Note: See TracChangeset for help on using the changeset viewer.