dharr

Dr. David Harrington

8355 Reputation

22 Badges

21 years, 8 days
University of Victoria
Professor or university staff
Victoria, British Columbia, Canada

Social Networks and Content at Maplesoft.com

Maple Application Center
I am a retired professor of chemistry at the University of Victoria, BC, Canada. My research areas are electrochemistry and surface science. I have been a user of Maple since about 1990.

MaplePrimes Activity


These are questions asked by dharr

I am trying to show that the eigenvalues of a matrix are described by my proposed formula. I managed to show this numerically, but I would like to show this symbolically. There are two issues here - the orders of the two lists are different, and the forms are different (sums of complex exponentials vs RootOfs). Any suggestions?

restart;

with(LinearAlgebra): with(GraphTheory): with(plots):

L:=9;

9

Generate a matrix and its eigenvalues

C := AdjacencyMatrix(CycleGraph(L, directed)):
Id := IdentityMatrix(L):
A := KroneckerProduct(C, Id) + KroneckerProduct(Id, C) + KroneckerProduct(C, C):
evs := Eigenvalues(A, output = list):
plotevs := complexplot(evs, style = point, color = blue, scaling = constrained):

My guess as to their values

evstheory:=[seq(seq(exp((2*Pi)*I*k/L) + exp((2*Pi)*I*m/L) + exp((2*Pi)*I*(m + k)/L), k = 0 .. L - 1), m = 0 .. L - 1)]:
plotevstheory:=complexplot(evstheory, style = point, color = red, scaling = constrained):

They look to be the same

display(Array([plotevs,plotevstheory]));

 

 

 

 

 

Even showing they are the same numerically is nontrivial because the sorting is not consistent

fnormal(sort(evalf(evs))-sort(evalf(evstheory)));

[0., 0., 0., 0.*I, 0.*I, 0.*I, 0.*I, 0.+0.*I, 0.+0.*I, 0.-1.285575219*I, 0.-1.285575219*I, 0.-.9216049846*I, 0.-.9216049846*I, 0.-1.732050808*I, 0.-1.732050808*I, 0.+1.732050808*I, 0.+1.732050808*I, 0.+.9216049846*I, 0.+.9216049846*I, 0.+1.285575219*I, 0.+1.285575219*I, 0.+0.*I, 0.+0.*I, 0.-0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+.6840402864*I, 0.+.6840402864*I, 0.-.6840402858*I, 0.-.6840402858*I, 0.+0.*I, 0.+0.*I, 0.-3.701666314*I, 0.-3.701666314*I, 0.-.6840402857*I, 0.-.6840402857*I, 0.-.6840402863*I, 0.-.6840402863*I, 0.+.6840402868*I, 0.+.6840402868*I, 0.+.6840402862*I, 0.+.6840402862*I, -0.+3.701666314*I, -0.+3.701666314*I, 0.-4.623271298*I, 0.-.6840402860*I, 0.-.6840402860*I, 0.+.6840402865*I, 0.+.6840402865*I, -0.+4.623271298*I, 0.-4.987241533*I, 0.-4.987241533*I, 0.-.6840402866*I, 0.-.6840402866*I, 0.-1.732050808*I, 0.-1.732050808*I, 0.+1.732050808*I, 0.+1.732050808*I, 0.+.6840402863*I, 0.+.6840402863*I, -0.+4.987241532*I, -0.+4.987241532*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.-4.540765944*I, 0.-0.*I, 0.-0.*I, 0.-0.*I, 0.-0.*I, -0.+4.540765944*I, 0.-1.285575219*I, 0.-1.285575219*I, 0.-1.285575219*I, 0.-1.285575219*I, -0.+2.571150438*I, -0.+2.571150438*I]

This succeeds, so they are the same

fnormal(sort(evalf[20](evs),key=evalf)-sort(evalf[20](evstheory),key=evalf));

[0., 0., 0., 0.*I, 0.*I, 0.*I, 0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.+0.*I, 0.-0.*I, 0.-0.*I, 0.+0.*I, 0.+0.*I]

What about symbolically? [Edit - only part of output shown]

ans1:=simplify(sort(evs,key=evalf)-sort(evstheory,key=evalf));

NULL

Download verification.mw

For a table

T := table(sparse = {}, [1 = {a}, 2 = {b}])

T[3] returns {}. 

Is there an equivalent for an rtable?

restart

T := table(sparse = {}, [1 = {a}, 2 = {b}])

table( [( 1 ) = {a}, ( 2 ) = {b} ] )

T[1]; T[2]

{a}

{b}

Get the default value here

T[3]

{}

