Changeset cb40b5 in git
- Timestamp:
- Mar 3, 2003, 6:33:30 PM (21 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'fc741b6502fd8a97288eaa3eba6e5220f3c3df87')
- Children:
- 2d3b6e645217a5863befcdae51a1295a92503fd0
- Parents:
- 5be1b78743442ff24bf6fce5b9ca0512ab3481c1
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/linalg.lib
r5be1b7 rcb40b5 1 1 //GMG last modified: 04/25/2000 2 2 ////////////////////////////////////////////////////////////////////////////// 3 version="$Id: linalg.lib,v 1.3 4 2003-02-19 15:56:54 SingularExp $";3 version="$Id: linalg.lib,v 1.35 2003-03-03 17:33:30 mschulze Exp $"; 4 4 category="Linear Algebra"; 5 5 info=" … … 26 26 pos_def(A,i); test symmetric matrix for positive definiteness 27 27 hessenberg(M); Hessenberg form of M 28 evnf(e[,m]); eigenvalues normal form of (e[,m])29 28 eigenvals(M); eigenvalues with multiplicities of M 30 29 minipoly(M); minimal polynomial of M 30 spnf(sp); normal form of spectrum sp 31 spprint(sp); print spectrum sp 31 32 jordan(M); Jordan data of M 32 33 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 34 35 jordannf(M); Jordan normal form of M 35 36 "; … … 1302 1303 if(system("with","eigenval")) 1303 1304 { 1304 return(system("hessenberg",M));1305 return(system("hessenberg",M)); 1305 1306 } 1306 1307 … … 1331 1332 print(M); 1332 1333 print(hessenberg(M)); 1333 }1334 ///////////////////////////////////////////////////////////////////////////////1335 1336 proc evnf(ideal e,list #)1337 "USAGE: evnf(e[,m]); ideal e, intvec m1338 ASSUME: ncols(e)==size(m)1339 RETURN: order eigenvalues e with multiplicities m1340 EXAMPLE: example evnf; shows examples1341 "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 example1405 { "EXAMPLE:"; echo=2;1406 1334 } 1407 1335 /////////////////////////////////////////////////////////////////////////////// … … 1423 1351 if(system("with","eigenval")) 1424 1352 { 1425 return(system("eigenvals",jet(M,0)));1353 return(system("eigenvals",jet(M,0))); 1426 1354 } 1427 1355 … … 1474 1402 } 1475 1403 } 1476 return( evnf(e,m));1404 return(spnf(list(e,m))); 1477 1405 } 1478 1406 example … … 1538 1466 print(M); 1539 1467 minipoly(M); 1468 } 1469 /////////////////////////////////////////////////////////////////////////////// 1470 1471 proc spnf(list sp) 1472 "USAGE: spnf(list(a[,m])); ideal a, intvec m 1473 ASSUME: ncols(a)==size(m) 1474 RETURN: order a[i] with multiplicity m[i] lexicographically 1475 EXAMPLE: 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 } 1585 example 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 1593 proc spprint(list sp) 1594 "USAGE: spprint(sp); list sp 1595 RETURN: string s; spectrum sp 1596 EXAMPLE: 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 } 1607 example 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); 1540 1612 } 1541 1613 /////////////////////////////////////////////////////////////////////////////// … … 1736 1808 /////////////////////////////////////////////////////////////////////////////// 1737 1809 1738 proc jordanmatrix( ideal e,intvec s,intvec m)1739 "USAGE: jordanmatrix( e,s,m); ideal e, intvec s, intvec m1810 proc jordanmatrix(list jd) 1811 "USAGE: jordanmatrix(list(e,s,m)); ideal e, intvec s, intvec m 1740 1812 ASSUME: ncols(e)==size(s)==size(m) 1741 1813 RETURN: … … 1746 1818 " 1747 1819 { 1820 ideal e=jd[1]; 1821 intvec s=jd[2]; 1822 intvec m=jd[3]; 1748 1823 if(ncols(e)!=size(s)||ncols(e)!=size(m)) 1749 1824 { … … 1777 1852 intvec s=1,2; 1778 1853 intvec m=1,1; 1779 print(jordanmatrix( e,s,m));1854 print(jordanmatrix(list(e,s,m))); 1780 1855 } 1781 1856 /////////////////////////////////////////////////////////////////////////////// … … 1788 1863 " 1789 1864 { 1790 list l=jordan(M,#); 1791 return(jordanmatrix(l[1],l[2],l[3])); 1865 return(jordanmatrix(jordan(M,#))); 1792 1866 } 1793 1867 example
Note: See TracChangeset
for help on using the changeset viewer.