-
Notifications
You must be signed in to change notification settings - Fork 0
/
quantum-analytic-descent_example.nb
2579 lines (2558 loc) · 124 KB
/
quantum-analytic-descent_example.nb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
(* Content-type: application/vnd.wolfram.mathematica *)
(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)
(* CreatedBy='Mathematica 12.0' *)
(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[ 158, 7]
NotebookDataLength[ 123794, 2571]
NotebookOptionsPosition[ 122459, 2540]
NotebookOutlinePosition[ 122831, 2556]
CellTagsIndexPosition[ 122788, 2553]
WindowFrame->Normal*)
(* Beginning of Notebook Content *)
Notebook[{
Cell[BoxData[{
RowBox[{
RowBox[{"SetDirectory", "[",
RowBox[{"NotebookDirectory", "[", "]"}], "]"}],
";"}], "\[IndentingNewLine]",
RowBox[{"Import", "[", "\"\<https://qtechtheory.org/QuESTlink.m\>\"",
"]"}], "\n",
RowBox[{
RowBox[{
RowBox[{"CreateDownloadedQuESTEnv", "[", "]"}], ";"}],
"\t"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"Needs", "[", "\"\<CCompilerDriver`\>\"", "]"}], ";"}]}], "Input",
CellLabel->"In[1]:=",ExpressionUUID->"01696a08-0039-45c8-9856-ab0e9deb1a94"],
Cell[BoxData[
RowBox[{
RowBox[{"(*", " ",
RowBox[{
"functions", " ", "for", " ", "obtaining", " ", "the", " ", "fit", " ",
"parameters", " ", "of", " ", "analytic", " ", "descent"}], " ", "*)"}],
"\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{
RowBox[{"getEnergyAt1ShiftedParam", "[",
RowBox[{"shift_", ",", "ind_", ",", "prmsIN_"}], "]"}], ":=",
RowBox[{"Module", "[",
RowBox[{
RowBox[{"{", "prms", "}"}], ",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"prms", "=", "prmsIN"}], ";", "\[IndentingNewLine]",
RowBox[{
RowBox[{"prms", "[",
RowBox[{"[",
RowBox[{"ind", ",", "2"}], "]"}], "]"}], "=",
RowBox[{
RowBox[{"prms", "[",
RowBox[{"[",
RowBox[{"ind", ",", "2"}], "]"}], "]"}], "+", "shift"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"ApplyCircuit", "[",
RowBox[{
RowBox[{"circ", "/.", "prms"}], ",",
RowBox[{"InitZeroState", "@", "\[Psi]"}]}], "]"}], ";",
"\[IndentingNewLine]",
RowBox[{"Return", "@",
RowBox[{"CalcExpecPauliSum", "[",
RowBox[{"\[Psi]", ",", "hamil", ",", "\[Phi]"}], "]"}]}]}]}],
"\[IndentingNewLine]", "]"}]}], ";"}], "\[IndentingNewLine]",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"getEnergyAt2ShiftedParams", "[",
RowBox[{
"shift1_", ",", "shift2_", ",", "ind1_", ",", "ind2_", ",", "prmsIN_"}],
"]"}], ":=",
RowBox[{"Module", "[",
RowBox[{
RowBox[{"{", "prms", "}"}], ",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"prms", "=", "prmsIN"}], ";", "\[IndentingNewLine]",
RowBox[{
RowBox[{"prms", "[",
RowBox[{"[",
RowBox[{"ind1", ",", "2"}], "]"}], "]"}], "=",
RowBox[{
RowBox[{"prms", "[",
RowBox[{"[",
RowBox[{"ind1", ",", "2"}], "]"}], "]"}], "+", "shift1"}]}], ";",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"prms", "[",
RowBox[{"[",
RowBox[{"ind2", ",", "2"}], "]"}], "]"}], "=",
RowBox[{
RowBox[{"prms", "[",
RowBox[{"[",
RowBox[{"ind2", ",", "2"}], "]"}], "]"}], "+", "shift2"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"ApplyCircuit", "[",
RowBox[{
RowBox[{"circ", "/.", "prms"}], ",",
RowBox[{"InitZeroState", "@", "\[Psi]"}]}], "]"}], ";",
"\[IndentingNewLine]",
RowBox[{"Return", "@",
RowBox[{"CalcExpecPauliSum", "[",
RowBox[{"\[Psi]", ",", "hamil", ",", "\[Phi]"}], "]"}]}]}]}],
"\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"getFitParamters", "[",
RowBox[{"params_", ",", "nPrms_"}], "]"}], ":=",
RowBox[{"Module", "[",
RowBox[{
RowBox[{"{",
RowBox[{"a", ",", "b", ",", "c", ",", "d"}], "}"}], ",",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"a", "=",
RowBox[{"{",
RowBox[{"getEnergyAt1ShiftedParam", "[",
RowBox[{"0", ",", "1", ",", "params"}], "]"}], "}"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"b", "=",
RowBox[{"Table", "[",
RowBox[{
RowBox[{"(",
RowBox[{
RowBox[{"getEnergyAt1ShiftedParam", "[",
RowBox[{
RowBox[{"\[Pi]", "/", "2"}], ",", "n", ",", "params"}], "]"}],
"\[IndentingNewLine]", "-",
RowBox[{"getEnergyAt1ShiftedParam", "[",
RowBox[{
RowBox[{
RowBox[{"-", "\[Pi]"}], "/", "2"}], ",", "n", ",", "params"}],
"]"}]}], ")"}], "\[IndentingNewLine]", ",",
RowBox[{"{",
RowBox[{"n", ",", "1", ",", "nPrms"}], "}"}]}], "]"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"c", "=",
RowBox[{"Table", "[",
RowBox[{
RowBox[{"getEnergyAt1ShiftedParam", "[",
RowBox[{"\[Pi]", ",", "n", ",", "params"}], "]"}], ",",
RowBox[{"{",
RowBox[{"n", ",", "1", ",", "nPrms"}], "}"}]}], "]"}]}], ";",
"\[IndentingNewLine]", "\[IndentingNewLine]",
RowBox[{"d", "=",
RowBox[{"Flatten", "@",
RowBox[{"Table", "[",
RowBox[{
RowBox[{"If", "[",
RowBox[{
RowBox[{"k", "<", "l"}], ",", "\[IndentingNewLine]",
RowBox[{"(",
RowBox[{
RowBox[{"getEnergyAt2ShiftedParams", "[",
RowBox[{
RowBox[{
RowBox[{"-", "\[Pi]"}], "/", "2"}], ",",
RowBox[{
RowBox[{"-", "\[Pi]"}], "/", "2"}], ",", "k", ",", "l", ",",
"params"}], "]"}], "\[IndentingNewLine]", "-",
RowBox[{"getEnergyAt2ShiftedParams", "[",
RowBox[{
RowBox[{
RowBox[{"-", "\[Pi]"}], "/", "2"}], ",",
RowBox[{"\[Pi]", "/", "2"}], ",", "k", ",", "l", ",",
"params"}], "]"}], "\[IndentingNewLine]", "-",
RowBox[{"getEnergyAt2ShiftedParams", "[",
RowBox[{
RowBox[{"\[Pi]", "/", "2"}], ",",
RowBox[{
RowBox[{"-", "\[Pi]"}], "/", "2"}], ",", "k", ",", "l", ",",
"params"}], "]"}], "\[IndentingNewLine]", "+",
RowBox[{"getEnergyAt2ShiftedParams", "[",
RowBox[{
RowBox[{"\[Pi]", "/", "2"}], ",",
RowBox[{"\[Pi]", "/", "2"}], ",", "k", ",", "l", ",",
"params"}], "]"}]}], "\[IndentingNewLine]", ")"}], ",",
"0"}], "]"}], "\[IndentingNewLine]", ",",
RowBox[{"{",
RowBox[{"k", ",", "1", ",", "nPrms"}], "}"}], ",",
RowBox[{"{",
RowBox[{"l", ",", "1", ",", "nPrms"}], "}"}]}], "]"}]}]}], ";",
"\[IndentingNewLine]",
RowBox[{"Return", "@",
RowBox[{"Join", "[",
RowBox[{"a", ",", "b", ",", "c", ",", "d"}], "]"}]}], ";"}]}],
"\[IndentingNewLine]", "]"}]}]}]}]], "Input",
CellChangeTimes->{{3.8092611524732995`*^9, 3.8092612063577447`*^9}, {
3.80926128557143*^9, 3.809261588339277*^9}, {3.80926168231205*^9,
3.809261797330886*^9}, {3.8092618278441133`*^9, 3.8092618938796425`*^9}, {
3.809261932499592*^9, 3.8092619326432104`*^9}, {3.8092619668545403`*^9,
3.8092620512688026`*^9}, {3.8092620842367945`*^9, 3.809262135771818*^9}, {
3.8092621714582825`*^9, 3.809262178279789*^9}, {3.809262215368579*^9,
3.8092622631889725`*^9}, 3.8092623153971148`*^9, {3.8092623584289293`*^9,
3.809262380882949*^9}, {3.809263026096117*^9, 3.809263047678056*^9}, {
3.8092631152601647`*^9, 3.8092631706872525`*^9}, {3.8092632014695497`*^9,
3.809263248858664*^9}, {3.809263671890747*^9, 3.8092637017093997`*^9}, {
3.809263953569939*^9, 3.8092639605294743`*^9}, {3.80926436974413*^9,
3.8092643702238445`*^9}, {3.809265810637024*^9, 3.8092658143441677`*^9}, {
3.809266263906126*^9, 3.8092662641125336`*^9}, {3.8092673744824476`*^9,
3.8092674086260824`*^9}, {3.8093261448590136`*^9, 3.8093261489371595`*^9}},
CellLabel->"In[5]:=",ExpressionUUID->"01a923ba-d455-4ca8-bda3-b5fc044bee07"],
Cell[BoxData[
RowBox[{
RowBox[{"(*", " ",
RowBox[{
"Define", " ", "problem", " ", "Hamiltonian", " ", "and", " ", "the", " ",
"ansatz", " ", "circuit"}], " ", "*)"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"numQs", "=", "6"}], ";"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"J", "=", "0.05"}], ";"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"noise", "=", "False"}], ";"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"hamil", "=",
RowBox[{
RowBox[{"0.05`", " ",
SubscriptBox["X", "0"], " ",
SubscriptBox["X", "1"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["X", "1"], " ",
SubscriptBox["X", "2"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["X", "2"], " ",
SubscriptBox["X", "3"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["X", "3"], " ",
SubscriptBox["X", "4"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["X", "0"], " ",
SubscriptBox["X", "5"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["X", "4"], " ",
SubscriptBox["X", "5"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Y", "0"], " ",
SubscriptBox["Y", "1"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Y", "1"], " ",
SubscriptBox["Y", "2"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Y", "2"], " ",
SubscriptBox["Y", "3"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Y", "3"], " ",
SubscriptBox["Y", "4"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Y", "0"], " ",
SubscriptBox["Y", "5"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Y", "4"], " ",
SubscriptBox["Y", "5"]}], "-",
RowBox[{"0.7098301012032957`", " ",
SubscriptBox["Z", "0"]}], "-",
RowBox[{"0.05177915010485945`", " ",
SubscriptBox["Z", "1"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Z", "0"], " ",
SubscriptBox["Z", "1"]}], "+",
RowBox[{"0.9065658350752286`", " ",
SubscriptBox["Z", "2"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Z", "1"], " ",
SubscriptBox["Z", "2"]}], "-",
RowBox[{"0.9265872629174545`", " ",
SubscriptBox["Z", "3"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Z", "2"], " ",
SubscriptBox["Z", "3"]}], "+",
RowBox[{"0.09500423337423802`", " ",
SubscriptBox["Z", "4"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Z", "3"], " ",
SubscriptBox["Z", "4"]}], "-",
RowBox[{"0.4959779888875864`", " ",
SubscriptBox["Z", "5"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Z", "0"], " ",
SubscriptBox["Z", "5"]}], "+",
RowBox[{"0.05`", " ",
SubscriptBox["Z", "4"], " ",
SubscriptBox["Z", "5"]}]}]}], ";"}], "\[IndentingNewLine]",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"circ", "=",
RowBox[{"{",
RowBox[{
RowBox[{
SubscriptBox["Rx", "0"], "[",
SubscriptBox["\[Theta]", "1"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "1"], "[",
SubscriptBox["\[Theta]", "2"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "2"], "[",
SubscriptBox["\[Theta]", "3"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "3"], "[",
SubscriptBox["\[Theta]", "4"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "4"], "[",
SubscriptBox["\[Theta]", "5"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "5"], "[",
SubscriptBox["\[Theta]", "6"], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "7"], ",",
RowBox[{
SubscriptBox["Z", "0"], " ",
SubscriptBox["Z", "1"]}]}], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "8"], ",",
RowBox[{
SubscriptBox["Z", "1"], " ",
SubscriptBox["Z", "2"]}]}], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "9"], ",",
RowBox[{
SubscriptBox["Z", "2"], " ",
SubscriptBox["Z", "3"]}]}], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "10"], ",",
RowBox[{
SubscriptBox["Z", "3"], " ",
SubscriptBox["Z", "4"]}]}], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "11"], ",",
RowBox[{
SubscriptBox["Z", "4"], " ",
SubscriptBox["Z", "5"]}]}], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "12"], ",",
RowBox[{
SubscriptBox["Z", "0"], " ",
SubscriptBox["Z", "5"]}]}], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "0"], "[",
SubscriptBox["\[Theta]", "13"], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "1"], "[",
SubscriptBox["\[Theta]", "14"], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "2"], "[",
SubscriptBox["\[Theta]", "15"], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "3"], "[",
SubscriptBox["\[Theta]", "16"], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "4"], "[",
SubscriptBox["\[Theta]", "17"], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "5"], "[",
SubscriptBox["\[Theta]", "18"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "0"], "[",
SubscriptBox["\[Theta]", "19"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "1"], "[",
SubscriptBox["\[Theta]", "20"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "2"], "[",
SubscriptBox["\[Theta]", "21"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "3"], "[",
SubscriptBox["\[Theta]", "22"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "4"], "[",
SubscriptBox["\[Theta]", "23"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "5"], "[",
SubscriptBox["\[Theta]", "24"], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "25"], ",",
RowBox[{
SubscriptBox["Z", "0"], " ",
SubscriptBox["Z", "1"]}]}], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "26"], ",",
RowBox[{
SubscriptBox["Z", "1"], " ",
SubscriptBox["Z", "2"]}]}], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "27"], ",",
RowBox[{
SubscriptBox["Z", "2"], " ",
SubscriptBox["Z", "3"]}]}], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "28"], ",",
RowBox[{
SubscriptBox["Z", "3"], " ",
SubscriptBox["Z", "4"]}]}], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "29"], ",",
RowBox[{
SubscriptBox["Z", "4"], " ",
SubscriptBox["Z", "5"]}]}], "]"}], ",",
RowBox[{"R", "[",
RowBox[{
SubscriptBox["\[Theta]", "30"], ",",
RowBox[{
SubscriptBox["Z", "0"], " ",
SubscriptBox["Z", "5"]}]}], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "0"], "[",
SubscriptBox["\[Theta]", "31"], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "1"], "[",
SubscriptBox["\[Theta]", "32"], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "2"], "[",
SubscriptBox["\[Theta]", "33"], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "3"], "[",
SubscriptBox["\[Theta]", "34"], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "4"], "[",
SubscriptBox["\[Theta]", "35"], "]"}], ",",
RowBox[{
SubscriptBox["Ry", "5"], "[",
SubscriptBox["\[Theta]", "36"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "0"], "[",
SubscriptBox["\[Theta]", "37"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "1"], "[",
SubscriptBox["\[Theta]", "38"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "2"], "[",
SubscriptBox["\[Theta]", "39"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "3"], "[",
SubscriptBox["\[Theta]", "40"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "4"], "[",
SubscriptBox["\[Theta]", "41"], "]"}], ",",
RowBox[{
SubscriptBox["Rx", "5"], "[",
SubscriptBox["\[Theta]", "42"], "]"}]}], "}"}]}], ";"}],
"\[IndentingNewLine]",
RowBox[{
RowBox[{"nPrms", "=",
RowBox[{"Length", "@", "circ"}]}], ";"}], "\[IndentingNewLine]",
"\[IndentingNewLine]", "\[IndentingNewLine]",
RowBox[{
RowBox[{"\[Psi]", " ", "=", " ",
RowBox[{"CreateQureg", "[", "numQs", "]"}]}], ";"}],
"\[IndentingNewLine]",
RowBox[{
RowBox[{"\[Phi]", " ", "=", " ",
RowBox[{"CreateQureg", "[", "numQs", "]"}]}], ";"}],
"\[IndentingNewLine]",
RowBox[{
RowBox[{"h\[Psi]", "=", " ",
RowBox[{"CreateQureg", "[", "numQs", "]"}]}], ";"}],
"\[IndentingNewLine]",
RowBox[{
RowBox[{"d\[Psi]0", "=", " ",
RowBox[{"CreateQuregs", "[",
RowBox[{"numQs", ",", "nPrms"}], "]"}]}], ";"}]}]}]], "Input",
CellChangeTimes->{
3.8092660537524633`*^9, 3.8092673664335575`*^9, {3.8092674120013227`*^9,
3.8092674248022847`*^9}, {3.8092674609427843`*^9,
3.8092674611811466`*^9}, {3.809267788461073*^9, 3.8092678208078527`*^9}, {
3.8092680251162558`*^9, 3.8092680255570335`*^9}},
CellLabel->"In[8]:=",ExpressionUUID->"c5f911dd-ceed-45e1-afa6-e6ebf4f1dac0"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{
RowBox[{"(*", " ",
RowBox[{
"Compile", " ", "analytic", " ", "descent", " ", "C", " ", "code"}], " ",
"*)"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"LibraryUnload", "[", "aDescLib", "]"}], ";"}],
"\[IndentingNewLine]",
RowBox[{
RowBox[{"SetDirectory", "[",
RowBox[{"NotebookDirectory", "[", "]"}], "]"}], ";"}],
"\[IndentingNewLine]",
RowBox[{"(*", " ",
RowBox[{
"We", " ", "already", " ", "know", " ", "the", " ", "number", " ", "of",
" ", "parameters", " ", "at", " ", "compile", " ", "time"}], " ", "*)"}],
"\[IndentingNewLine]",
RowBox[{
RowBox[{"compileFlag", "=",
RowBox[{"ToString", "@",
RowBox[{"StringForm", "[",
RowBox[{"\"\<MAXDIM=``\>\"", ",", "nPrms"}], "]"}]}]}], ";"}],
"\[IndentingNewLine]",
RowBox[{
RowBox[{"aDescLib", "=",
RowBox[{"CreateLibrary", "[",
RowBox[{
RowBox[{"{", "\"\<analytic-descent.c\>\"", "}"}], ",",
"\"\<aDescLib\>\"", ",",
RowBox[{"\"\<Debug\>\"", "\[Rule]", "False"}], ",",
RowBox[{"\"\<Defines\>\"", "\[Rule]", "compileFlag"}]}], "]"}]}],
";"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"computeGradientLOCAL", "=",
RowBox[{"LibraryFunctionLoad", "[",
RowBox[{"aDescLib", ",", "\"\<compute_gradient\>\"", ",",
RowBox[{"{",
RowBox[{
RowBox[{"{",
RowBox[{"Real", ",", "1"}], "}"}], ",", "Integer"}], "}"}], ",",
RowBox[{"{",
RowBox[{"Real", ",", "1"}], "}"}]}], "]"}]}], ";"}],
"\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"computeGradient", "[",
RowBox[{"dat_", ",", "ths_", ",", "nPrms_"}], "]"}], ":=",
RowBox[{"With", "[", "\[IndentingNewLine]",
RowBox[{
RowBox[{"{",
RowBox[{"temp", "=",
RowBox[{"computeGradientLOCAL", "[",
RowBox[{
RowBox[{"Join", "[",
RowBox[{"dat", ",", "ths"}], "]"}], ",", "nPrms"}], "]"}]}],
"}"}], ",", "\[IndentingNewLine]",
RowBox[{"Return", "[",
RowBox[{"{",
RowBox[{
RowBox[{"temp", "[",
RowBox[{"[", "1", "]"}], "]"}], ",",
RowBox[{"temp", "[",
RowBox[{"[",
RowBox[{"2", ";;"}], "]"}], "]"}]}], "}"}], "]"}]}],
"\[IndentingNewLine]", "]"}]}], ";"}]}]}]], "Input",
CellChangeTimes->{{3.809264058545102*^9, 3.8092641397088194`*^9}, {
3.809264345508189*^9, 3.809264358310953*^9}, {3.809264398992984*^9,
3.8092644060899973`*^9}, {3.8092660340328217`*^9, 3.8092660786960483`*^9}, {
3.8092662780469284`*^9, 3.8092662781715827`*^9}, {3.809266328265603*^9,
3.8092663453222704`*^9}, {3.8092664056973524`*^9, 3.8092664754078026`*^9}, {
3.8092674370885053`*^9, 3.8092674494648094`*^9}, {3.8092679442364473`*^9,
3.8092679630377016`*^9}},
CellLabel->"In[18]:=",ExpressionUUID->"122b25db-54d7-421d-a746-07a678c8c636"],
Cell[BoxData[
TemplateBox[{
"LibraryUnload","strfile",
"\"String or valid File object is expected at position \\!\\(\\*RowBox[{\\\
\"1\\\"}]\\) in \\!\\(\\*RowBox[{\\\"LibraryUnload\\\", \\\"[\\\", \
\\\"aDescLib\\\", \\\"]\\\"}]\\). A valid File has the form File[string].\"",
2,18,1,16980656064485887218,"Local"},
"MessageTemplate"]], "Message", "MSG",
CellChangeTimes->{
3.8092678316658134`*^9, 3.809268002573944*^9, 3.8092681887681103`*^9,
3.8092683263567586`*^9, 3.809326159861714*^9, 3.8370612675916805`*^9,
3.837061358815606*^9, {3.837061417904461*^9, 3.837061448623229*^9}},
CellLabel->
"During evaluation of \
In[18]:=",ExpressionUUID->"846b65aa-67df-420a-b2db-86740d42f68b"]
}, Open ]],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{
RowBox[{"(*", " ",
RowBox[{
"Fix", " ", "a", " ", "random", " ", "reference", " ", "point", " ", "in",
" ", "parameter", " ", "space"}], "*)"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"referenceParams", "=",
RowBox[{"Table", "[",
RowBox[{
RowBox[{
SubscriptBox["\[Theta]", "k"], "\[Rule]",
RowBox[{"RandomReal", "[",
RowBox[{"{",
RowBox[{
RowBox[{"-", "\[Pi]"}], ",", "\[Pi]"}], "}"}], "]"}]}], ",",
RowBox[{"{",
RowBox[{"k", ",", "1", ",", "nPrms"}], "}"}]}], "]"}]}], ";"}],
"\[IndentingNewLine]",
RowBox[{"(*", " ",
RowBox[{
"deterime", " ", "the", " ", "fit", " ", "parameters", " ", "at", " ",
"the", " ", "reference", " ", "point"}], " ", "*)"}],
"\[IndentingNewLine]",
RowBox[{
RowBox[{"analyticDescentFit", "=",
RowBox[{"getFitParamters", "[",
RowBox[{"referenceParams", ",", "nPrms"}], "]"}]}], ";"}],
"\[IndentingNewLine]", "\[IndentingNewLine]",
RowBox[{"(*", " ",
RowBox[{
"compute", " ", "approximation", " ", "errors", " ", "at", " ", "random",
" ", "points", " ", "around", " ", "the", " ", "reference", " ",
"point"}], " ", "*)"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"errors", "=",
RowBox[{"Transpose", "@",
RowBox[{"Table", "[", "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"randomDisplacement", "=",
RowBox[{
RowBox[{"(",
RowBox[{"10", "^",
RowBox[{"RandomReal", "[",
RowBox[{"{",
RowBox[{
RowBox[{"-", "3.5"}], ",", "0"}], "}"}], "]"}]}], ")"}], "*",
RowBox[{"RandomReal", "[",
RowBox[{
RowBox[{"{",
RowBox[{
RowBox[{"-", "1"}], ",", "1"}], "}"}], ",", "nPrms"}], "]"}]}]}
], ";", "\[IndentingNewLine]",
RowBox[{
RowBox[{"{",
RowBox[{"energyAnalytic", ",", "gradientAnalytic"}], "}"}], "=",
RowBox[{"computeGradient", "[",
RowBox[{
"analyticDescentFit", ",", "randomDisplacement", ",", "nPrms"}],
"]"}]}], ";", "\[IndentingNewLine]",
RowBox[{"params", "=", "referenceParams"}], ";",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"params", "[",
RowBox[{"[",
RowBox[{";;", ",", "2"}], "]"}], "]"}], "=",
RowBox[{
RowBox[{"params", "[",
RowBox[{"[",
RowBox[{";;", ",", "2"}], "]"}], "]"}], "+",
"randomDisplacement"}]}], ";", "\[IndentingNewLine]",
"\[IndentingNewLine]",
RowBox[{"CalcQuregDerivs", "[",
RowBox[{"circ", ",", " ",
RowBox[{"InitZeroState", "[", "\[Psi]", "]"}], ",", " ", "params",
",", " ", "d\[Psi]0"}], "]"}], ";", "\[IndentingNewLine]",
RowBox[{"ApplyCircuit", "[",
RowBox[{
RowBox[{"circ", "/.", "params"}], ",",
RowBox[{"InitZeroState", "@", "\[Psi]"}]}], "]"}], ";",
"\[IndentingNewLine]",
RowBox[{"energyExact", "=", " ",
RowBox[{"CalcExpecPauliSum", "[",
RowBox[{"\[Psi]", ",", " ", "hamil", ",", " ", "\[Phi]"}], "]"}]}],
";", "\[IndentingNewLine]",
RowBox[{"ApplyPauliSum", "[",
RowBox[{"\[Psi]", ",", " ", "hamil", ",", " ", "h\[Psi]"}], "]"}],
";", "\[IndentingNewLine]",
RowBox[{"gradientExact", "=", " ",
RowBox[{
RowBox[{"2",
RowBox[{"CalcInnerProducts", "[",
RowBox[{"h\[Psi]", ",", " ", "d\[Psi]0"}], "]"}]}], " ", "//",
" ", "Re"}]}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]",
RowBox[{"similarity", "=",
RowBox[{"1", "-",
RowBox[{
RowBox[{
RowBox[{"(",
RowBox[{"gradientExact", ".", "gradientAnalytic"}], ")"}], "/",
RowBox[{"Norm", "[", "gradientExact", "]"}]}], "/",
RowBox[{"Norm", "[", "gradientAnalytic", "]"}]}]}]}], ";",
"\[IndentingNewLine]",
RowBox[{"dispNorm", "=",
RowBox[{"Max", "@",
RowBox[{"Abs", "@", "randomDisplacement"}]}]}], ";",
"\[IndentingNewLine]",
RowBox[{"{",
RowBox[{
RowBox[{"{",
RowBox[{"dispNorm", ",",
RowBox[{"Abs", "[",
RowBox[{"energyAnalytic", "-", "energyExact"}], "]"}]}], "}"}],
",",
RowBox[{"{",
RowBox[{"dispNorm", ",", "similarity"}], "}"}]}], "}"}]}],
"\[IndentingNewLine]", ",",
RowBox[{"{", "1000", "}"}]}], "]"}]}]}], ";"}], "\[IndentingNewLine]",
"\[IndentingNewLine]",
RowBox[{"ListPlot", "[",
RowBox[{"errors", ",", "\[IndentingNewLine]",
RowBox[{"PlotLegends", "\[Rule]",
RowBox[{"{",
RowBox[{
"\"\<Approximation error in the energy\>\"", ",",
"\"\<Approximation error in the gradient vector\>\""}], "}"}]}], ",",
"\[IndentingNewLine]",
RowBox[{"AxesLabel", "\[Rule]",
RowBox[{"{",
RowBox[{
"\"\<Distance from the reference point\>\"", ",",
"\"\<Approximation error\>\""}], "}"}]}], "\[IndentingNewLine]", ",",
RowBox[{"AxesOrigin", "\[Rule]",
RowBox[{"{",
RowBox[{
RowBox[{"10", "^",
RowBox[{"(",
RowBox[{"-", "4"}], ")"}]}], ",",
RowBox[{"10", "^",
RowBox[{"(",
RowBox[{"-", "15"}], ")"}]}]}], "}"}]}], ",",
RowBox[{"ImageSize", "\[Rule]", "Large"}], ",",
RowBox[{"ScalingFunctions", "\[Rule]",
RowBox[{"{",
RowBox[{"\"\<Log10\>\"", ",", "\"\<Log10\>\""}], "}"}]}]}],
"\[IndentingNewLine]", "]"}], "\[IndentingNewLine]"}]}]], "Input",
CellChangeTimes->{{3.80926436460043*^9, 3.8092643646473045`*^9}, {
3.809264411123799*^9, 3.8092644865908155`*^9}, {3.809264599347051*^9,
3.8092646179982243`*^9}, {3.809266271052127*^9, 3.8092663185809145`*^9},
3.809266378266116*^9, {3.809266492276517*^9, 3.809266506623473*^9}, {
3.8092665544790535`*^9, 3.809266596846255*^9}, {3.809266656187496*^9,
3.809266712617092*^9}, {3.8092667464068336`*^9, 3.80926692264955*^9}, {
3.809266964605471*^9, 3.8092669879119997`*^9}, {3.809267018752823*^9,
3.8092670634893785`*^9}, {3.809267127030285*^9, 3.80926726618968*^9},
3.809267307376047*^9, {3.8092674540742493`*^9, 3.8092675320051155`*^9}, {
3.809267711796563*^9, 3.809267716722789*^9}, {3.809267867106256*^9,
3.809267893016967*^9}, {3.809268299343318*^9, 3.809268318359157*^9}, {
3.8092683772582893`*^9, 3.80926838462122*^9}, {3.809326720682596*^9,
3.8093267218697586`*^9}},
CellLabel->"In[24]:=",ExpressionUUID->"9a46e70a-3c33-4d27-a178-6631328d96aa"],
Cell[BoxData[
TemplateBox[{GraphicsBox[{{}, {{{
Directive[
PointSize[0.004583333333333334],
RGBColor[0.368417, 0.506779, 0.709798],
AbsoluteThickness[1.6]],
PointBox[CompressedData["
1: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