@@ -184,10 +184,10 @@ def numdiff(i):
184184 f .append (- 0.5j )
185185 door .append ([0 , i , numdiff (i )])
186186 for i in range (N - 1 ):
187- f .append (- 1j )
187+ f .append (- 0.5j )
188188 door .append ([5 , i , i + 1 ])
189189 for i in range (N - 1 ):
190- f .append (- 1j )
190+ f .append (- 0.5j )
191191 door .append ([3 , i , i + 1 ])
192192 for i in range (N ):
193193 h .append (1 )
@@ -235,54 +235,60 @@ def numdiff(i):
235235
236236 # variation realize
237237 ODE_theta = tf .zeros (len (door ), dtype = "float64" )
238+
239+ a_batch_theta = []
240+ a_batch_is_k = []
241+ a_batch_is_q = []
242+ for k in range (len (door )):
243+ for q in range (len (door )):
244+ is_k = [0 for _ in range (len (door ))]
245+ is_k [k ] = 1
246+ is_q = [0 for _ in range (len (door ))]
247+ is_q [q ] = 1
248+ if how_variation == 0 :
249+ a_batch_theta .append (np .angle (f [q ]) - np .angle (f [k ]))
250+ else :
251+ a_batch_theta .append (np .angle (f [q ]) - np .angle (f [k ]) - math .pi / 2 )
252+ a_batch_is_k .append (is_k )
253+ a_batch_is_q .append (is_q )
254+ a_batch_theta = tc .array_to_tensor (a_batch_theta )
255+ a_batch_is_k = tf .constant (a_batch_is_k )
256+ a_batch_is_q = tf .constant (a_batch_is_q )
257+
258+ c_batch_theta = []
259+ c_batch_is_k = []
260+ c_batch_is_q = []
261+ for k in range (len (door )):
262+ for q in range (len (h_door )):
263+ is_k = [0 for _ in range (len (door ))]
264+ is_k [k ] = 1
265+ is_q = [0 for _ in range (len (door ))]
266+ is_q [q ] = 1
267+ c_batch_is_k .append (is_k )
268+ c_batch_is_q .append (is_q )
269+ if how_variation == 0 :
270+ c_batch_theta .append (np .angle (h [q ]) - np .angle (f [k ]) - math .pi / 2 )
271+ else :
272+ c_batch_theta .append (np .angle (h [q ]) - np .angle (f [k ]) + math .pi )
273+ c_batch_theta = tc .array_to_tensor (c_batch_theta )
274+ c_batch_is_k = tf .constant (c_batch_is_k )
275+ c_batch_is_q = tf .constant (c_batch_is_q )
276+
238277 for T in range (int (t / dt )):
239278 # calculate coefficient in paper
240- A = np .zeros ((len (door ), len (door )))
241- C = np .zeros (len (door ))
242- batch_theta = []
243- batch_is_k = []
244- batch_is_q = []
245- for k in range (len (door )):
246- for q in range (len (door )):
247- is_k = [0 for _ in range (len (door ))]
248- is_k [k ] = 1
249- is_q = [0 for _ in range (len (door ))]
250- is_q [q ] = 1
251- if how_variation == 0 :
252- batch_theta .append (np .angle (f [q ]) - np .angle (f [k ]))
253- else :
254- batch_theta .append (np .angle (f [q ]) - np .angle (f [k ]) - math .pi / 2 )
255- batch_is_k .append (is_k )
256- batch_is_q .append (is_q )
257- batch_theta = tc .array_to_tensor (batch_theta )
258- batch_is_k = tf .constant (batch_is_k )
259- batch_is_q = tf .constant (batch_is_q )
260- vmap_result = Calculation_A_vmap (batch_theta , batch_is_k , batch_is_q , ODE_theta )
279+
280+ vmap_result = Calculation_A_vmap (
281+ a_batch_theta , a_batch_is_k , a_batch_is_q , ODE_theta
282+ )
261283 A = tf .cast (
262284 tf .tensordot (tf .abs (f ), tf .abs (f ), 0 ), dtype = "float64"
263285 ) * tf .reshape (
264286 tc .backend .cast (vmap_result , dtype = "float64" ), [len (door ), len (door )]
265287 )
266288
267- batch_theta = []
268- batch_is_k = []
269- batch_is_q = []
270- for k in range (len (door )):
271- for q in range (len (h_door )):
272- is_k = [0 for _ in range (len (door ))]
273- is_k [k ] = 1
274- is_q = [0 for _ in range (len (door ))]
275- is_q [q ] = 1
276- if how_variation == 0 :
277- batch_theta .append (np .angle (h [q ]) - np .angle (f [k ]) - math .pi / 2 )
278- else :
279- batch_theta .append (np .angle (h [q ]) - np .angle (f [k ]) + math .pi )
280- batch_is_k .append (is_k )
281- batch_is_q .append (is_q )
282- batch_theta = tc .array_to_tensor (batch_theta )
283- batch_is_k = tf .constant (batch_is_k )
284- batch_is_q = tf .constant (batch_is_q )
285- vmap_result = Calculation_C_vmap (batch_theta , batch_is_k , batch_is_q , ODE_theta )
289+ vmap_result = Calculation_C_vmap (
290+ c_batch_theta , c_batch_is_k , c_batch_is_q , ODE_theta
291+ )
286292 C = tf .reduce_sum (
287293 tf .cast (tf .tensordot (tf .abs (f ), tf .abs (h ), 0 ), dtype = "float64" )
288294 * tf .reshape (
0 commit comments