findFuncMaxDifferenceWithoutZero:=proc(T,lvl,funcnum,epsilon) local ver,vertex,ma,mi,didit; #ma:=T[[0],funcnum]; #mi:=T[[0],funcnum]; didit:=0; ver:=vertices(lvl); for vertex in ver do if abs(T[vertex,funcnum])>epsilon then if didit=1 then if T[vertex,funcnum]ma then ma:=T[vertex,funcnum]; end if; else ma:=T[vertex,funcnum]; mi:=T[vertex,funcnum]; didit:=1; end if; end if; end do; if didit=1 then RETURN(ma-mi); else RETURN(0); end if; end; LocFindFuncMaxDifferenceWithoutZero:=proc(T,lvl,ver,funcnum,epsilon) local vertex,ma,mi,didit; #ma:=T[[0],funcnum]; #mi:=T[[0],funcnum]; didit:=0; for vertex in ver do if abs(T[vertex,funcnum])>epsilon then if didit=1 then if T[vertex,funcnum]ma then ma:=T[vertex,funcnum]; end if; else ma:=T[vertex,funcnum]; mi:=T[vertex,funcnum]; didit:=1; end if; end if; end do; if didit=1 then RETURN(ma-mi); else RETURN(0); end if; end; rp:=proc(L,m) option remember; local L1, i,L2; if m = 0 then RETURN([]); else if m = 1 then L1:=[]; for i in L do L1:=[op(L1),[i]]; end do; RETURN(L1); else L1 := rp(L,m-1); L2:=[]; #[op(map(add_one,L1,0)),op(map(add_one,L1,1)),op(map(add_one,L1,2))] for i in L do L2:=[op(L2),op(map(add_one,L1,i))]; end do; RETURN(L2); fi; end if; end; numericFunc:=proc(T,lvl,func) local v, vers; vers:=vertices(lvl); for v in vers do T[v,func]:=evalf(T[v,func]); end do; end; LocNumericFunc:=proc(T,lvl,vers,func) local v; for v in vers do T[v,func]:=evalf(T[v,func]); end do; end; funcQuotient:=proc(T,lvl,infunc1,infunc2,outfunc) local vers, vertex; vers:=vertices(lvl); for vertex in vers do if(abs(T[vertex,infunc2])<.000001) then#i didn't have a error 0 i just had 0 before T[vertex,outfunc]:=0; if(abs(T[vertex,infunc1])>.000001) then #print("the bottom was 0 but not the top"); end if; else T[vertex,outfunc]:=T[vertex,infunc1]/T[vertex,infunc2]; end if; end do; end; LocFuncQuotient:=proc(T,lvl,vers,infunc1,infunc2,outfunc) local vertex; for vertex in vers do if(abs(T[vertex,infunc2])<.000001) then#i didn't have a error 0 i just had 0 before T[vertex,outfunc]:=0; if(abs(T[vertex,infunc1])>.000001) then #print("the bottom was 0 but not the top"); end if; else T[vertex,outfunc]:=T[vertex,infunc1]/T[vertex,infunc2]; end if; end do; end; multiplyFuncByConstant:=proc(T,lvl,fnum,c) local vers, vertex; vers:=vertices(lvl); for vertex in vers do T[vertex,fnum]:=T[vertex,fnum]*c; end do; end; LocMultiplyFuncByConstant:=proc(T,lvl,vers,fnum,c) local vertex; for vertex in vers do T[vertex,fnum]:=T[vertex,fnum]*c; end do; end; funcDifference:=proc(T,lvl,infunc1,infunc2,outfunc) local vers, vertex; vers:=vertices(lvl); for vertex in vers do T[vertex,outfunc]:=T[vertex,infunc1]-T[vertex,infunc2]; end do; end; LocFuncDifference:=proc(T,lvl,vers,infunc1,infunc2,outfunc) local vertex; for vertex in vers do T[vertex,outfunc]:=T[vertex,infunc1]-T[vertex,infunc2]; end do; end; funcSumWithConstant:=proc(T,lvl,c,infunc1,infunc2,outfunc) local vers, vertex; vers:=vertices(lvl); for vertex in vers do T[vertex,outfunc]:=T[vertex,infunc1]+c*T[vertex,infunc2]; end do; end; LocFuncSumWithConstant:=proc(T,lvl,vers,c,infunc1,infunc2,outfunc) local vertex; for vertex in vers do T[vertex,outfunc]:=T[vertex,infunc1]+c*T[vertex,infunc2]; end do; end; funcProduct:=proc(T,lvl,infunc1,infunc2,outfunc) local vers,vertex; vers:=vertices(lvl); for vertex in vers do T[vertex,outfunc]:=T[vertex,infunc1]*T[vertex,infunc2]; end do; end; LocFuncProduct:=proc(T,lvl,vers,infunc1,infunc2,outfunc) local vertex; for vertex in vers do T[vertex,outfunc]:=T[vertex,infunc1]*T[vertex,infunc2]; end do; end; funcAbs:=proc(T,lvl,infunc,outfunc) local vers,vertex; vers:=vertices(lvl); for vertex in vers do T[vertex,outfunc]:=abs(T[vertex,infunc]); end do; end; LocFuncAbs:=proc(T,lvl,vers,infunc,outfunc) local vertex; for vertex in vers do T[vertex,outfunc]:=abs(T[vertex,infunc]); end do; end; LocFuncRotate:=proc(T,lvl,ver,list,infunc,outfunc) local vertex,nvertex,i,temp; for vertex in ver do nvertex:=vertex; for i from 1 to nops(vertex) do nvertex[i]:=list[vertex[i]+1]; end do; #print(cat("change ",vertex," to ",nvertex)); if nops(nvertex)>1 then if nvertex[nops(vertex)-1]>nvertex[nops(vertex)] then temp:=nvertex[nops(nvertex)-1]; nvertex[nops(nvertex)-1]:=nvertex[nops(nvertex)]; nvertex[nops(nvertex)]:=temp; end if; end if; T[nvertex,outfunc]:=T[vertex,infunc]; end do; end; funcRotate:=proc(T,lvl,list,infunc,outfunc) local ver,vertex,nvertex,i,temp; ver:=vertices(lvl); for vertex in ver do nvertex:=vertex; for i from 1 to nops(vertex) do nvertex[i]:=list[vertex[i]+1]; end do; #print(cat("change ",vertex," to ",nvertex)); if nops(nvertex)>1 then if nvertex[nops(vertex)-1]>nvertex[nops(vertex)] then temp:=nvertex[nops(nvertex)-1]; nvertex[nops(nvertex)-1]:=nvertex[nops(nvertex)]; nvertex[nops(nvertex)]:=temp; end if; end if; T[nvertex,outfunc]:=T[vertex,infunc]; end do; end; discLaplac:=proc(T,lvl,infunc,outfunc) local ver,vertex,i; ver:=vertices(lvl); make_neighbors(T,lvl,ver); ver:=subsop(1=NULL,2=NULL,3=NULL,ver); for vertex in ver do T[vertex,outfunc]:=-4*T[vertex,infunc]; for i from 1 to 4 do T[vertex,outfunc]:=T[vertex,outfunc]+T[T[vertex,i],infunc]; end do; end do; T[[1],outfunc]:=0; T[[2],outfunc]:=0; T[[0],outfunc]:=0; end; discInnerProduct:=proc(T,lvl,infunc1,infunc2) local ver,vertex,ret; ret:=0; ver:=vertices(lvl); ver:=subsop(1=NULL,2=NULL,3=NULL,ver); for vertex in ver do ret:=ret+T[vertex,infunc1]*T[vertex,infunc2]; end do; RETURN (ret); end; findFuncMax:=proc(T,lvl,funcnum) local ver,vertex,m; m:=T[[0],funcnum]; ver:=vertices(lvl); for vertex in ver do if T[vertex,funcnum]>m then m:=T[vertex,funcnum]; end if; end do; RETURN(m); end; LocFindFuncMax:=proc(T,lvl,ver,funcnum) local vertex,m; m:=T[ver[1],funcnum]; for vertex in ver do if T[vertex,funcnum]>m then m:=T[vertex,funcnum]; end if; end do; RETURN(m); end; findFuncMin:=proc(T,lvl,funcnum) local ver,vertex,m; m:=T[[0],funcnum]; ver:=vertices(lvl); for vertex in ver do if T[vertex,funcnum]m[1] then m[1]:=T[vertex,funcnum]; m[2]:=vertex; end if; end do; RETURN(m); end; findFuncMin2:=proc(T,lvl,funcnum) local ver,vertex,m; m:=[T[[0],funcnum],0]; ver:=vertices(lvl); for vertex in ver do if T[vertex,funcnum]m[1] then m[1]:=T[vertex,funcnum]; m[2]:=vertex; end if; end do; RETURN(m); end; LocFindFuncMin2:=proc(T,lvl,ver,funcnum) local vertex,m; m:=[T[ver[1],funcnum],ver[1]]; for vertex in ver do if T[vertex,funcnum]