import numpy as np from scipy.linalg import expm, eigvals rng=np.random.default_rng(7) def edge(a): return np.max(np.real(eigvals(a))) def gam(a,b,T): p=expm(b*T/2)@expm(a*T/2) return np.log(np.max(np.abs(eigvals(p))))/T for i in range(20000): a=rng.normal(0,5,(2,2)); b=rng.normal(0,5,(2,2)) ea,eb=edge(a),edge(b) if ea<=.2 or eb<=.2: continue av=edge((a+b)/2) vals=[gam(a,b,t) for t in [.01,.03,.1,.2,.5,1,2,5,10]] if av>0 and min(vals)<-.05: print('found',i,'edges',ea,eb,'avg',av,'comm',np.linalg.norm(a@b-b@a),'vals',vals) print(a);print(b);break else: print('none')