But (as documented), the sparseness of the table is not inherited - all elements are filled

Vector[row](6, T, storage = sparse); op(%)

Vector[row](%id = 36893490697130506636)

6, {1 = {a}, 2 = {b}, 3 = {}, 4 = {}, 5 = {}, 6 = {}}, datatype = anything, storage = sparse, order = Fortran_order, shape = []

fill = {} should fill in all unspecified values. but this is incompatible with storage = sparse (as documented).

Vector[row](6, {1 = T[1], 2 = T[2]}, storage = sparse, fill = {}); op(%)

Vector[row](%id = 36893490697130478916)

6, {1 = {a}, 2 = {b}}, datatype = anything, storage = sparse, order = Fortran_order, shape = []

And the default fill is still zero for datatype=set; I expected {} here.

Vector[row](6, {1 = T[1], 2 = T[2]}, storage = sparse, datatype = set); op(%)

Vector[row](%id = 36893490697130474412)

6, {1 = {a}, 2 = {b}}, datatype = set, storage = sparse, order = Fortran_order, attributes = [_fill = 0], shape = []

NULL

Download Sparse.mw

I am trying to understand the SymmetryGroup returned in the Logic Package. The help page says "The group is a permutation group; its elements are those permutations which preserve the Boolean structure of expr." [my bold], but later the definition is given as "A symmetry of a Boolean expression expr is a mapping f of each variable to some other variable or negated variable, such that the image of expr after applying f to each of its variables is a Boolean formula which is equivalent to expr." Is logically equivalent meant here, or something else? The help page examples don't answer this question.

The following example shows that a group permutation does not lead to a logically equivalent statement as I was expecting - is this a bug, or am I expecting too much here?

restart

with(Logic)

q := `&and`(`&or`(x[1], x[2]), x[3])

Logic:-`&and`(Logic:-`&or`(x[1], x[2]), x[3])

G, L := SymmetryGroup(q, output = [group, expressions]); g1, g2 := Generators(G)[]

_m1897409254784, [x[1], x[2], x[3], Logic:-`&not`(x[1]), Logic:-`&not`(x[2]), Logic:-`&not`(x[3])]

_m1897409280096, _m1897409281184

Exchanging x[1] with x[2], and (not x[1]) with (not x[2]) leads to a logically equivalent expression, so this is indeed a symmetry.

zip(`=`, L, L[convert(g1, permlist, nops(L))]); q1 := eval(q, %); Equivalent(q, q1)

[x[1] = x[2], x[2] = x[1], x[3] = x[3], Logic:-`&not`(x[1]) = Logic:-`&not`(x[2]), Logic:-`&not`(x[2]) = Logic:-`&not`(x[1]), Logic:-`&not`(x[3]) = Logic:-`&not`(x[3])]

Logic:-`&and`(Logic:-`&or`(x[2], x[1]), x[3])

true

Exchanging x[3] with (not x[3]) leads to an expression that perhaps has the same form but is not equivalent

zip(`=`, L, L[convert(g2, permlist, nops(L))]); q2 := eval(q, %); Equivalent(q, q2)

[x[1] = x[1], x[2] = x[2], x[3] = Logic:-`&not`(x[3]), Logic:-`&not`(x[1]) = Logic:-`&not`(x[1]), Logic:-`&not`(x[2]) = Logic:-`&not`(x[2]), Logic:-`&not`(x[3]) = x[3]]

Logic:-`&and`(Logic:-`&or`(x[1], x[2]), Logic:-`&not`(x[3]))

false

NULL

Download LogicTest.mw

The following worksheet was run from my desktop and finds both currentdir() and interface(worksheetdir) to be "C:\Users\dharr\Desktop" (either from opening it within Maple 2017 or double-clicking on it). The startup code is

DocumentTools:-SetProperty("TextArea0",value,currentdir());
DocumentTools:-SetProperty("TextArea1",value,interface(worksheetdir));

But if I load it from Maple Player 2018, then both currentdir() and interface(worksheetdir) are "c:\program files\maple player".

It means an interactive application that runs in Maple won't run in Maple Player.

Is this a bug or deliberate strategy to make it harder to open datafiles within Maple Player?


(Can't load the worksheet contents right now)

Download Test.mw

I'm really after a simple workaround for a file open dialog with embedded components - any suggestions?

View 127_phase coloring.mw on MapleNet or Download 127_phase coloring.mw
View file details

I am trying to color  3D plots according to phase using color=argument(x)/Pi/2

I get different results depending on the form I enter the expression x, as shown on the worksheet. Any suggestions to make this consistent?

1 2 Page 1 of 2