Artifact 415e07e885c23d812f768f4cbfa12229aacef6a658051a55b2dddb7997d517f7:
- File
r36/xlog/ASSIST.LOG
— part of check-in
[152fb3bdbb]
at
2011-10-17 17:58:33
on branch master
— svn:eol-style, svn:executable and line endings for files
in historical/r36 treegit-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1480 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: schoepf@users.sourceforge.net, size: 20017) [annotate] [blame] [check-ins using] [more...]
REDUCE 3.6, 15-Jul-95, patched to 6 Mar 96 ... % Tests of Assist Package version 2.1. % DATE : 25 December 1993 % Author: H. Caprasse <caprasse@vm1.ulg.ac.be> %load_package assist$ Comment 2. HELP for ASSIST:; ; helpassist(assist); Arguments must be integers from 3 to 15 They correspond to the section numbers in the documentation: 3 for switches 4 for lists 5 for bags 6 for sets 7 for utilities 8 for properties 9 for control functions 10 for polynomes 11 for trigonometric or hyperbolic functions 12 for arrays 13 for vectors 14 for grassmann variables 15 for matrices ; helpassist(6); {union,setp,mkset,setdiff,symdiff} ; Comment 3. CONTROL OF SWITCHES:; ; switches; **** exp:=t .................... allfac:= t **** **** ezgcd:=nil ................. gcd:= nil **** **** mcd:=t ....................... lcm:= t **** **** div:=nil ................... rat:= nil **** **** intstr:=nil ........... rational:= nil **** **** precise:=t ........... reduced:= nil **** **** complex:=nil ....... rationalize:= nil **** **** factor:= nil ....... combineexpt:= nil **** **** complex:= nil ....... distribute:= nil **** off exp; on gcd; switches; **** exp:=nil .................... allfac:= t **** **** ezgcd:=nil ................. gcd:= t **** **** mcd:=t ....................... lcm:= t **** **** div:=nil ................... rat:= nil **** **** intstr:=nil ........... rational:= nil **** **** precise:=t ........... reduced:= nil **** **** complex:=nil ....... rationalize:= nil **** **** factor:= nil ....... combineexpt:= nil **** **** complex:= nil ....... distribute:= nil **** switchorg; switches; **** exp:=t .................... allfac:= t **** **** ezgcd:=nil ................. gcd:= nil **** **** mcd:=t ....................... lcm:= t **** **** div:=nil ................... rat:= nil **** **** intstr:=nil ........... rational:= nil **** **** precise:=nil ........... reduced:= nil **** **** complex:=nil ....... rationalize:= nil **** **** factor:= nil ....... combineexpt:= nil **** **** complex:= nil ....... distribute:= nil **** ; if !*mcd then "the switch mcd is on"; the switch mcd is on if !*gcd then "the switch gcd is on"; ; Comment 4. MANIPULATION OF THE LIST STRUCTURE:; ; t1:=mklist(4); t1 := {0,0,0,0} Comment MKLIST does NEVER destroy anything ; mklist(t1,3); {0,0,0,0} mklist(t1,10); {0,0,0,0,0,0,0,0,0,0} ; % Generation of n duplicates of list : algnlist({a,x^2,1},3); 2 {{a,x ,1}, 2 {a,x ,1}, 2 {a,x ,1}} ; sequences 3; {{0,0,0}, {1,0,0}, {0,1,0}, {1,1,0}, {0,0,1}, {1,0,1}, {0,1,1}, {1,1,1}} lisp; nil sequences 3; ((0 0 0) (1 0 0) (0 1 0) (1 1 0) (0 0 1) (1 0 1) (0 1 1) (1 1 1)) algebraic; ; frequency append(t1,t1); {{0,8}} elmult(a1,t1); 0 insert(a1,t1,2); {0,a1,0,0,0} li:=list(1,2,5); li := {1,2,5} insert_keep_order(4,li,lessp); {1,2,4,5} merge_list(li,li,lessp); {1,1,2,2,5,5} for i:=1:4 do t1:= (t1.i:=mkid(a,i)); % for i:=1:2 do t1:=(t1.i:=mkid(a,i)); t1.1; a1 t1:=(t1.1) . t1; t1 := {a1,a1,a2,a3,a4} position(a2,t1); 3 pair(t1,t1); {{a1,a1},{a1,a1},{a2,a2},{a3,a3},{a4,a4}} depth list t1; 2 depth a1; 0 appendn(li,li,li); {1,2,5,1,2,5,1,2,5} ; comment 5. THE BAG STRUCTURE AND ITS ASSOCIATED FUNCTIONS ; aa:=bag(x,1,"A"); aa := bag(x,1,A) putbag bg1,bg2; t on errcont; putbag list; ***** list invalid as BAG off errcont; aa:=bg1(x,y**2); 2 aa := bg1(x,y ) ; if bagp aa then "this is a bag"; this is a bag ; clearbag bg2; ; depth bg2(x); 0 ; if baglistp aa then "this is a bag or list"; this is a bag or list if baglistp list(x) then "this is a bag or list"; this is a bag or list ; ab:=bag(x1,x2,x3); ab := bag(x1,x2,x3) al:=list(y1,y2,y3); al := {y1,y2,y3} first ab; bag(x1) third ab; bag(x3) first al; y1 last ab; bag(x3) last al; y3 belast ab; bag(x1,x2) belast al; {y1,y2} rest ab; bag(x2,x3) rest al; {y2,y3} depth al; 1 depth bg1(ab); 2 ; ab.1; x1 al.3; y3 on errcont; ab.4; ***** Expression bag(x1,x2,x3) does not have part 4 off errcont; kernlist(aa); 2 {x,y } listbag(list x,bg1); bg1(x) size ab; 3 length al; 3 remove(ab,3); bag(x1,x2) delete(y2,al); {y1,y3} reverse al; {y3,y2,y1} member(x3,ab); bag(x3) al:=list(x**2,x**2,y1,y2,y3); 2 al := {x , 2 x , y1, y2, y3} ; elmult(x**2,al); 2 position(y3,al); 5 ; repfirst(xx,al); 2 {xx,x ,y1,y2,y3} represt(xx,ab); bag(x1,xx) insert(x,al,3); 2 2 {x ,x ,x,y1,y2,y3} insert( b,ab,2); bag(x1,b,xx) insert(ab,ab,1); bag(bag(x1,xx),x1,xx) substitute (new,y1,al); 2 2 {x ,x ,new,y2,y3} ; appendn(ab,ab,ab); {x1,xx,x1,xx,x1,xx} append(ab,al); 2 2 bag(x1,xx,x ,x ,y1,y2,y3) append(al,ab); 2 2 {x ,x ,y1,y2,y3,x1,xx} ; comment Association list or bag may be constructed and thoroughly used; ; l:=list(a1,a2,a3,a4); l := {a1,a2,a3,a4} b:=bg1(x1,x2,x3); b := bg1(x1,x2,x3) al:=pair(list(1,2,3,4),l); al := {{1,a1},{2,a2},{3,a3},{4,a4}} ab:=pair(bg1(1,2,3),b); ab := bg1(bg1(1,x1),bg1(2,x2),bg1(3,x3)) ; comment : A BOOLEAN function abaglistp to test if it is an association; ; if abaglistp bag(bag(1,2)) then "it is an associated bag"; it is an associated bag ; % Values associated to the keys can be extracted % first occurence ONLY. ; asfirst(1,al); {1,a1} asfirst(3,ab); bg1(3,x3) ; assecond(a1,al); {1,a1} assecond(x3,ab); bg1(3,x3) ; aslast(z,list(list(x1,x2,x3),list(y1,y2,z))); {y1,y2,z} asrest(list(x2,x3),list(list(x1,x2,x3),list(y1,y2,z))); {x1,x2,x3} ; clear a1; ; % All occurences. asflist(x,bg1(bg1(x,a1,a2),bg1(x,b1,b2))); bg1(bg1(x,a1,a2),bg1(x,b1,b2)) asslist(a1,list(list(x,a1),list(y,a1),list(x,y))); {{x,a1},{y,a1}} restaslist(bag(a1,x),bg1(bag(x,a1,a2),bag(a1,x,b2),bag(x,y,z))); bg1(bg1(x,b2),bg1(a1,a2)) restaslist(list(a1,x),bag(bag(x,a1,a2),bag(a1,x,b2),bag(x,y,z))); bag(bag(x,b2),bag(a1,a2)) ; Comment 6. SETS AND THEIR MANIPULATION FUNCTIONS ; ts:=mkset list(a1,a1,a,2,2); ts := {a1,a,2} if setp ts then "this is a SET"; this is a SET ; union(ts,ts); {a1,a,2} diffset(ts,list(a1,a)); {2} diffset(list(a1,a),ts); {} symdiff(ts,ts); {} intersect(listbag(ts,set1),listbag(ts,set2)); set1(a1,a,2) Comment 7. GENERAL PURPOSE UTILITY FUNCTIONS :; ; clear a1,a2,a3,a,x,y,z,x1,x2,op$ ; % DETECTION OF A GIVEN VARIABLE IN A GIVEN SET ; mkidnew(); G0 mkidnew(a); aG1 dellastdigit 23; 2 detidnum aa; detidnum a10; 10 detidnum a1b2z34; 34 list_to_ids list(a,1,rr,22); a1rr22 ; if oddp 3 then "this is an odd integer"; this is an odd integer ; <<prin2 1; followline 7; prin2 8;>>; 1 8 ; operator foo; foo(x):=x; foo(x) := x foo(x)==value; value x:=x; x := value ; clear x; ; randomlist(10,20); {8,1,8,0,5,7,3,8,0,5,5,9,0,5,2,0,7,5,5,1} % Generation of tables of random numbers: % One dimensional: mkrandtabl({4},10,ar); {4} ; % Two dimensional: mkrandtabl({3,4},10,ar); *** array ar redefined {3,4} ; % With a base which is a decimal number: on rounded; mkrandtabl({5},3.5,ar); *** array ar redefined {5} off rounded; ; combnum(8,3); 56 permutations(bag(a1,a2,a3)); bag(bag(a1,a2,a3),bag(a1,a3,a2),bag(a2,a1,a3),bag(a2,a3,a1),bag(a3,a1,a2), bag(a3,a2,a1)) permutations {1,2,3}; {{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}} cyclicpermlist{1,2,3}; {{1,2,3},{2,3,1},{3,1,2}} combinations({1,2,3},2); {{2,3},{1,3},{1,2}} labc:={a,b,c}; labc := {a,bg1(x1,x2,x3),c} symmetrize(labc,foo,cyclicpermlist); foo(bg1(x1,x2,x3),c,a) + foo(a,bg1(x1,x2,x3),c) + foo(c,a,bg1(x1,x2,x3)) symmetrize(labc,list,permutations); {bg1(x1,x2,x3),a,c} + {bg1(x1,x2,x3),c,a} + {a,bg1(x1,x2,x3),c} + {a,c,bg1(x1,x2,x3)} + {c,bg1(x1,x2,x3),a} + {c,a,bg1(x1,x2,x3)} symmetrize({labc},foo,cyclicpermlist); foo({bg1(x1,x2,x3),c,a}) + foo({a,bg1(x1,x2,x3),c}) + foo({c,a,bg1(x1,x2,x3)}) extremum({1,2,3},lessp); 1 extremum({1,2,3},geq); 3 extremum({a,b,c},ordp); bg1(x1,x2,x3) ; funcvar(x+y); {x,y} funcvar(sin log(x+y)); {x,y} funcvar(sin pi); funcvar(x+e+i); {x} ; depatom a; a depend a,x,y; depatom a; {x,y} depend op,x,y,z; implicit op; op explicit op; op(x,y,z) depend y,zz; explicit op; op(x,y(zz),z) aa:=implicit op; aa := op clear op; ; korder x,z,y; korderlist; (x z y) ; if checkproplist({1,2,3},fixp) then "it is a list of integers"; it is a list of integers ; if checkproplist({a,b1,c},idp) then "it is a list of identifiers"; it is a list of identifiers ; if checkproplist({1,b1,c},idp) then "it is a list of identifiers"; ; lmix:={1,1/2,a,"st"}; 1 lmix := {1,---,a,st} 2 ; extractlist(lmix,fixp); {1} extractlist(lmix,numberp); 1 {1,---} 2 extractlist(lmix,idp); {a} extractlist(lmix,stringp); {st} ; comment 8. PROPERTIES AND FLAGS:; ; putflag(list(a1,a2),fl1,t); t putflag(list(a1,a2),fl2,t); t displayflag a1; {fl1,fl2} ; clearflag a1,a2; displayflag a2; {} putprop(x1,propname,value,t); x1 displayprop(x1,prop); {} displayprop(x1,propname); {propname,value} ; putprop(x1,propname,value,0); displayprop(x1,propname); {} ; Comment 9. CONTROL FUNCTIONS:; ; alatomp z; t z:=s1; z := s1 alatomp z; t ; alkernp z; t alkernp log sin r; t ; precp(difference,plus); t precp(plus,difference); precp(times,.); precp(.,times); t ; if stringp x then "this is a string"; if stringp "this is a string" then "this is a string"; this is a string ; if nordp(b,a) then "a is ordered before b"; operator op; for all x,y such that nordp(x,y) let op(x,y)=x+y; op(a,a); op(a,a) op(b,a); op(bg1(x1,x2,x3),a) op(a,b); bg1(x1,x2,x3) + a clear op; ; depvarp(log(sin(x+cos(1/acos rr))),rr); t ; operator op; symmetric op; op(x,y)-op(y,x); 0 remsym op; op(x,y)-op(y,x); op(x,y) - op(y,x) ; clear y,x,u,v; clear op; ; % DISPLAY and CLEARING of user's objects of various types entered % to the console. Only TOP LEVEL assignments are considered up to now. % The following statements must be made INTERACTIVELY. We put them % as COMMENTS for the user to experiment with them. We do this because % in a fresh environment all outputs are nil. ; % THIS PART OF THE TEST SHOULD BE REALIZED INTERACTIVELY. % SEE THE ** ASSIST LOG ** FILE . %v1:=v2:=1; %show scalars; %aa:=list(a); %show lists; %array ar(2); %show arrays; %load matr$ %matrix mm; %show matrices; %x**2; %saveas res; %show saveids; %suppress scalars; %show scalars; %show lists; %suppress all; %show arrays; %show matrices; ; comment end of the interactive part; ; clear op; operator op; op(x,y,z); op(x,y,s1) clearop op; t clearfunctions abs,tan; *** abs is unprotected : Cleared *** *** tan is a protected function: NOT cleared *** "Clearing is complete" ; comment THIS FUNCTION MUST BE USED WITH CARE !!"!!!; ; Comment 10. HANDLING OF POLYNOMIALS clear x,y,z; COMMENT To see the internal representation :; ; off pri; ; pol:=(x-2*y+3*z**2-1)**3; 3 2 2 2 2 4 pol := x + ( - 6*y + 9*s1 - 3)*x + (12*y + ( - 36*s1 + 12)*y + 27*s1 - 18* 2 3 2 2 4 2 s1 + 3)*x - 8*y + (36*s1 - 12)*y + ( - 54*s1 + 36*s1 - 6)*y + 27*s1 6 4 2 - 27*s1 + 9*s1 - 1 ; pold:=distribute pol; 6 4 2 3 2 2 2 2 2 pold := 27*s1 - 27*s1 + 9*s1 + x - 6*y*x + 9*s1 *x - 3*x + 12*y *x + 27* 4 2 2 3 2 2 2 s1 *x - 18*s1 *x - 36*s1 *y*x + 12*y*x + 3*x - 8*y + 36*s1 *y - 12*y 4 2 - 54*s1 *y + 36*s1 *y - 6*y - 1 ; on distribute; leadterm (pold); 6 27*s1 pold:=redexpr pold; 4 2 3 2 2 2 2 2 4 pold := - 27*s1 + 9*s1 + x - 6*y*x + 9*s1 *x - 3*x + 12*y *x + 27*s1 *x - 2 2 3 2 2 2 18*s1 *x - 36*s1 *y*x + 12*y*x + 3*x - 8*y + 36*s1 *y - 12*y - 54*s1 4 2 *y + 36*s1 *y - 6*y - 1 leadterm pold; 4 - 27*s1 ; off distribute; polp:=pol$ leadterm polp; 3 x polp:=redexpr polp; 2 2 2 2 4 2 polp := ( - 6*y + 9*s1 - 3)*x + (12*y + ( - 36*s1 + 12)*y + 27*s1 - 18*s1 3 2 2 4 2 6 + 3)*x - 8*y + (36*s1 - 12)*y + ( - 54*s1 + 36*s1 - 6)*y + 27*s1 - 4 2 27*s1 + 9*s1 - 1 leadterm polp; 2 2 ( - 6*y + 9*s1 - 3)*x ; monom polp; 6 {27*s1 , 4 - 27*s1 , 2 9*s1 , 2 - 6*y*x , 2 2 9*s1 *x , 2 - 3*x , 2 12*y *x, 4 27*s1 *x, 2 - 18*s1 *x, 2 - 36*s1 *y*x, 12*y*x, 3*x, 3 - 8*y , 2 2 36*s1 *y , 2 - 12*y , 4 - 54*s1 *y, 2 36*s1 *y, - 6*y, -1} ; on pri; ; splitterms polp; 2 2 {{9*s1 *x , 2 12*x*y , 12*x*y, 4 27*s1 *x, 3*x, 2 2 36*s1 *y , 2 36*s1 *y, 6 27*s1 , 2 9*s1 }, 2 {6*x *y, 2 3*x , 2 36*s1 *x*y, 2 18*s1 *x, 3 8*y , 2 12*y , 4 54*s1 *y, 6*y, 4 27*s1 , 1}} ; splitplusminus polp; 6 4 2 2 2 2 2 2 2 {3*(9*s1 + 9*s1 *x + 3*s1 *x + 12*s1 *y + 12*s1 *y + 3*s1 + 4*x*y + 4*x*y + x), 4 4 2 2 2 2 3 2 - 54*s1 *y - 27*s1 - 36*s1 *x*y - 18*s1 *x - 6*x *y - 3*x - 8*y - 12*y - 6*y - 1} ; divpol(pol,x+2*y+3*z**2); 4 2 2 2 2 2 {9*s1 + 6*s1 *x - 24*s1 *y - 9*s1 + x - 8*x*y - 3*x + 28*y + 18*y + 3, 3 2 - 64*y - 48*y - 12*y - 1} ; lowestdeg(pol,y); 0 ; Comment 11. HANDLING OF SOME TRANSCENDENTAL FUNCTIONS:; ; trig:=((sin x)**2+(cos x)**2)**4; trig := 8 6 2 4 4 2 6 8 cos(x) + 4*cos(x) *sin(x) + 6*cos(x) *sin(x) + 4*cos(x) *sin(x) + sin(x) trigreduce trig; 1 trig:=sin (5x); trig := sin(5*x) trigexpand trig; 4 2 2 4 sin(x)*(5*cos(x) - 10*cos(x) *sin(x) + sin(x) ) trigreduce ws; sin(5*x) trigexpand sin(x+y+z); cos(s1)*cos(x)*sin(y) + cos(s1)*cos(y)*sin(x) + cos(x)*cos(y)*sin(s1) - sin(s1)*sin(x)*sin(y) ; ; hypreduce (sinh x **2 -cosh x **2); -1 ; ; clear a,b,c,d; ; Comment 12. COERCION FROM ARRAY TO LIST AND VICE-VERSA:; on rounded; array_to_list ar; {2.77546499305,1.79693268486,3.43100115041,2.11636272025,3.45447023392} ; off rounded; ll:={{a,b},{b,c},{c,d}}$ list_to_array(ll,1,ar); *** array ar redefined ar(1); {b,c} list_to_array(ll,2,ar); *** array ar redefined ar(1,1); c ; clear ar; ; Comment 13. HANDLING OF N-DIMENSIONAL VECTORS:; ; clear u1,u2,v1,v2,v3,v4,w3,w4; u1:=list(v1,v2,v3,v4); u1 := {v1,v2,v3,v4} u2:=bag(w1,w2,w3,w4); u2 := bag(w1,w2,w3,w4) % sumvect(u1,u2); {v1 + w1, v2 + w2, v3 + w3, v4 + w4} minvect(u2,u1); bag( - v1 + w1, - v2 + w2, - v3 + w3, - v4 + w4) scalvect(u1,u2); v1*w1 + v2*w2 + v3*w3 + v4*w4 crossvect(rest u1,rest u2); {v3*w4 - v4*w3, - v2*w4 + v4*w2, v2*w3 - v3*w2} mpvect(rest u1,rest u2, minvect(rest u1,rest u2)); 0 scalvect(crossvect(rest u1,rest u2),minvect(rest u1,rest u2)); 0 ; Comment 14. HANDLING OF GRASSMANN OPERATORS:; ; putgrass eta,eta1; grasskernel:= {eta(~x)*eta(~y) => -eta y * eta x when nordp(x,y), (~x)*(~x) => 0 when grassp x}; grasskernel := {eta(~x)*eta(~y) => - eta(y)*eta(x) when nordp(x,y), ~x*~x => 0 when grassp(x)} ; eta(y)*eta(x); eta(y)*eta(x) eta(y)*eta(x) where grasskernel; - eta(x)*eta(y) let grasskernel; eta(x)^2; 0 eta(y)*eta(x); - eta(x)*eta(y) operator zz; grassparity (eta(x)*zz(y)); 1 grassparity (eta(x)*eta(y)); 0 grassparity(eta(x)+zz(y)); parity undefined clearrules grasskernel; grasskernel:= {eta(~x)*eta(~y) => -eta y * eta x when nordp(x,y), eta1(~x)*eta(~y) => -eta x * eta1 y, eta1(~x)*eta1(~y) => -eta1 y * eta1 x when nordp(x,y), (~x)*(~x) => 0 when grassp x}; grasskernel := {eta(~x)*eta(~y) => - eta(y)*eta(x) when nordp(x,y), eta1(~x)*eta(~y) => - eta(x)*eta1(y), eta1(~x)*eta1(~y) => - eta1(y)*eta1(x) when nordp(x,y), ~x*~x => 0 when grassp(x)} ; let grasskernel; eta1(x)*eta(x)*eta1(z)*eta1(w); - eta(x)*eta1(s1)*eta1(w)*eta1(x) clearrules grasskernel; remgrass eta,eta1; clearop zz; t ; Comment 15. HANDLING OF MATRICES:; ; clear m,mm,b,b1,bb,cc,a,b,c,d,a1,a2; load_package matrix; baglmat(bag(bag(a1,a2)),m); t m; [a1 a2] on errcont; ; baglmat(bag(bag(a1),bag(a2)),m); ***** (mat ((*sq ((((a1 . 1) . 1)) . 1) t) (*sq ((((a2 . 1) . 1)) . 1) t))) should be an identifier off errcont; % **** i.e. it cannot redefine the matrix! in order % to avoid accidental redefinition of an already given matrix; clear m; baglmat(bag(bag(a1),bag(a2)),m); t m; [a1] [ ] [a2] on errcont; baglmat(bag(bag(a1),bag(a2)),bag); ***** operator bag invalid as matrix off errcont; comment Right since a bag-like object cannot become a matrix.; ; coercemat(m,op); op(op(a1),op(a2)) coercemat(m,list); {{a1},{a2}} ; on nero; unitmat b1(2); matrix b(2,2); b:=mat((r1,r2),(s1,s2)); [r1 r2] b := [ ] [s1 s2] b1; [1 0] [ ] [0 1] b; [r1 r2] [ ] [s1 s2] mkidm(b,1); [1 0] [ ] [0 1] ; seteltmat(b,newelt,2,2); [r1 r2 ] [ ] [s1 newelt] geteltmat(b,2,1); s1 % b:=matsubr(b,bag(1,2),2); [r1 r2] b := [ ] [1 2 ] ; submat(b,1,2); [1] ; bb:=mat((1+i,-i),(-1+i,-i)); [i + 1 - i] bb := [ ] [i - 1 - i] cc:=matsubc(bb,bag(1,2),2); [i + 1 1] cc := [ ] [i - 1 2] ; cc:=tp matsubc(bb,bag(1,2),2); [i + 1 i - 1] cc := [ ] [ 1 2 ] matextr(bb, bag,1); bag(i + 1, - i) ; matextc(bb,list,2); { - i, - i} ; hconcmat(bb,cc); [i + 1 - i i + 1 i - 1] [ ] [i - 1 - i 1 2 ] vconcmat(bb,cc); [i + 1 - i ] [ ] [i - 1 - i ] [ ] [i + 1 i - 1] [ ] [ 1 2 ] ; tpmat(bb,bb); [ 2*i - i + 1 - i + 1 -1] [ ] [ -2 - i + 1 i + 1 -1] [ ] [ -2 i + 1 - i + 1 -1] [ ] [ - 2*i i + 1 i + 1 -1] bb tpmat bb; [ 2*i - i + 1 - i + 1 -1] [ ] [ -2 - i + 1 i + 1 -1] [ ] [ -2 i + 1 - i + 1 -1] [ ] [ - 2*i i + 1 i + 1 -1] ; clear hbb; hermat(bb,hbb); [ - i + 1 - (i + 1)] [ ] [ i i ] % id hbb changed to a matrix id and assigned to the hermitian matrix % of bb. ; end; (TIME: assist 940 950)