123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- % Miscellaneous matrix tests.
- % Tests of eigenfunction/eigenvalue code.
- v := mat((1,1,-1,1,0),(1,2,-1,0,1),(-1,2,3,-1,0),
- (1,-2,1,2,-1),(2,1,-1,3,0))$
- mateigen(v,et);
- eigv := third first ws$
- % Now check if the equation for the eigenvectors is fulfilled. Note
- % that also the last component is zero due to the eigenvalue equation.
- v*eigv-et*eigv;
- % Example of degenerate eigenvalues.
- u := mat((2,-1,1),(0,1,1),(-1,1,1))$
- mateigen(u,eta);
- % Example of a fourfold degenerate eigenvalue with two corresponding
- % eigenvectors.
- w := mat((1,-1,1,-1),(-3,3,-5,4),(8,-4,3,-4),
- (15,-10,11,-11))$
- mateigen(w,al);
- eigw := third first ws;
- w*eigw - al*eigw;
- % Calculate the eigenvectors and eigenvalue equation.
- f := mat((0,ex,ey,ez),(-ex,0,bz,-by),(-ey,-bz,0,bx),
- (-ez,by,-bx,0))$
- factor om;
- mateigen(f,om);
- % Specialize to perpendicular electric and magnetic field.
- let ez=0,ex=0,by=0;
- % Note that we find two eigenvectors to the double eigenvalue 0
- % (as it must be).
- mateigen(f,om);
- % The following has 1 as a double eigenvalue. The corresponding
- % eigenvector must involve two arbitrary constants.
- j := mat((9/8,1/4,-sqrt(3)/8),
- (1/4,3/2,-sqrt(3)/4),
- (-sqrt(3)/8,-sqrt(3)/4,11/8));
- mateigen(j,x);
- % The following is a good consistency check.
- sym := mat(
- (0, 1/2, 1/(2*sqrt(2)), 0, 0),
- (1/2, 0, 1/(2*sqrt(2)), 0, 0),
- (1/(2*sqrt(2)), 1/(2*sqrt(2)), 0, 1/2, 1/2),
- (0, 0, 1/2, 0, 0),
- (0, 0, 1/2, 0, 0))$
- ans := mateigen(sym,eta);
- % Check of correctness for this example.
- for each j in ans do
- for each k in solve(first j,eta) do
- write sub(k,sym*third j - eta*third j);
- % Tests of nullspace operator.
- a1 := mat((1,2,3,4),(5,6,7,8));
- nullspace a1;
-
- b1 := {{1,2,3,4},{5,6,7,8}};
- nullspace b1;
- % Example taken from a bug report for another CA system.
- c1 :=
- {{(p1**2*(p1**2 + p2**2 + p3**2 - s*z - z**2))/(p1**2 + p3**2), 0,
- (p1*p3*(p1**2 + p2**2 + p3**2 - s*z - z**2))/(p1**2 + p3**2),
- -((p1**2*p2*(s + z))/(p1**2 + p3**2)), p1*(s + z),
- -((p1*p2*p3*(s + z))/(p1**2 + p3**2)),
- -((p1*p3*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)), 0,
- (p1**2*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {(p1*p3*(p1**2 + p2**2 + p3**2 - s*z - z**2))/(p1**2 + p3**2), 0,
- (p3**2*(p1**2 + p2**2 + p3**2 - s*z - z**2))/(p1**2 + p3**2),
- -((p1*p2*p3*(s + z))/(p1**2 + p3**2)), p3*(s + z),
- -((p2*p3**2*(s + z))/(p1**2 + p3**2)),
- -((p3**2*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)), 0,
- (p1*p3*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)},
- {-((p1**2*p2*(s + z))/(p1**2 + p3**2)), 0,
- -((p1*p2*p3*(s + z))/(p1**2 + p3**2)),
- -((p1**2*p2**2*(s + 2*z))/((p1**2 + p3**2)*z)), (p1*p2*(s + 2*z))/z,
- -((p1*p2**2*p3*(s + 2*z))/((p1**2 + p3**2)*z)),
- -((p1*p2*p3*z)/(p1**2 + p3**2)), 0, (p1**2*p2*z)/(p1**2 + p3**2)},
- {p1*(s + z), 0, p3*(s + z), (p1*p2*(s + 2*z))/z,
- -(((p1**2+p3**2)*(s+ 2*z))/z), (p2*p3*(s + 2*z))/z, p3*z,0, -(p1*z)},
- {-((p1*p2*p3*(s + z))/(p1**2 + p3**2)), 0,
- -((p2*p3**2*(s + z))/(p1**2 + p3**2)),
- -((p1*p2**2*p3*(s + 2*z))/((p1**2 + p3**2)*z)), (p2*p3*(s + 2*z))/z,
- -((p2**2*p3**2*(s + 2*z))/((p1**2 + p3**2)*z)),
- -((p2*p3**2*z)/(p1**2 + p3**2)), 0, (p1*p2*p3*z)/(p1**2 + p3**2)},
- {-((p1*p3*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)), 0,
- -((p3**2*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)),
- -((p1*p2*p3*z)/(p1**2 + p3**2)),p3*z,-((p2*p3**2*z)/(p1**2 + p3**2)),
- -((p3**2*(p1**2 + p2**2 + p3**2)*z)/((p1**2 + p3**2)*(s + z))), 0,
- (p1*p3*(p1**2 + p2**2 + p3**2)*z)/((p1**2 + p3**2)*(s + z))},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {(p1**2*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2), 0,
- (p1*p3*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2),
- (p1**2*p2*z)/(p1**2 + p3**2), -(p1*z), (p1*p2*p3*z)/(p1**2 + p3**2),
- (p1*p3*(p1**2 + p2**2 + p3**2)*z)/((p1**2 + p3**2)*(s + z)), 0,
- -((p1**2*(p1**2 + p2**2 + p3**2)*z)/((p1**2 + p3**2)*(s + z)))}};
- nullspace c1;
-
- d1 := mat
- (((p1**2*(p1**2 + p2**2 + p3**2 - s*z - z**2))/(p1**2 + p3**2), 0,
- (p1*p3*(p1**2 + p2**2 + p3**2 - s*z - z**2))/(p1**2 + p3**2),
- -((p1**2*p2*(s + z))/(p1**2 + p3**2)), p1*(s + z),
- -((p1*p2*p3*(s + z))/(p1**2 + p3**2)),
- -((p1*p3*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)), 0,
- (p1**2*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)),
- (0, 0, 0, 0, 0, 0, 0, 0, 0),
- ((p1*p3*(p1**2 + p2**2 + p3**2 - s*z - z**2))/(p1**2 + p3**2), 0,
- (p3**2*(p1**2 + p2**2 + p3**2 - s*z - z**2))/(p1**2 + p3**2),
- -((p1*p2*p3*(s + z))/(p1**2 + p3**2)), p3*(s + z),
- -((p2*p3**2*(s + z))/(p1**2 + p3**2)),
- -((p3**2*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)), 0,
- (p1*p3*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)),
- ( ((p1**2*p2*(s + z))/(p1**2 + p3**2)), 0,
- -((p1*p2*p3*(s + z))/(p1**2 + p3**2)),
- -((p1**2*p2**2*(s + 2*z))/((p1**2 + p3**2)*z)), (p1*p2*(s + 2*z))/z,
- -((p1*p2**2*p3*(s + 2*z))/((p1**2 + p3**2)*z)),
- -((p1*p2*p3*z)/(p1**2 + p3**2)), 0, (p1**2*p2*z)/(p1**2 + p3**2)),
- (p1*(s + z), 0, p3*(s + z), (p1*p2*(s + 2*z))/z,
- -(((p1**2 + p3**2)*(s + 2*z))/z),(p2*p3*(s + 2*z))/z,p3*z,0,-(p1*z)),
- (-((p1*p2*p3*(s + z))/(p1**2 + p3**2)), 0,
- -((p2*p3**2*(s + z))/(p1**2 + p3**2)),
- -((p1*p2**2*p3*(s + 2*z))/((p1**2 + p3**2)*z)), (p2*p3*(s + 2*z))/z,
- -((p2**2*p3**2*(s + 2*z))/((p1**2 + p3**2)*z)),
- -((p2*p3**2*z)/(p1**2 + p3**2)), 0, (p1*p2*p3*z)/(p1**2 + p3**2)),
- (-((p1*p3*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)), 0,
- -((p3**2*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2)),
- -((p1*p2*p3*z)/(p1**2 + p3**2)),p3*z,-((p2*p3**2*z)/(p1**2 + p3**2)),
- -((p3**2*(p1**2 + p2**2 + p3**2)*z)/((p1**2 + p3**2)*(s + z))), 0,
- (p1*p3*(p1**2 + p2**2 + p3**2)*z)/((p1**2 + p3**2)*(s + z))),
- (0, 0, 0, 0, 0, 0, 0, 0, 0),
- ((p1**2*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2), 0,
- (p1*p3*(p1**2 + p2**2 + p3**2))/(p1**2 + p3**2),
- (p1**2*p2*z)/(p1**2 + p3**2), -(p1*z), (p1*p2*p3*z)/(p1**2 + p3**2),
- (p1*p3*(p1**2 + p2**2 + p3**2)*z)/((p1**2 + p3**2)*(s + z)), 0,
- -((p1**2*(p1**2 + p2**2 + p3**2)*z)/((p1**2 + p3**2)*(s + z)))));
- nullspace d1;
- % The following example, by Kenton Yee, was discussed extensively by
- % the sci.math.symbolic newsgroup.
- m := mat((e^(-1), e^(-1), e^(-1), e^(-1), e^(-1), e^(-1), e^(-1), 0),
- (1, 1, 1, 1, 1, 1, 0, 1),(1, 1, 1, 1, 1, 0, 1, 1),
- (1, 1, 1, 1, 0, 1, 1, 1),(1, 1, 1, 0, 1, 1, 1, 1),
- (1, 1, 0, 1, 1, 1, 1, 1),(1, 0, 1, 1, 1, 1, 1, 1),
- (0, e, e, e, e, e, e, e));
- eig := mateigen(m,x);
- % Now check the eigenvectors and calculate the eigenvalues in the
- % respective eigenspaces:
- factor expt;
- for each eispace in eig do
- begin scalar eivaleq,eival,eivec;
- eival := solve(first eispace,x);
- for each soln in eival do
- <<eival := rhs soln;
- eivec := third eispace;
- eivec := sub(soln,eivec);
- write "eigenvalue = ", eival;
- write "check of eigen equation: ",
- m*eivec - eival*eivec>>
- end;
- % For the special choice:
- let e = -7 + sqrt 48;
- % we get only 7 eigenvectors.
- eig := mateigen(m,x);
- for each eispace in eig do
- begin scalar eivaleq,eival,eivec;
- eival := solve(first eispace,x);
- for each soln in eival do
- <<eival := rhs soln;
- eivec := third eispace;
- eivec := sub(soln,eivec);
- write "eigenvalue = ", eival;
- write "check of eigen equation: ",
- m*eivec - eival*eivec>>
- end;
- % The same behaviour for this choice of e.
- clear e; let e = -7 - sqrt 48;
- % we get only 7 eigenvectors.
- eig := mateigen(m,x);
- for each eispace in eig do
- begin scalar eivaleq,eival,eivec;
- eival := solve(first eispace,x);
- for each soln in eival do
- <<eival := rhs soln;
- eivec := third eispace;
- eivec := sub(soln,eivec);
- write "eigenvalue = ", eival;
- write "check of eigen equation: ",
- m*eivec - eival*eivec>>
- end;
- % For this choice of values
- clear e; let e = 1;
- % the eigenvalue 1 becomes 4-fold degenerate. However, we get a complete
- % span of 8 eigenvectors.
- eig := mateigen(m,x);
- for each eispace in eig do
- begin scalar eivaleq,eival,eivec;
- eival := solve(first eispace,x);
- for each soln in eival do
- <<eival := rhs soln;
- eivec := third eispace;
- eivec := sub(soln,eivec);
- write "eigenvalue = ", eival;
- write "check of eigen equation: ",
- m*eivec - eival*eivec>>
- end;
- ma := mat((1,a),(0,b));
- % case 1:
- let a = 0;
- mateigen(ma,x);
- % case 2:
- clear a; let a = 0, b = 1;
- mateigen(ma,x);
- % case 3:
- clear a,b;
- mateigen(ma,x);
- % case 4:
- let b = 1;
- mateigen(ma,x);
- % Example from H.G. Graebe:
- m1:=mat((-sqrt(3)+1,2 ,3 ),
- (2 ,-sqrt(3)+3,1 ),
- (3 ,1 ,-sqrt(3)+2));
- nullspace m1;
- for each n in ws collect m1*n;
- end;
|