This is an old revision of the document!
Response function
The ResponseFunction object in Quanty defines (linear) response functions. For Hamiltonian $H$, ground-state $| \psi_0 \rangle$ and transition operator $T$ we define the response function $G(\omega,\Gamma)$ as $$ G(\omega,\Gamma) = \left\langle \psi_0 \middle| T^{\dagger} \frac{1}{\omega - H + \mathrm{i} \Gamma/2 + E_0} T^{\phantom{\dagger}} \middle| \psi_0 \right\rangle. $$
Definitions
- Example.Quanty
-- Defining single-valued response functions a = {0, -1,-0.5, 0, 0.5, 1, 1.5} b = { 0.2, 0.1, 0.1, 0.1, 0.2, 0.3} GA_L = {a,b,mu=0,type="ListOfPoles", name="A"} setmetatable(GA_L, ResponseFunctionMeta) a = {0, 1, 1, 1, 1, 1, 1} b = { 1, 0.5, 0.5, 0.5, 0.5, 0.5} GB_T = {a,b,mu=0,type="Tri", name="B"} setmetatable(GB_T, ResponseFunctionMeta) a = {0, 1, 1.5, 2, 2.5, 3, 3.5} b = { 1, 0.5, 0.5, 0.5, 0.5, 0.5} GC_A = {a,b,mu=0,type="And", name="C"} setmetatable(GC_A, ResponseFunctionMeta) acon = {0, 1, 1, 1, 1, 1, 1} bcon = { sqrt(1/2), 0.5, 0.5, 0.5, 0.5, 0.5} Gcon = {acon,bcon,mu=0,type="Tri"} setmetatable(Gcon, ResponseFunctionMeta) aval = {0, -1, -1, -1, -1, -1, -1} bval = { sqrt(1/2), 0.5, 0.5, 0.5, 0.5, 0.5} Gval = {aval,bval,mu=0,type="Tri"} setmetatable(Gval, ResponseFunctionMeta) a0=0 b0=1 GD_N = {{a0,b0},val=Gval,con=Gcon,mu=0,type="Nat", name="D"} setmetatable(GD_N, ResponseFunctionMeta) -- For a more efficient storage, one can convert from Table to Userdata GA_l = ResponseFunction.ToUserdata(GA_L) GB_t = ResponseFunction.ToUserdata(GB_T) GC_a = ResponseFunction.ToUserdata(GC_A) GD_n = ResponseFunction.ToUserdata(GD_N) print("GA_L:") print(GA_L) print("GA_l:") print(GA_l) print("GB_T:") print(GB_T) print("GB_t:") print(GB_t) print("GC_A:") print(GC_A) print("GC_a:") print(GC_a) print("GD_N:") print(GD_N) print("GD_n:") print(GD_n) -- response functions in Quanty are functions that, given -- a complex number as input w + I gamma/2 return a complex -- number (single valued functions) or a matrix (matrix functions) omega = 0.764 gamma = 0.1 print("omega = ", omega) print("gamma = ", gamma) print("") print("GA_L(omega, gamma) = ", GA_L(omega, gamma)) print("GA_l(omega, gamma) = ", GA_l(omega, gamma)) print("GB_T(omega, gamma) = ", GB_T(omega, gamma)) print("GB_t(omega, gamma) = ", GB_t(omega, gamma)) print("GC_A(omega, gamma) = ", GC_A(omega, gamma)) print("GC_a(omega, gamma) = ", GC_a(omega, gamma)) print("GD_N(omega, gamma) = ", GD_N(omega, gamma)) print("GD_n(omega, gamma) = ", GD_n(omega, gamma)) -- Defining matrix response functions A0 = {{0,0,0},{0,0,0},{0,0,0}} setmetatable(A0, MatrixMeta) A1 = {{1,2,3},{2,5,6},{3,6,9}} setmetatable(A1, MatrixMeta) A2 = {{2,2,3},{2,5,6},{3,6,9}} setmetatable(A2, MatrixMeta) A3 = {{3,2,3},{2,5,6},{3,6,9}} setmetatable(A3, MatrixMeta) a1 = -1 a2 = 0 a3 = 1 av1 = -0.5 av2 = -1.0 av3 = -1.5 ac1 = 0.5 ac2 = 1.0 ac3 = 1.5 B0s = {{1,0,0},{0,1,0},{0,0,1}} setmetatable(B0s, MatrixMeta) t=sqrt(0.5) B0vs = {{t,0,0},{0,t,0},{0,0,t}} setmetatable(B0vs, MatrixMeta) B0cs = {{t,0,0},{0,t,0},{0,0,t}} setmetatable(B0cs, MatrixMeta) B0 = B0s * B0s B0v = B0vs * B0vs B0c = B0cs * B0cs B1s = {{1,I,3},{-I,5,6},{3,6,9}} setmetatable(B1s, MatrixMeta) B1 = B1s * B1s B2s = {{2,0,3},{0,5,6},{3,6,9}} setmetatable(B2s, MatrixMeta) B2 = B2s * B2s B3s = {{3,0,3},{0,5,6},{3,6,9}} setmetatable(B3s, MatrixMeta) B3 = B3s * B3s MA_L = { {A0,a1,a2,a3}, {B1,B2,B3}, mu=0, type="ListOfPoles", name="A"} setmetatable(MA_L, ResponseFunctionMeta) MB_T = { {A0,A1,A2,A3}, {B0,B1,B2}, mu=0, type="Tri", name="B"} setmetatable(MB_T, ResponseFunctionMeta) MC_A = { {A0,A1,A2,A3}, {B0,B1,B2}, mu=0, type="And", name="C"} setmetatable(MC_A, ResponseFunctionMeta) MD_Nv = { {A0,av1,av2,av3}, {B1,B2,B3}, mu=0, type="ListOfPoles", name="Dv"} setmetatable(MD_Nv, ResponseFunctionMeta) MD_Nc = { {A0,ac1,ac2,ac3}, {B1,B2,B3}, mu=0, type="ListOfPoles", name="Dc"} setmetatable(MD_Nc, ResponseFunctionMeta) MD_N = {{A0,B0},val=MD_Nv,con=MD_Nc,mu=0,type="Nat", name="D"} setmetatable(MD_N, ResponseFunctionMeta) -- For a more efficient storage, one can convert from Table to Userdata MA_l = ResponseFunction.ToUserdata(MA_L) MB_t = ResponseFunction.ToUserdata(MB_T) MC_a = ResponseFunction.ToUserdata(MC_A) MD_n = ResponseFunction.ToUserdata(MD_N) print("MA_L:") print(MA_L) print("MA_l:") print(MA_l) print("MB_T:") print(MB_T) print("MB_t:") print(MB_t) print("MC_A:") print(MC_A) print("MC_a:") print(MC_a) print("MD_N:") print(MD_N) print("MD_n:") print(MD_n) -- response functions in Quanty are functions that, given -- a complex number as input w + I gamma/2 return a complex -- number (single valued functions) or a matrix (matrix functions) omega = 0.764 gamma = 0.1 print("omega = ", omega) print("gamma = ", gamma) print("") print("MA_L(omega, gamma) = ") print(MA_L(omega, gamma)) print("MA_l(omega, gamma) = ") print(MA_l(omega, gamma)) print("") print("MB_T(omega, gamma) = ") print(MB_T(omega, gamma)) print("MB_t(omega, gamma) = ") print(MB_t(omega, gamma)) print("") print("MC_A(omega, gamma) = ") print(MC_A(omega, gamma)) print("MC_a(omega, gamma) = ") print(MC_a(omega, gamma)) print("") print("MD_N(omega, gamma) = ") print(MD_N(omega, gamma)) print("MD_n(omega, gamma) = ") print(MD_n(omega, gamma))
GA_L: { { 0 , -1 , -0.5 , 0 , 0.5 , 1 , 1.5 } , { 0.2 , 0.1 , 0.1 , 0.1 , 0.2 , 0.3 } , type = ListOfPoles , mu = 0 , name = A } GA_l: ResponseFunction in userdata format use ToTable() in order to get a table form GB_T: { { 0 , 1 , 1 , 1 , 1 , 1 , 1 } , { 1 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 } , type = Tri , mu = 0 , name = B } GB_t: ResponseFunction in userdata format use ToTable() in order to get a table form GC_A: { { 0 , 1 , 1.5 , 2 , 2.5 , 3 , 3.5 } , { 1 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 } , type = And , mu = 0 , name = C } GC_a: ResponseFunction in userdata format use ToTable() in order to get a table form GD_N: { { 0 , 1 } , type = Nat , val = { { 0 , -1 , -1 , -1 , -1 , -1 , -1 } , { 0.70710678118655 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 } , mu = 0 , type = Tri } , con = { { 0 , 1 , 1 , 1 , 1 , 1 , 1 } , { 0.70710678118655 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 } , mu = 0 , type = Tri } , name = D , mu = 0 } GD_n: ResponseFunction in userdata format use ToTable() in order to get a table form omega = 0.764 gamma = 0.1 GA_L(omega, gamma) = (-0.52850742098896 - 0.28351791776891 I) GA_l(omega, gamma) = (-0.52850742098896 - 0.28351791776891 I) GB_T(omega, gamma) = (-1.6762624946074 - 5.2043002596032 I) GB_t(omega, gamma) = (-1.6762624946074 - 5.2043002596032 I) GC_A(omega, gamma) = (1.5075603166492 - 0.20713674761056 I) GC_a(omega, gamma) = (1.5075603166492 - 0.20713674761056 I) GD_N(omega, gamma) = (-0.52770560643508 - 2.61282805234 I) GD_n(omega, gamma) = (-0.52770560643508 - 2.61282805234 I) MA_L: { { { { 0 , 0 , 0 } , { 0 , 0 , 0 } , { 0 , 0 , 0 } } , -1 , 0 , 1 } , { { { 11 , (18 + 6 I) , (30 + 6 I) } , { (18 - 6 I) , 62 , (84 - 3 I) } , { (30 - 6 I) , (84 + 3 I) , 126 } } , { { 13 , 18 , 33 } , { 18 , 61 , 84 } , { 33 , 84 , 126 } } , { { 18 , 18 , 36 } , { 18 , 61 , 84 } , { 36 , 84 , 126 } } } , type = ListOfPoles , mu = 0 , name = A } MA_l: ResponseFunction in userdata format use ToTable() in order to get a table form MB_T: { { { { 0 , 0 , 0 } , { 0 , 0 , 0 } , { 0 , 0 , 0 } } , { { 1 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } , { { 2 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } , { { 3 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } } , { { { 1 , 0 , 0 } , { 0 , 1 , 0 } , { 0 , 0 , 1 } } , { { 11 , (18 + 6 I) , (30 + 6 I) } , { (18 - 6 I) , 62 , (84 - 3 I) } , { (30 - 6 I) , (84 + 3 I) , 126 } } , { { 13 , 18 , 33 } , { 18 , 61 , 84 } , { 33 , 84 , 126 } } } , type = Tri , mu = 0 , name = B } MB_t: ResponseFunction in userdata format use ToTable() in order to get a table form MC_A: { { { { 0 , 0 , 0 } , { 0 , 0 , 0 } , { 0 , 0 , 0 } } , { { 1 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } , { { 2 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } , { { 3 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } } , { { { 1 , 0 , 0 } , { 0 , 1 , 0 } , { 0 , 0 , 1 } } , { { 11 , (18 + 6 I) , (30 + 6 I) } , { (18 - 6 I) , 62 , (84 - 3 I) } , { (30 - 6 I) , (84 + 3 I) , 126 } } , { { 13 , 18 , 33 } , { 18 , 61 , 84 } , { 33 , 84 , 126 } } } , type = And , mu = 0 , name = C } MC_a: ResponseFunction in userdata format use ToTable() in order to get a table form MD_N: { { { { 0 , 0 , 0 } , { 0 , 0 , 0 } , { 0 , 0 , 0 } } , { { 1 , 0 , 0 } , { 0 , 1 , 0 } , { 0 , 0 , 1 } } } , type = Nat , val = { { { { 0 , 0 , 0 } , { 0 , 0 , 0 } , { 0 , 0 , 0 } } , -0.5 , -1 , -1.5 } , { { { 11 , (18 + 6 I) , (30 + 6 I) } , { (18 - 6 I) , 62 , (84 - 3 I) } , { (30 - 6 I) , (84 + 3 I) , 126 } } , { { 13 , 18 , 33 } , { 18 , 61 , 84 } , { 33 , 84 , 126 } } , { { 18 , 18 , 36 } , { 18 , 61 , 84 } , { 36 , 84 , 126 } } } , type = ListOfPoles , mu = 0 , name = Dv } , con = { { { { 0 , 0 , 0 } , { 0 , 0 , 0 } , { 0 , 0 , 0 } } , 0.5 , 1 , 1.5 } , { { { 11 , (18 + 6 I) , (30 + 6 I) } , { (18 - 6 I) , 62 , (84 - 3 I) } , { (30 - 6 I) , (84 + 3 I) , 126 } } , { { 13 , 18 , 33 } , { 18 , 61 , 84 } , { 33 , 84 , 126 } } , { { 18 , 18 , 36 } , { 18 , 61 , 84 } , { 36 , 84 , 126 } } } , type = ListOfPoles , mu = 0 , name = Dc } , name = D , mu = 0 } MD_n: ResponseFunction in userdata format use ToTable() in order to get a table form omega = 0.764 gamma = 0.1 MA_L(omega, gamma) = { { (-49.82074737235 - 16.750435144161 I) , (-39.242754250336 - 13.890672203015 I) , (-85.890426598686 - 30.827754261851 I) } , { (-39.435420350993 - 20.687932234176 I) , (-132.74935751632 - 58.607579693628 I) , (-183.63057392827 - 82.382725361235 I) } , { (-86.083092699343 - 37.625014293012 I) , (-183.53424087794 - 78.984095345655 I) , (-275.37361110465 - 121.02511553017 I) } } MA_l(omega, gamma) = { { (-49.82074737235 - 16.750435144161 I) , (-39.242754250336 - 13.890672203015 I) , (-85.890426598686 - 30.827754261851 I) } , { (-39.435420350993 - 20.687932234176 I) , (-132.74935751632 - 58.607579693628 I) , (-183.63057392827 - 82.382725361235 I) } , { (-86.083092699343 - 37.625014293012 I) , (-183.53424087794 - 78.984095345655 I) , (-275.37361110465 - 121.02511553017 I) } } MB_T(omega, gamma) = { { (0.99841211757801 - 0.4318886700871 I) , (-0.92217346376056 - 0.59364349550167 I) , (0.33618642304746 + 0.56252370645231 I) } , { (-0.51999398150154 + 0.87279523667066 I) , (0.69431808205569 - 0.1748977600005 I) , (-0.34355189835894 - 0.03809026037919 I) } , { (0.13982839704936 - 0.53101630282404 I) , (-0.25718128095213 + 0.17938506335344 I) , (0.080137084707226 - 0.049212538037938 I) } } MB_t(omega, gamma) = { { (0.99841211757801 - 0.4318886700871 I) , (-0.92217346376056 - 0.59364349550167 I) , (0.33618642304746 + 0.56252370645231 I) } , { (-0.51999398150154 + 0.87279523667066 I) , (0.69431808205569 - 0.1748977600005 I) , (-0.34355189835894 - 0.03809026037919 I) } , { (0.13982839704936 - 0.53101630282404 I) , (-0.25718128095213 + 0.17938506335344 I) , (0.080137084707226 - 0.049212538037938 I) } } MC_A(omega, gamma) = { { (0.0033404740201663 - 0.049014208032374 I) , (-0.0092579857609902 - 0.018133779674219 I) , (0.0041464743284782 + 0.021581712320061 I) } , { (0.001131475130102 - 0.019625764066449 I) , (-0.006620607647268 - 0.0094591143626733 I) , (0.0044705980344151 + 0.010254424901895 I) } , { (0.0018776712535675 + 0.024036826455971 I) , (0.0083397043445284 + 0.01003150710377 I) , (-0.0056913744700838 - 0.011590149052798 I) } } MC_a(omega, gamma) = { { (0.0033404740201663 - 0.049014208032374 I) , (-0.0092579857609902 - 0.018133779674219 I) , (0.0041464743284782 + 0.021581712320061 I) } , { (0.001131475130102 - 0.019625764066449 I) , (-0.006620607647268 - 0.0094591143626733 I) , (0.0044705980344151 + 0.010254424901895 I) } , { (0.0018776712535675 + 0.024036826455971 I) , (0.0083397043445284 + 0.01003150710377 I) , (-0.0056913744700838 - 0.011590149052798 I) } } MD_N(omega, gamma) = { { (-12.839446772164 - 21.169048830916 I) , (5.1855777994224 - 3.9320983625761 I) , (-10.184899840804 - 27.575394683943 I) } , { (-3.5000860033155 - 57.291484603566 I) , (7.3025877301526 - 104.46376534286 I) , (1.7613982402315 - 156.19487348125 I) } , { (-18.870563643542 - 80.934780924933 I) , (6.1042301416005 - 129.51518036075 I) , (5.8992212863723 - 214.2825403815 I) } } MD_n(omega, gamma) = { { (-12.839446772164 - 21.169048830916 I) , (5.1855777994224 - 3.9320983625761 I) , (-10.184899840804 - 27.575394683943 I) } , { (-3.5000860033155 - 57.291484603566 I) , (7.3025877301526 - 104.46376534286 I) , (1.7613982402315 - 156.19487348125 I) } , { (-18.870563643542 - 80.934780924933 I) , (6.1042301416005 - 129.51518036075 I) , (5.8992212863723 - 214.2825403815 I) } }