-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcomplex-newtons-method.nb
6883 lines (6829 loc) · 376 KB
/
complex-newtons-method.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 10.2' *)
(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[ 158, 7]
NotebookDataLength[ 377475, 6875]
NotebookOptionsPosition[ 375359, 6799]
NotebookOutlinePosition[ 375703, 6814]
CellTagsIndexPosition[ 375660, 6811]
WindowFrame->Normal*)
(* Beginning of Notebook Content *)
Notebook[{
Cell[CellGroupData[{
Cell["Complex Newton\[CloseCurlyQuote]s Method", "Title",
CellChangeTimes->{{3.776587885602626*^9, 3.7765878892047005`*^9}}],
Cell["Adam Rumpf, 2/23/2016", "Text",
CellChangeTimes->{{3.7765879645996017`*^9, 3.7765879864409084`*^9}}],
Cell[CellGroupData[{
Cell["Introduction", "Section",
CellChangeTimes->{{3.7765879027790375`*^9, 3.776587905025833*^9}}],
Cell[TextData[{
"Newton\[CloseCurlyQuote]s method (a.k.a. the Newton-Raphson method) is an \
iterative root finding process. Given a function ",
Cell[BoxData[
FormBox["f", TraditionalForm]],
FormatType->"TraditionalForm"],
" and an initial guess ",
Cell[BoxData[
FormBox[
SubscriptBox["x", "0"], TraditionalForm]],
FormatType->"TraditionalForm"],
", the process is defined by:"
}], "Text",
CellChangeTimes->{{3.7765873898669224`*^9, 3.776587628077781*^9}}],
Cell[BoxData[
RowBox[{"\t",
FormBox[
RowBox[{
SubscriptBox["x",
RowBox[{"n", "+", "1"}]], "=",
RowBox[{
SubscriptBox["x", "n"], "-",
FractionBox[
RowBox[{"f", "(",
SubscriptBox["x", "n"], ")"}],
RowBox[{
RowBox[{"f", "'"}],
RowBox[{"(",
SubscriptBox["x", "n"], ")"}]}]]}]}],
TraditionalForm]}]], "DisplayFormula",
CellChangeTimes->{{3.7765873898669224`*^9, 3.7765876343990145`*^9}, {
3.7765880045342627`*^9, 3.776588004542261*^9}}],
Cell["\<\
This method is taught in basic Calculus, and it is mostly of interest because \
it is (a) simple to define and understand, (b) easy to visualize, and (c) \
good enough to still be used for scientific computing, despite being over 300 \
years old.\
\>", "Text",
CellChangeTimes->{{3.7765873898669224`*^9, 3.7765876554799743`*^9}, {
3.7765880294968214`*^9, 3.776588034544223*^9}}],
Cell["\<\
Many students will be surprised to know that this method does not just work \
for real-valued functions: it works for complex-valued functions, as well. \
Its behavior in the complex plane can be a bit more complicated to describe, \
and depending on the initial guess, the method may not necessarily converget \
to the nearest root.\
\>", "Text",
CellChangeTimes->{{3.7765876439551272`*^9, 3.7765877526697845`*^9}}],
Cell[TextData[{
"This Notebook defines a function called ",
StyleBox["newtonplot[]", "Code"],
", which accepts (in order) a pure function, a bound ",
Cell[BoxData[
FormBox["b", TraditionalForm]],
FormatType->"TraditionalForm"],
" for the complex domain ",
Cell[BoxData[
FormBox[
RowBox[{
RowBox[{"[",
RowBox[{
RowBox[{"-", "b"}], ",", "b"}], "]"}], "\[Times]",
RowBox[{"[",
RowBox[{
RowBox[{"-", "b"}], ",", "b"}], "]"}]}], TraditionalForm]],
FormatType->"TraditionalForm"],
", the number of nodes ",
Cell[BoxData[
FormBox["n", TraditionalForm]],
FormatType->"TraditionalForm"],
" into which each axis will be divided, an iteration cutoff, and an error \
tolerance. The function will divide the square domain into an ",
Cell[BoxData[
FormBox[
RowBox[{"n", "\[Times]", "n"}], TraditionalForm]],
FormatType->"TraditionalForm"],
" grid and conduct Newton\[CloseCurlyQuote]s method using every grid node as \
an initial guess. If the method comes within the error tolerance of one of \
the true roots, then the method terminates and we record which root was \
reached. If no root is reached within the iteration cutoff, then the process \
is deemed to have diverged."
}], "Text",
CellChangeTimes->{{3.7765877574128275`*^9, 3.77658778055941*^9}, {
3.776587824735916*^9, 3.776587850473181*^9}, {3.77658806101051*^9,
3.776588456805036*^9}}],
Cell[TextData[{
"The output is a coloring of the complex domain showing which initial \
guesses converge to which roots. A larger value of ",
Cell[BoxData[
FormBox["n", TraditionalForm]],
FormatType->"TraditionalForm"],
" will lead to a sharper picture but a longer computation time."
}], "Text",
CellChangeTimes->{{3.776588459669097*^9, 3.7765885063788424`*^9}}]
}, Open ]],
Cell[CellGroupData[{
Cell["Code", "Section",
CellChangeTimes->{{3.7765879208719325`*^9, 3.776587921823886*^9}}],
Cell[CellGroupData[{
Cell["Initialization", "Subsection",
CellChangeTimes->{{3.776588544504778*^9, 3.7765885464741445`*^9}}],
Cell[BoxData[
RowBox[{
RowBox[{"(*", " ",
RowBox[{
RowBox[{"roots", "[", "f", "]"}], " ", "returns", " ", "a", " ", "list",
" ", "of", " ", "the", " ", "unique", " ", "roots", " ", "of", " ",
"function", " ",
RowBox[{"f", "."}]}], " ", "*)"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"roots", "[", "f_", "]"}], ":=",
RowBox[{"Module", "[",
RowBox[{
RowBox[{"{", "r", "}"}], ",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"r", "=",
RowBox[{"DeleteDuplicates", "[",
RowBox[{"x", "/.",
RowBox[{"Solve", "[",
RowBox[{
RowBox[{
RowBox[{"f", "[", "x", "]"}], "\[Equal]", "0"}], ",", "x"}],
"]"}]}], "]"}]}], ";", "\[IndentingNewLine]",
RowBox[{"Table", "[",
RowBox[{
RowBox[{
RowBox[{"Re", "[",
RowBox[{"r", "[",
RowBox[{"[", "i", "]"}], "]"}], "]"}], "+",
RowBox[{"I", " ",
RowBox[{"Im", "[",
RowBox[{"r", "[",
RowBox[{"[", "i", "]"}], "]"}], "]"}]}]}], ",",
RowBox[{"{",
RowBox[{"i", ",", "1", ",",
RowBox[{"Length", "[", "r", "]"}]}], "}"}]}], "]"}]}]}],
"\[IndentingNewLine]", "]"}]}], ";"}]}]], "Input",
CellChangeTimes->{{3.65954843910914*^9, 3.65954848479572*^9}, {
3.6595485169148393`*^9, 3.6595485598267083`*^9}, {3.659555212555744*^9,
3.6595552904228373`*^9}}],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"roots", "[",
RowBox[{"Function", "[",
RowBox[{"x", ",",
RowBox[{
SuperscriptBox["x", "3"], "-", "1"}]}], "]"}], "]"}]], "Input",
CellChangeTimes->{{3.6595485653603544`*^9, 3.65954859823431*^9}, {
3.6595552298253365`*^9, 3.659555232700883*^9}}],
Cell[BoxData[
RowBox[{"{",
RowBox[{"1", ",",
RowBox[{
RowBox[{"-",
FractionBox["1", "2"]}], "-",
FractionBox[
RowBox[{"\[ImaginaryI]", " ",
SqrtBox["3"]}], "2"]}], ",",
RowBox[{
RowBox[{"-",
FractionBox["1", "2"]}], "+",
FractionBox[
RowBox[{"\[ImaginaryI]", " ",
SqrtBox["3"]}], "2"]}]}], "}"}]], "Output",
CellChangeTimes->{{3.6595485756723404`*^9, 3.659548598922804*^9},
3.6595552340602794`*^9, 3.6595552931736403`*^9}]
}, Open ]],
Cell[BoxData[
RowBox[{
RowBox[{"(*", " ",
RowBox[{
RowBox[{
RowBox[{"newtonplot", "[",
RowBox[{"f", ",", "lim", ",", "n", ",", "cut", ",", "eps"}], "]"}], " ",
"creates", " ", "a", " ", "plot", " ", "of", " ", "the", " ",
RowBox[{"region", " ", "[",
RowBox[{
RowBox[{"-", "lim"}], ",", "lim"}], "]"}],
RowBox[{"x", "[",
RowBox[{
RowBox[{"-", "lim"}], ",", "lim"}], "]"}], " ", "of", " ", "the", " ",
"complex", " ", "plane"}], ",", " ",
RowBox[{"divided", " ", "into", " ", "an", " ", "nxn", " ",
RowBox[{"grid", ".", " ", "Each"}], " ", "grid", " ", "point", " ",
"is", " ", "used", " ", "as", " ", "the", " ", "initial", " ", "guess",
" ", "for", " ", "complex", " ",
RowBox[{"Newton", "'"}], "s", " ", "method", " ", "on", " ", "function",
" ",
RowBox[{"f", ".", " ", "Each"}], " ", "root", " ", "is", " ",
"assigned", " ", "a", " ", "color"}], ",", " ",
RowBox[{"and", " ", "after", " ", "cut", " ", "iterations"}], ",", " ",
RowBox[{
"if", " ", "we", " ", "are", " ", "within", " ", "distance", " ", "eps",
" ", "of", " ", "a", " ", "root"}], ",", " ",
RowBox[{"we", " ", "assign", " ", "that", " ", "point", " ", "that", " ",
RowBox[{"root", "'"}], "s", " ",
RowBox[{"color", ".", " ", "If"}], " ", "if", " ", "is", " ", "not",
" ", "that", " ", "close", " ", "to", " ", "any", " ", "root"}], ",",
" ",
RowBox[{"we", " ", "color", " ", "it", " ",
RowBox[{"black", "."}]}]}], " ", "*)"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"newtonplot", "[",
RowBox[{"f_", ",", "lim_", ",", "n_", ",", "cut_", ",", "eps_"}], "]"}],
":=",
RowBox[{"Module", "[",
RowBox[{
RowBox[{"{",
RowBox[{
"fp", ",", "newton", ",", "rootlist", ",", "array", ",", "grid", ",",
"dx", ",", "i", ",", "j", ",", "iter", ",", "x", ",", "numroots", ",",
"rootnum"}], "}"}], ",", "\[IndentingNewLine]",
RowBox[{"(*", " ",
RowBox[{
RowBox[{"fp", " ", "=", " ",
RowBox[{
RowBox[{
"derivative", " ", "of", " ", "f", "\[IndentingNewLine]",
"newton"}], " ", "=", " ",
RowBox[{
RowBox[{
RowBox[{"Newton", "'"}], "s", " ", "method", " ", "iteration",
" ", "function", "\[IndentingNewLine]", "rootlist"}], " ", "=",
" ",
RowBox[{
RowBox[{
"list", " ", "of", " ", "all", " ", "unique", " ", "roots", " ",
"of", " ", "f", "\[IndentingNewLine]", "array"}], " ", "=", " ",
RowBox[{
RowBox[{
"array", " ", "of", " ", "values", " ", "corresponding", " ",
"to", " ", "each", " ", "grid", " ", "point", " ",
RowBox[{"(",
RowBox[{
RowBox[{
RowBox[{"-", "1"}], " ", "means", " ", "no", " ", "root"}],
",", " ",
RowBox[{
"positive", " ", "integer", " ", "corresponds", " ", "to",
" ", "one", " ", "of", " ", "the", " ", "roots", " ", "in",
" ", "the", " ", "list"}]}], ")"}], "\[IndentingNewLine]",
"grid"}], " ", "=", " ",
RowBox[{
RowBox[{
"array", " ", "of", " ", "actual", " ", "coordinates", " ",
"of", " ", "grid", " ", "points", "\[IndentingNewLine]",
"dx"}], " ", "=", " ",
RowBox[{
"space", " ", "between", " ", "grid", " ", "points",
"\[IndentingNewLine]", "i"}]}]}]}]}]}]}], ",",
RowBox[{"j", " ", "=", " ",
RowBox[{
RowBox[{
"coordinates", " ", "of", " ", "point", " ", "currently", " ",
"being", " ", "examined", "\[IndentingNewLine]", "iter"}], " ",
"=", " ",
RowBox[{
RowBox[{"current", " ", "iteration", " ", "of", " ",
RowBox[{"Newton", "'"}], "s", " ", "Method",
"\[IndentingNewLine]", "x"}], " ", "=", " ",
RowBox[{
RowBox[{"current", " ", "guess", " ", "in", " ",
RowBox[{"Newton", "'"}], "s", " ", "Method",
"\[IndentingNewLine]", "numroots"}], " ", "=", " ",
RowBox[{
RowBox[{
"number", " ", "of", " ", "roots", "\[IndentingNewLine]",
"rootnum"}], " ", "=", " ",
RowBox[{
"index", " ", "of", " ", "root", " ", "under", " ",
"evaluation"}]}]}]}]}]}]}], " ", "*)"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"fp", "=",
RowBox[{"Function", "[",
RowBox[{"x", ",",
RowBox[{
RowBox[{"f", "'"}], "[", "x", "]"}]}], "]"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"newton", "=",
RowBox[{"Function", "[",
RowBox[{"x", ",",
RowBox[{"N", "[",
RowBox[{"x", "-",
FractionBox[
RowBox[{"f", "[", "x", "]"}],
RowBox[{"fp", "[", "x", "]"}]]}], "]"}]}], "]"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"rootlist", "=",
RowBox[{"roots", "[", "f", "]"}]}], ";", "\[IndentingNewLine]",
RowBox[{"numroots", "=",
RowBox[{"Length", "[", "rootlist", "]"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"dx", "=",
FractionBox[
RowBox[{"2", "lim"}],
RowBox[{"n", "-", "1"}]]}], ";", "\[IndentingNewLine]",
RowBox[{"array", "=",
RowBox[{"ConstantArray", "[",
RowBox[{
RowBox[{"-", "1"}], ",",
RowBox[{"{",
RowBox[{"n", ",", "n"}], "}"}]}], "]"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"grid", "=",
RowBox[{"Table", "[",
RowBox[{
RowBox[{"N", "[",
RowBox[{
RowBox[{"(",
RowBox[{
RowBox[{"-", "lim"}], "+",
RowBox[{"l", " ", "dx"}]}], ")"}], "+",
RowBox[{"I",
RowBox[{"(",
RowBox[{
RowBox[{"-", "lim"}], "+",
RowBox[{"k", " ", "dx"}]}], ")"}]}]}], "]"}], ",",
RowBox[{"{",
RowBox[{"k", ",",
RowBox[{"n", "-", "1"}], ",", "0", ",",
RowBox[{"-", "1"}]}], "}"}], ",",
RowBox[{"{",
RowBox[{"l", ",", "0", ",",
RowBox[{"n", "-", "1"}]}], "}"}]}], "]"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"For", "[",
RowBox[{
RowBox[{"i", "=", "1"}], ",",
RowBox[{"i", "\[LessEqual]", "n"}], ",",
RowBox[{"i", "++"}], ",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"For", "[",
RowBox[{
RowBox[{"j", "=", "1"}], ",",
RowBox[{"j", "\[LessEqual]", "n"}], ",",
RowBox[{"j", "++"}], ",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"x", "=",
RowBox[{"grid", "[",
RowBox[{"[",
RowBox[{"i", ",", "j"}], "]"}], "]"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"For", "[",
RowBox[{
RowBox[{"iter", "=", "1"}], ",",
RowBox[{"iter", "\[LessEqual]", "cut"}], ",",
RowBox[{"iter", "++"}], ",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"If", "[",
RowBox[{
RowBox[{
RowBox[{
RowBox[{"fp", "[", "x", "]"}], "\[NotEqual]", "0"}], "&&",
RowBox[{
RowBox[{"Abs", "[", "x", "]"}], "\[NotEqual]",
"Infinity"}]}], ",", "\[IndentingNewLine]",
RowBox[{"x", "=",
RowBox[{"newton", "[", "x", "]"}]}], ",",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"x", "=", "ComplexInfinity"}], ";"}]}],
"\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]",
"]"}], ";", "\[IndentingNewLine]",
RowBox[{"For", "[",
RowBox[{
RowBox[{"rootnum", "=", "1"}], ",",
RowBox[{"rootnum", "\[LessEqual]", "numroots"}], ",",
RowBox[{"rootnum", "++"}], ",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"If", "[",
RowBox[{
RowBox[{
RowBox[{"Abs", "[",
RowBox[{"x", "-",
RowBox[{"rootlist", "[",
RowBox[{"[", "rootnum", "]"}], "]"}]}], "]"}], "<",
"eps"}], ",", "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"array", "[",
RowBox[{"[",
RowBox[{"i", ",", "j"}], "]"}], "]"}], "=", "rootnum"}],
";"}]}], "\[IndentingNewLine]", "]"}], ";"}]}],
"\[IndentingNewLine]", "]"}], ";"}]}], "\[IndentingNewLine]",
"]"}], ";"}]}], "\[IndentingNewLine]", "]"}], ";",
"\[IndentingNewLine]",
RowBox[{"ArrayPlot", "[",
RowBox[{"array", ",",
RowBox[{"ColorRules", "\[Rule]",
RowBox[{"Join", "[",
RowBox[{
RowBox[{"{",
RowBox[{
RowBox[{"-", "1"}], "\[Rule]", "Black"}], "}"}], ",",
RowBox[{"Table", "[",
RowBox[{
RowBox[{"k", "\[Rule]",
RowBox[{"Hue", "[",
FractionBox[
RowBox[{"k", "-", "1"}], "numroots"], "]"}]}], ",",
RowBox[{"{",
RowBox[{"k", ",", "1", ",", "numroots"}], "}"}]}], "]"}]}],
"]"}]}], ",",
RowBox[{"PlotLegends", "\[Rule]",
RowBox[{"Join", "[",
RowBox[{
RowBox[{"{", "\"\<Divergent\>\"", "}"}], ",",
RowBox[{"Table", "[",
RowBox[{
RowBox[{"rootlist", "[",
RowBox[{"[", "k", "]"}], "]"}], ",",
RowBox[{"{",
RowBox[{"k", ",", "1", ",", "numroots"}], "}"}]}], "]"}]}],
"]"}]}]}], "]"}]}]}], "\[IndentingNewLine]", "]"}]}],
";"}]}]], "Input",
CellChangeTimes->CompressedData["
1:eJwdy1soQwEAh/E1ymWLPKFGKCWXRwvNtOzFRtgoZGK1J2luSZaatszDUHNt
bVkSm2ZIok0bmqUkS2uF5HYyucxtxchy/ufh6/f0ZUrlIhmdRqNlkkF1vnk5
lv/Eiw0vrsOi/rATVmqm/PDWMXwFudmqa3jCl4bhQMVEUhxp71pqCnR7Fbkw
wShlw4+ekmK4c+7gQnvQJICjx9diyGQPNUHv07QMCoOSdhh95uqC96xDBSSI
DCVcavzTwN8Wtw52Whx6+Py1+RpPak2MhGBhY1UpgzSwusWDVkZqDcyx+EQw
8ZLeADnPb5Q2TXMbZBpj2iGXJuyHvoUsJfQY5tRwOyo0BmuJoymo4mgN1P+j
NcH32W4LHHlxrUBnh5uyYJizAc2D9j047x7zwVLb2wWc1OfdwLqrwB3cnSEe
oMC6GYT+DPYnZCRNhmB9YP8bJpzKY5ikunF1GhQ9/lB6B8xlkFA4KFvTD8ph
xBbhw0pvigCyJHeUyfF91ZDu8YjhP6o68js=
"]]
}, Closed]],
Cell[CellGroupData[{
Cell["Demonstration", "Subsection",
CellChangeTimes->{{3.776588557645573*^9, 3.776588560857557*^9}}],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"newtonplot", "[",
RowBox[{
RowBox[{"Function", "[",
RowBox[{"x", ",",
RowBox[{
SuperscriptBox["x", "3"], "-", "1"}]}], "]"}], ",", "2", ",", "101",
",", "20", ",", "0.05"}], "]"}]], "Input",
CellChangeTimes->{{3.6595549152958674`*^9, 3.659554978383319*^9},
3.659555332709116*^9, {3.659555509656427*^9, 3.6595555100001802`*^9}}],
Cell[BoxData[
TemplateBox[{GraphicsBox[
RasterBox[CompressedData["
1:eJzt1tGN5DYWBdABNhJH4hw2BAP+duoOwVhg+6PLrSIpkXqXqiNggOlDie+S
VSW+3/74679//ufXr19//v/f//7//fr7938R55xzHuOt62ydVr3qnGef45le
XZ9zzvln+Wi/kpK75UdXWk5e69X1Oeecf6a/jqflG+2vWs/39p/82V5dn3PO
+TM9JcdZP/v8p+8bf+/V9TnnnD/bj8bv7jdWzfvlq8/ZtM+Vn/Pq+pxzzp/t
r+PV59rsenf3ea/jaZ83f+/V9TnnnPMrXl3/1Xebl9/r1fU555w/01vnTlWu
1S4Hf+fV9TnnnO/tZ8+d1bmq/On1+DWvrs855/wZ/jqu71rjvXVT9oNn1eec
c/5sr65/l89e/9W6PNOr63POOd/bz54vq3Pd7XftQ+/+80yvrs855/zZXl2/
2lv70ns/f4ZX1+ecc763j/YVT/HZ9/HP8Or6nHPOn+3V9c/6rPVUr4NneXV9
zjnnz/bq+qv6o9fxlHXwbK+uzznn/Nl+d/2zOXrn4fyKV9fnnHP+bF9dp/U3
50leXZ9zzvk9fnW+s/Ouqsv5jl5dn3PO+Tl/HU/Nl5KH8wSvrs855/xnH31v
V58jV3Ol7DvnK726Puec8/feur6eu6ve6Lyr+k/Od/Tq+pxzzs/50dXbt1yt
X903pX0enPd4dX3OOec/e3W/NMt3m5fzlV5dn3PO+c+u76qZl/OVXl2fc875
Oa+uf3ff9Dqesg7OR7y6Puec85+99d6uytXrZ8+do/GrfRvnCV5dn3PO+Xuv
rj+777rab3G+s1fX55xz/t5bV0re2fdx/kSvrs855/y9t660vF9eXZ/zRK+u
zznn/L1X13/11t+c831+z5xzzu+pk7ZOzj/Bq+tzznmKt96Tvc/1ztOat3dc
H8X5Pl5dn3POU/qrND+60nJyzvu9uj7nnKe8/6pzHN33tH6S80/26vqcc57y
/lvVR7XqtvxqrrR95/yTvbo+55yv8t6+qPXc2XlmeXqfyTnv9+r6nHOe1nel
+W7zcs71XZzz5/vR+K7vv9m5e+fnnK/z6vqcc37VW++3qlxXfXV/Wb0+zj/R
q+tzzvms99anveeurjdlHZx/klfX55zzWX1GVa5VPqvv5Jzn+Oz7OOf8rvdW
Wq67+019F+f7+dG49yDnPM1b75+qXFWu7+J8Px99vneeVfOn7V/K59Z6Li3/
7v467nt7j+/ed41+T6rzcs7n+9nnV78Pz55jZ+tV+6z5Zu/j1c8r3c9+j+7e
59GcT+0Dd/ndz/r9V6+Dcz7fj+7b5f0wmueuXFV9V69Xn1+fss+9f48+f3ae
o/G0/Try6u/tVa+uzzmv96PxtJyr+8y761efV/Z/rqd9z+/ar6Pxp/ZdKb8j
zjnf3Vv3pZz7KeffbN+tzq77XL2/R+N3911p+8Y55/y9r34ubb1pPvs5fVSW
9463nktbF+ec87l+dKXlfKofXWk5+Tk/utJycs45n+tnn59936f62edb832N
p63303zWfWnr4pxzPmf8rn5q9PxJ2+fZfdSor/q+pO1n6ud49fc16/eZtm+c
88/xo/vScu7WXx15yrpTcoyOp+5/2vd8lz5q1Ku+N6N5OOd89H21S582mmdV
jt3O7bTz6y6v/p6e/X6u7pd2+b2kfZ9GPSUH5zznPDj73Or5e++fVX/X9/Hr
+KxzebTuLn52PaPzHM23qk/epY8a9V2+f7P65JT1cM7r+q7Vfc9Tz4tVPnpf
Wv5d3fe2xnf/fuu7OOdH9606/znn/FP7rtn+Op6Wj3N+fPX2U6tycM55r6fk
uMt7n0vLzTlvX2n5OOe81VfcneMuH31vp+TmnOu7OOfP8dH+KyX3bD8av7qP
nPN1npKDc87P+mhfsouPvrdn3c85X+cpOTjnfHWf0nt/is9+b++2fs6f6Ck5
OOd8to/2Yam+qk7aOjn/BE/JwTnnKX3XrHnS+q7W35xzfRfnnK/yVX1I67q7
70rZb855Tg7OOX9K3zW7r+qdN2VfOef6Ls45360/ObrScnLO+z0lB+ecV3vr
Pdk7PtpHter0rqd6/zjnbU/JwTnn/GffbV7Oub6Lc8539ZQcR+Np+ThP9pQc
nHPO33tKjl37Rc4TPCUH55zz956So5Wv9Vxabs7v9JQcnHPOf/aUHKM+6zxK
WQ/nMzwlB+ec8+/eem9X52v52XOnd90p6+R8xFNycM45H/OUHGd99LmnrZ9/
pqfk4Jxz/t1n9SvVvqpO2jo57/GUHJxzzr+7vuu9p62T8x5PycE55/ycH10p
/duqOmmfA+c9npKDc875e2/dt7qPuzqf/orznBycc86/++h7u/ocudp3Ve83
53d4Sg7OOedj3vq72o+utJyc3+kpOTjnnK/1Vc9X1eV8R0/JwTnn/Jl+1zn2
NZ6ybs57rrR8nHPO9/aUeqPPpewff5an5OCcc/5MT8nR8tHndl0nr/WUHJxz
zp/pKTlGfda5mbIenuEpOTjnnO/prfOlOt8q730uLTev9ZQcnHPOn+kpOap8
tG9Lyc3XeEoOzjnne/rZ86U692y/ax9ex1PWz/s8JQfnnPNnekqO1T77nLW/
z/SUHJxzzvf20T4kJfdsX12nt27avvCsHJxzzvf0tL6k2u+un7Z+/t5TcnDO
OX+Wp/Qld3t1ff1Ytqfk4Jxzzs94So7VddLWyc95Sg7OOefP9Lv7pNE8q+vP
rpPed/L3npKDc875M711/nyN33XeVa3zap2Uz5Nf85QcnHPOn+XV9a/63c89
Zd/4e0/JwTnn/LO89Xeqt67efixtXfweT8nBOef8M3y0n6nO2+tHV1pOXusp
OTjnnPMenz3vqjrVz/M0/wd/O/nA
"], {{0, 0}, {101, 101}}, {0, 1}], Frame -> Automatic,
FrameLabel -> {None, None}, FrameTicks -> {{None, None}, {None, None}},
GridLinesStyle -> Directive[
GrayLevel[0.5, 0.4]],
Method -> {
"DefaultBoundaryStyle" -> Automatic, "DefaultPlotStyle" -> Automatic}],
FormBox[
FormBox[
TemplateBox[{"\"Divergent\"", "1",
RowBox[{
RowBox[{"-",
RowBox[{
FractionBox["1", "2"]}]}], "-",
FractionBox[
RowBox[{"\[ImaginaryI]", " ",
SqrtBox["3"]}], "2"]}],
RowBox[{
RowBox[{"-",
RowBox[{
FractionBox["1", "2"]}]}], "+",
FractionBox[
RowBox[{"\[ImaginaryI]", " ",
SqrtBox["3"]}], "2"]}]}, "SwatchLegend",
DisplayFunction -> (FormBox[
StyleBox[
StyleBox[
PaneBox[
TagBox[
GridBox[{{
TagBox[
GridBox[{{
GraphicsBox[{
Directive[
EdgeForm[
Directive[
Opacity[0.3],
GrayLevel[0]]],
PointSize[0.5],
AbsoluteThickness[1.6],
RGBColor[0., 0., 0.]],
RectangleBox[{0, 0}, {10, 10}, "RoundingRadius" -> 0]},
AspectRatio -> Full, ImageSize -> {10, 10},
PlotRangePadding -> None, ImagePadding -> Automatic,
BaselinePosition -> (Scaled[0.1] -> Baseline)], #}, {
GraphicsBox[{
Directive[
EdgeForm[
Directive[
Opacity[0.3],
GrayLevel[0]]],
PointSize[0.5],
AbsoluteThickness[1.6],
RGBColor[1., 0., 0.]],
RectangleBox[{0, 0}, {10, 10}, "RoundingRadius" -> 0]},
AspectRatio -> Full, ImageSize -> {10, 10},
PlotRangePadding -> None, ImagePadding -> Automatic,
BaselinePosition -> (Scaled[0.1] -> Baseline)], #2}, {
GraphicsBox[{
Directive[
EdgeForm[
Directive[
Opacity[0.3],
GrayLevel[0]]],
PointSize[0.5],
AbsoluteThickness[1.6],
RGBColor[0., 1., 0.]],
RectangleBox[{0, 0}, {10, 10}, "RoundingRadius" -> 0]},
AspectRatio -> Full, ImageSize -> {10, 10},
PlotRangePadding -> None, ImagePadding -> Automatic,
BaselinePosition -> (Scaled[0.1] -> Baseline)], #3}, {
GraphicsBox[{
Directive[
EdgeForm[
Directive[
Opacity[0.3],
GrayLevel[0]]],
PointSize[0.5],
AbsoluteThickness[1.6],
RGBColor[0., 0., 1.]],
RectangleBox[{0, 0}, {10, 10}, "RoundingRadius" -> 0]},
AspectRatio -> Full, ImageSize -> {10, 10},
PlotRangePadding -> None, ImagePadding -> Automatic,
BaselinePosition -> (Scaled[0.1] -> Baseline)], #4}},
GridBoxAlignment -> {
"Columns" -> {Center, Left}, "Rows" -> {{Baseline}}},
AutoDelete -> False,
GridBoxDividers -> {
"Columns" -> {{False}}, "Rows" -> {{False}}},
GridBoxItemSize -> {"Columns" -> {{All}}, "Rows" -> {{All}}},
GridBoxSpacings -> {
"Columns" -> {{0.5}}, "Rows" -> {{0.5}}}], "Grid"]}},
GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}},
AutoDelete -> False,
GridBoxItemSize -> {
"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}},
GridBoxSpacings -> {"Columns" -> {{1}}, "Rows" -> {{0}}}],
"Grid"], Alignment -> Left, AppearanceElements -> None,
ImageMargins -> {{5, 5}, {5, 5}}, ImageSizeAction ->
"ResizeToFit"], LineIndent -> 0, StripOnInput -> False], {
FontFamily -> "Arial"}, Background -> Automatic, StripOnInput ->
False], TraditionalForm]& ),
InterpretationFunction :> (RowBox[{"SwatchLegend", "[",
RowBox[{
RowBox[{"{",
RowBox[{
RowBox[{"Directive", "[",
InterpretationBox[
ButtonBox[
TooltipBox[
GraphicsBox[{{
GrayLevel[0],
RectangleBox[{0, 0}]}, {
GrayLevel[0],
RectangleBox[{1, -1}]}, {
RGBColor[0., 0., 0.],
RectangleBox[{0, -1}, {2, 1}]}}, AspectRatio -> 1, Frame ->
True, FrameStyle -> RGBColor[0., 0., 0.], FrameTicks ->
None, PlotRangePadding -> None, ImageSize ->
Dynamic[{
Automatic, 1.35 CurrentValue["FontCapHeight"]/
AbsoluteCurrentValue[Magnification]}]],
"RGBColor[0., 0., 0.]"], Appearance -> None,
BaseStyle -> {}, BaselinePosition -> Baseline,
DefaultBaseStyle -> {}, ButtonFunction :>
With[{Typeset`box$ = EvaluationBox[]},
If[
Not[
AbsoluteCurrentValue["Deployed"]],
SelectionMove[Typeset`box$, All, Expression];
FrontEnd`Private`$ColorSelectorInitialAlpha = 1;
FrontEnd`Private`$ColorSelectorInitialColor =
RGBColor[0., 0., 0.];
FrontEnd`Private`$ColorSelectorUseMakeBoxes = True;
MathLink`CallFrontEnd[
FrontEnd`AttachCell[Typeset`box$,
FrontEndResource["RGBColorValueSelector"], {
0, {Left, Bottom}}, {Left, Top},
"ClosingActions" -> {
"SelectionDeparture", "ParentChanged",
"EvaluatorQuit"}]]]], BaseStyle -> Inherited, Evaluator ->
Automatic, Method -> "Preemptive"],
RGBColor[0., 0., 0.], Editable -> False, Selectable ->
False], "]"}], ",",
RowBox[{"Directive", "[",
InterpretationBox[
ButtonBox[
TooltipBox[
GraphicsBox[{{
GrayLevel[0],
RectangleBox[{0, 0}]}, {
GrayLevel[0],
RectangleBox[{1, -1}]}, {
RGBColor[1., 0., 0.],
RectangleBox[{0, -1}, {2, 1}]}}, AspectRatio -> 1, Frame ->
True, FrameStyle -> RGBColor[0.6666666666666667, 0., 0.],
FrameTicks -> None, PlotRangePadding -> None, ImageSize ->
Dynamic[{
Automatic, 1.35 CurrentValue["FontCapHeight"]/
AbsoluteCurrentValue[Magnification]}]],
"RGBColor[1., 0., 0.]"], Appearance -> None,
BaseStyle -> {}, BaselinePosition -> Baseline,
DefaultBaseStyle -> {}, ButtonFunction :>
With[{Typeset`box$ = EvaluationBox[]},
If[
Not[
AbsoluteCurrentValue["Deployed"]],
SelectionMove[Typeset`box$, All, Expression];
FrontEnd`Private`$ColorSelectorInitialAlpha = 1;
FrontEnd`Private`$ColorSelectorInitialColor =
RGBColor[1., 0., 0.];
FrontEnd`Private`$ColorSelectorUseMakeBoxes = True;
MathLink`CallFrontEnd[
FrontEnd`AttachCell[Typeset`box$,
FrontEndResource["RGBColorValueSelector"], {
0, {Left, Bottom}}, {Left, Top},
"ClosingActions" -> {
"SelectionDeparture", "ParentChanged",
"EvaluatorQuit"}]]]], BaseStyle -> Inherited, Evaluator ->
Automatic, Method -> "Preemptive"],
RGBColor[1., 0., 0.], Editable -> False, Selectable ->
False], "]"}], ",",
RowBox[{"Directive", "[",
InterpretationBox[
ButtonBox[
TooltipBox[
GraphicsBox[{{
GrayLevel[0],
RectangleBox[{0, 0}]}, {
GrayLevel[0],
RectangleBox[{1, -1}]}, {
RGBColor[0., 1., 0.],
RectangleBox[{0, -1}, {2, 1}]}}, AspectRatio -> 1, Frame ->
True, FrameStyle -> RGBColor[0., 0.6666666666666667, 0.],
FrameTicks -> None, PlotRangePadding -> None, ImageSize ->
Dynamic[{
Automatic, 1.35 CurrentValue["FontCapHeight"]/
AbsoluteCurrentValue[Magnification]}]],
"RGBColor[0., 1., 0.]"], Appearance -> None,
BaseStyle -> {}, BaselinePosition -> Baseline,
DefaultBaseStyle -> {}, ButtonFunction :>
With[{Typeset`box$ = EvaluationBox[]},
If[
Not[
AbsoluteCurrentValue["Deployed"]],
SelectionMove[Typeset`box$, All, Expression];
FrontEnd`Private`$ColorSelectorInitialAlpha = 1;
FrontEnd`Private`$ColorSelectorInitialColor =
RGBColor[0., 1., 0.];
FrontEnd`Private`$ColorSelectorUseMakeBoxes = True;
MathLink`CallFrontEnd[
FrontEnd`AttachCell[Typeset`box$,
FrontEndResource["RGBColorValueSelector"], {
0, {Left, Bottom}}, {Left, Top},
"ClosingActions" -> {
"SelectionDeparture", "ParentChanged",
"EvaluatorQuit"}]]]], BaseStyle -> Inherited, Evaluator ->
Automatic, Method -> "Preemptive"],
RGBColor[0., 1., 0.], Editable -> False, Selectable ->
False], "]"}], ",",
RowBox[{"Directive", "[",
InterpretationBox[
ButtonBox[
TooltipBox[
GraphicsBox[{{
GrayLevel[0],
RectangleBox[{0, 0}]}, {
GrayLevel[0],
RectangleBox[{1, -1}]}, {
RGBColor[0., 0., 1.],
RectangleBox[{0, -1}, {2, 1}]}}, AspectRatio -> 1, Frame ->
True, FrameStyle -> RGBColor[0., 0., 0.6666666666666667],
FrameTicks -> None, PlotRangePadding -> None, ImageSize ->
Dynamic[{
Automatic, 1.35 CurrentValue["FontCapHeight"]/
AbsoluteCurrentValue[Magnification]}]],
"RGBColor[0., 0., 1.]"], Appearance -> None,
BaseStyle -> {}, BaselinePosition -> Baseline,
DefaultBaseStyle -> {}, ButtonFunction :>
With[{Typeset`box$ = EvaluationBox[]},
If[
Not[
AbsoluteCurrentValue["Deployed"]],
SelectionMove[Typeset`box$, All, Expression];
FrontEnd`Private`$ColorSelectorInitialAlpha = 1;
FrontEnd`Private`$ColorSelectorInitialColor =
RGBColor[0., 0., 1.];
FrontEnd`Private`$ColorSelectorUseMakeBoxes = True;
MathLink`CallFrontEnd[
FrontEnd`AttachCell[Typeset`box$,
FrontEndResource["RGBColorValueSelector"], {
0, {Left, Bottom}}, {Left, Top},
"ClosingActions" -> {
"SelectionDeparture", "ParentChanged",
"EvaluatorQuit"}]]]], BaseStyle -> Inherited, Evaluator ->
Automatic, Method -> "Preemptive"],
RGBColor[0., 0., 1.], Editable -> False, Selectable ->
False], "]"}]}], "}"}], ",",
RowBox[{"{",
RowBox[{#, ",", #2, ",", #3, ",", #4}], "}"}], ",",
RowBox[{"LegendMarkers", "\[Rule]", "Automatic"}], ",",
RowBox[{"LabelStyle", "\[Rule]",
RowBox[{"{", "}"}]}], ",",
RowBox[{"LegendLayout", "\[Rule]", "\"Column\""}]}], "]"}]& ),
Editable -> True], TraditionalForm], TraditionalForm]},
"Legended",
DisplayFunction->(GridBox[{{
TagBox[
ItemBox[
PaneBox[
TagBox[#, "SkipImageSizeLevel"], Alignment -> {Center, Baseline},
BaselinePosition -> Baseline], DefaultBaseStyle -> "Labeled"],
"SkipImageSizeLevel"],
ItemBox[#2, DefaultBaseStyle -> "LabeledLabel"]}},
GridBoxAlignment -> {"Columns" -> {{Center}}, "Rows" -> {{Center}}},
AutoDelete -> False, GridBoxItemSize -> Automatic,
BaselinePosition -> {1, 1}]& ),
Editable->True,
InterpretationFunction->(RowBox[{"Legended", "[",
RowBox[{#, ",",
RowBox[{"Placed", "[",
RowBox[{#2, ",", "After"}], "]"}]}], "]"}]& )]], "Output",
CellChangeTimes->{{3.6595549649674387`*^9, 3.6595549834231453`*^9},
3.6595550653028927`*^9, {3.6595553128265676`*^9, 3.6595553387644897`*^9}, {
3.6595554958307996`*^9, 3.6595555144114237`*^9}}]
}, Open ]],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"newtonplot", "[",
RowBox[{
RowBox[{"Function", "[",
RowBox[{"x", ",",
RowBox[{
SuperscriptBox["x", "3"], "-", "1"}]}], "]"}], ",", "2", ",", "501",
",", "20", ",", "0.05"}], "]"}]], "Input",
CellChangeTimes->{{3.6595549152958674`*^9, 3.659554978383319*^9},
3.659555332709116*^9, {3.659555509656427*^9, 3.6595555271955185`*^9}, {
3.659555597485504*^9, 3.659555640728051*^9}, {3.659558440044022*^9,
3.6595584402002287`*^9}}],
Cell[BoxData[
TemplateBox[{GraphicsBox[
RasterBox[CompressedData["
1:eJzs103O5TpyINAyvJJeiffgJRjwuLfek54bhpFwlerx8p8RlA6BBPKeIBlB
SqL0/Z//+L///p//+re//e3//8v//Pvv//9j+3//9k/EOeecc84555xzzjnn
nHPOOeecc36VP+Oj42vz9sZPrXv1/LP9VtczO//o9evtl+25yHZf1lq2deza
j1P7OZqPc8455zybR+fnnHPOOeecc84555xzzjnnnHPOOV/lveNq88zOv8pb
6169X894tuvdev2irvuueW/xWstW76l1t46/7bnjnHPOOT/1nZWtLs4555xz
zjnnnHPOOeecc84555zzqPy136Ne6pdt3/mYt7be8bvuxyz7sSt/9HXNtg7O
Oeec89s9Oj/nnHPOOeecc84555xzzjnnnHPOecl35enNl21f+Lt9VXw0/+p1
9Lav1sU555xzzn97dH7OOeecc84555xzzjnnnHPOOeecx/vufLPxU/WVWpbr
xHmPt7Zd58GqerLk4ZxzzjnnsR6dn3POOeecc84555xzzjnnnHPOOed5/Bk/
la+1tc7Tuj7O+Xtatv3knHPOOedrPTo/55xzzjnnnHPOOeecc84555xzzs95
qV9pXG//VXVl2S/Oeb6WbX8455xzzvkZj87POeecc84555xzzjnnnHPOOeec
8/MelX91P855/DlyumXbB84555xzfsaj83POOeecc84555xzzjnnnHPOOed8
vZf6Za1rtB/nfL/f0rLtG+ecc845X+vR+TnnnHPOOeecc84555xzzjnnnHO+
3kv9stWVZb84/5LPtl35Vs3rnOGcc845f6dH5+ecc84555xzzjnnnHPOOeec
c875ei/1i6ory75w/kafbVnqPpXPucQ555xzfqdH5+ecc84555xzzjnnnHPO
Oeecc875Pt+VJ9s6Of+Cz7Ys68lSRymerT7OOeecc54jP+ecc84555xzzjnn
nHPOOeecc87Pe++42m/O+fhz2NtvdR2nPUsdJe+9Xlnq5pxzzjl/u0fn55xz
zjnnnHPOOeecc84555xzzr/opX6lcb39R/Nwztf7aL/VdWTxLHWs9mc8W32c
c84557d7dH7OOeecc84555xzzjnnnHPOOef8C/6Mn8pX6lf7zTmff853j7vF
s9QRvf6vXn/OOeec8+jvbc4555xzzjnnnHPOOeecc84555zH1zEaz74uzjP4
6XFv8yx1RHutuY8455xzzts8Oj/nnHPOOeecc84555xzzjnnnHP+Jn/Gd83b
G6/VM1rX07NdD85/tdX9Wse93XefM2/x1nHZ6uacc845z/79xDnnnHPOOeec
c84555xzzjnnnPNxL8VXzbPKo8dzvtNL8Vr/1XW83aPOr7d4rdlfzjnnnH/V
o/NzzjnnnHPOOeecc84555xzzjnnb/ZSv+i6nl6rs3VdnO/w0fjofHzO7fuc
19ro/nPOOeec3+7R+TnnnHPOOeecc84555xzzjnnnPM3eO/4U3Wt8tn1cj7j
s+NWzcfbfPV15L/9Ge99HrKth3POOefc9yTnnHPOOeecc84555xzzjnnnHO+
z3vHn6prle/aB/5uH43P3m+t+fkeH70f+FpvjfeO45xzzjnP+n3DOeecc845
55xzzjnnnHPOOeec83YvxXv7Z/PW9XA+M642z2gdPNaz1MH7xmWrm3POOec8
Oj/nnHPOOeecc84555xzzjnnnHP+Zi/1i66r1aPz8zt8dtzuPHyPn7pP+JjP
zpdtPZxzzjnn0fk555xzzjnnnHPOOeecc84555zzN3vv+FN19frsunhOPzXv
qbw81kvN+XGHl9qu9x3nnHPO+ej3Sra6OOecc84555xzzjnnnHPOOeec8zd7
qV90XSVvrZ/n9Fp7633Lz3jvfZKlbv67X+t8q+rgnHPOOa95dH7OOeecc845
55xzzjnnnHPOOef8yx6dv+bR+b/uveOj77NTeXgOb71vd9fB53zV+bNqHOec
c8657wvOOeecc84555xzzjnnnHPOOec8v5f6RdWVZV9Oeamtnj9qHafy8294
9H3O13r2+TjnnHPOo/NzzjnnnHPOOeecc84555xzzjnnvN1P549eZ+/42u/V
ebNdv9X7yXmPZ6mDn/HZOOecc8756u8PzjnnnHPOOeecc84555xzzjnnnN/r
s/OtrqPUL8u+jdbfO9+u67u6fs57fre2LOvhe7zUspybnHPOOb/Xo/Nzzjnn
nHPOOeecc84555xzzjnn/Lyvipf6ZVvvLh/dn9V5suwHf6evPl/43b77vZBl
nZxzzjnP59H5Oeecc84555xzzjnnnHPOOeecc57HSy1bnad9dh+zrIPzGXdu
8F/9VuXJsk7OOeec5/Po/JxzzjnnnHPOOeecc84555xzzjnf5894rV+ttc6T
bR927VvrfmZbH+ct3tvvGc+2Hr7GT597q+fjnHPO+b0enZ9zzjnnnHPOOeec
c84555xzzjnn7f6Mr5631kbzta4ni5fas3/r+Gzr4/yvfPY5aX0++Lu91lbf
h5xzzjn/jkfn55xzzjnnnHPOOeecc84555xzzr/opX6ltru+LHX07tOfeGu/
1nlr/Th/s7c+L73PHf+2t47LVjfnnHPO83h0fs4555xzzjnnnHPOOeecc845
5/zNnqWOUc9SB+c8zmvnQ3R9/G7PUgfnnHPO83t0fs4555xzzjnnnHPOOeec
c8455/wL/oxnr683zjn/jmepg+f0Z3z0PmrNm239nHPOOd/n0fk555xzzjnn
nHPOOeecc84555zzG70Ur/3O6lnq4Jyf89l+q+bn7/BT753W93KWfeGcc875
Oo/OzznnnHPOOeecc84555xzzjnnnN/oz3i2+lavM7oOzvl+X30+RK+Hx3it
Rd+3nHPOOb/Xo/NzzjnnnHPOOeecc84555xzzjnnGbwUb50n23pWrf90HZzz
OD91nvB3eu1+2JUny/o555xzvt+j83POOeecc84555xzzjnnnHPOOeeZvRSv
/b7NS/16+3PO7/fW8213Hfxdvmq+t71/Oeecc97u0fk555xzzjnnnHPOOeec
c84555zzDN46Llvdp9Z/qg7OeR5vbdnq5jl9dr5s6+Gcc875eY/OzznnnHPO
Oeecc84555xzzjnnnGf0LHWc8tk45/w+n+23an7+bZ+Nc8455/w7Hp2fc845
55xzzjnnnHPOOeecc845P+mr+tV+3+azcc75vX56HOe/Wrb6OOecc57Ho/Nz
zjnnnHPOOeecc84555xzzjnnJ7zUbzZe8yzr7433juOc3+et5+Tqc4bf7avv
k948s3k555xzfq9H5+ecc84555xzzjnnnHPOOeecc84z+Kr5ar9Xe2+81m+0
Ds75/Z7tPOU5PGr86n6cc845v9+j83POOeecc84555xzzjnnnHPOOecn/XT+
bOupzTNaB+f8fs9+nvJcvjvPbD3Z9otzzjnn8x6dn3POOeecc84555xzzjnn
nHPOOY/0Ur9VeXrH7apj93yc8+94ljr4Xo+6/qveW1n2kXPOOefrv0Oz1cU5
55xzzjnnnHPOOeecc84555xHeqnfqvlq80ftQ3R+znm8R50bWdbPf/eLqivL
vnDOOec8zqPzc84555xzzjnnnHPOOeecc84551/wUhud5xnv7c8556v7ldqu
PPyMR+eveXR+zjnnnJ/z6Pycc84555xzzjnnnHPOOeecc875m73UL7ouzvl3
PHp8zaPz89/+tjycc845v9ej83POOeecc84555xzzjnnnHPOOedv8FXzrq6L
c86fXjt/dp1vvXl5m/eOO319su0X55xzzu/16Pycc84555xzzjnnnHPOOeec
c875jf6M75q3N845561e+x3t0fmjr8cp3x3nnHPOOfd9yDnnnHPOOeecc845
55xzzjnnnJ/33flm45xzXvPa+dLa/9R5WOoXvY81n11vqa2+Lr39suwv55xz
zr/n0fk555xzzjnnnHPOOeecc84555zzzP6MR9dxKh/n/Lte+33Ka/2y7FeW
/Kfuh1L/LPVyzjnn/L0enZ9zzjnnnHPOOeecc84555xzzjmP9FK/3v67fTbO
Oeerz8us52GW98WpumZ9Vd3R6+Ccc875+z06P+ecc84555xzzjnnnHPOOeec
c57Zs9UxGuec81FvPR9P1bU7T/b3wel13/re5Jxzzvn7PDo/55xzzjnnnHPO
Oeecc84555xzfpPvztfasuwH55w//dQ5eercjd7PU75rP7Osj3POOef3e3R+
zjnnnHPOOeecc84555xzzjnnPNJL/VrnG62j1m91nZxzns1vGfcWP7UvrXk5
55xzzn3Pcc4555xzzjnnnHPOOeecc8455+1e6tc7X28drfO2ztM7H+ec3+a9
LVv92X32fZVlHZxzzjl/r0fn55xzzjnnnHPOOeecc84555xzzjN6qd/pPFn2
g3POo723Zas/y3ts9j2UZX2cc845/55H5+ecc84555xzzjnnnHPOOeecc86/
4NH5Oec8m4+O35W/1LLt2x9f9b6JXgfnnHPOeatH5+ecc84555xzzjnnnHPO
Oeecc87f5Kv7cc55tI+eg7vqi96PUjudv/f9km3fOOecc85v+e7inHPOOeec
c84555xzzjnnnHPO3+Sr5l1dF+ect3rtXIquL1sdnHPOOef8rEfn55xzzjnn
nHPOOeecc84555xzzm/y3flaW5b94Jzn9dHzJ7rummepg3POOeecn/Xo/Jxz
zjnnnHPOOeecc84555xzzvkbfNW8s3HO+fu9dj6cqiPKs9TBOeecc87PenR+
zjnnnHPOOeecc84555xzzjnn/Cbfna+1ZdkPzvk5bz03Tp9bp87F0TjnnHPO
OX+HR+fnnHPOOeecc84555xzzjnnnHPOb/TWcbPjV43jnL/fs9Sx27PUwTnn
nHPOz3p0fs4555xzzjnnnHPOOeecc8455/xGbx3XO77WvzUv5zyPrz4Hotdz
2p/xbPVxzjnnnPMzHp2fc84555xzzjnnnHPOOeecc845/4LXWrZ6Oef7ffX5
Er2eXZ6lDs4555xzHuvR+TnnnHPOOeecc84555xzzjnnnPM3e+/4U3Vxzs/5
qvlm68juz3i2+jjnnHPOeaxH5+ecc84555xzzjnnnHPOOeecc87f4KvmnY1z
zvP5qfPhdn/Gs9XHOeecc85jPTo/55xzzjnnnHPOOeecc84555xz/iZ/xmfH
98Y55/l81/mS1Wv1t47Lsh7OOeecc57Do/NzzjnnnHPOOeecc84555xzzjnn
b/BV887GOef3eNbnvDU+O8/o/nDOOeec8296dH7OOeecc84555xzzjnnnHPO
Oef8C/6Mt/brjXPO7/XRfrvqaT2vRutpzc8555xzznmG/JxzzjnnnHPOOeec
c84555xzzvkXvdQvui7Ov+ijz+OqOnrzZvNd+8I555xzznmm/JxzzjnnnHPO
Oeecc84555xzzvkXvdSvtWVZB+cnvPV5ae0fvZ7R8afqKvmudXHOOeecc97i
0fk555xzzjnnnHPOOeecc84555zzL3rv+FN1cR7pq+abreOUR9UxWteuejjn
nHPOOW/x6Pycc84555xzzjnnnHPOOeecc875F73UbzbO+Ru89Xm57Tl5xrPV
xznnnHPOeWaPzs8555xzzjnnnHPOOeecc84555x/2aPzc57J3/r8ZKmDc845
55zzmz06P+ecc84555xzzjnnnHPOOeecc/5lX92P8y94ljpq9f2JZ6uPc845
55zzGz06P+ecc84555xzzjnnnHPOOeecc/5F7x1/qi7+LV99H+6ue1ee3vVG
XzfOOeecc86/6NH5Oeecc84555xzzjnnnHPOOeec8y97Kd7bn/MW773PSu1U
fTXfnT/LdeOcc84555zH5+ecc84555xzzjnnnHPOOeecc855vV90XfxdPhs/
ff+vXp/njHPOOeec8/s8Oj/nnHPOOeecc84555xzzjnnnHPO6/2i6+Kxvvs+
iV4P55xzzjnnnNc8Oj/nnHPOOeecc84555xzzjnnnHPO+1u2enmbt17vZ7/Z
Okbz7soffR0455xzzjnn93l0fs4555xzzjnnnHPOOeecc84555zX+0XXxdd4
7fquytead3be0Xk455xzzjnnvNej83POOeecc84555xzzjnnnHPOOee83LLV
9XY/dT1qrbWe1v6cc84555xzfrtH5+ecc84555xzzjnnnHPOOeecc855vV90
XV/x2v73ztvbb/Y+4ZxzzjnnnPO3enR+zjnnnHPOOeecc84555xzzjnnMV7q
F1UPb/Po/Fn91H7N1sM555xzzjnnfMyj83POOeecc84555xzzjnnnHPO+S1e
iq+a5+mj43vr2lX/6rxf81rLVu8u3/WcZlkf55xzzjnnnPM2j87POeecc845
55xzzjnnnHPOOeenvdRvtH+trV5Haz2j+7F6/lXzzF7Ht3h0/t3PX6nV7n/O
Oeecc8455+/26Pycc84555xzzjnnnHPOOeecc77ba202T+336jqy7e/q6zS6
n7P3Rbb96N2nrF5r2erlnHPOOeecc57To/NzzjnnnHPOOeecc84555xzznnJ
S/FV86zy2fp4rI+26HpP53efc84555xzzjmP9Oj8nHPOOeecc84555xzzjnn
nPPv+qp5W9uf8b3zZNkvnttr/U7d76PzZdtPzjnnnHPOOec8U37OOeecc845
55xzzjnnnHPO+fu91G93nizr5zyiZVsv55xzzjnnnHM+49H5Oeecc84555xz
zjnnnHPOOefv86j8td+c3+CrWrZ1cc4555xzzjnnMx6dn3POOeecc84555xz
zjnnnHP+Hi/1i6ory75wnqll2wfOOeecc84557zFo/NzzjnnnHPOOeecc845
55xzzt/ntTaaJ9s6OR9ps/lW1+v54pxzzjnnnHN+g0fn55xzzjnnnHPOOeec
c84555x/x5/xbPVxvrLtqu+2eTnnnHPOOeec8xUenZ9zzjnnnHPOOeecc845
55xzfs5L/UrjevPV5uM8o8/GszzH9olzzjnnnHPO+Zs9Oj/nnHPOOeecc845
55xzzjnn/JzvztebP8u+8Hd5qd/ofZvNs9TR2mr7zznnnHPOOeect3h0fs45
55xzzjnnnHPOOeecc875eX/GR8f35l/dj3/bZ+O3eJY6spw/nHPOOeecc86/
6dH5Oeecc84555xzzjnnnHPOOef5fXa+3nmzrZ+f8dZ477i3eZY6Vnut1c4T
zjnnnHPOOefv9uj8nHPOOeecc84555xzzjnnnPN9/ozX+p2q6+m13/xOL8VX
96/1u8179+d2772+WermnHPOOeecc37Wo/NzzjnnnHPOOeecc84555xzzvd5
dP5Wr/3md3opXuu/uo7b/PbnOZtnqYNzzjnnnHPO+ZxH5+ecc84555xzzjnn
nHPOOeecn/daO11X7TfP4aP9Vtfxdq/ta3R9Wbx1XLa6Oeecc84555yPeXR+
zjnnnHPOOeecc84555xzzvk5L/XLVleW/fqq947Lel/d6quuy1f9Gc9WH+ec
c84555zzMY/OzznnnHPOOeecc84555xzzjnP46fzZ1v/W/30OD7nrsceL8Vr
vznnnHPOOeec5/Do/JxzzjnnnHPOOeecc84555zzeC/1250/y/qzeqlfrX/2
687b+vX2523NucQ555xzzjnnd3p0fs4555xzzjnnnHPOOeecc855Xi/1W5Vn
93p6x0Xte/b5+Fl3Xc/6M56tPs4555xzzjnnOfJzzjnnnHPOOeecc84555xz
zu/1WquNm8337HdqvbVxq9fdus7VefgZ772+Wer+qj/j2erjnHPOOeec87d6
dH7OOeecc84555xzzjnnnHPO+Xe8t2Wrf3S9f+Kt+zLan9/lo9c3uu63+Ozz
taoOzjnnnHPOOedtHp2fc84555xzzjnnnHPOOeecc/4eL/UbHZfda+sdjfNv
uPsj1kfPq6dnWQ/nnHPOOeecv92j83POOeecc84555xzzjnnnHPO8/szPjp+
VV3Z9+F0XTy377r/+F5vHZetbs4555xzzjl/q0fn55xzzjnnnHPOOeecc845
55yf92f8VL7V886uu3fc6nr4t7z2+1QdfM6f8Wz1cc4555xzzvlbPTo/55xz
zjnnnHPOOeecc84553yfP+PRdZzKx/kN3vrc8lxeatnPYc4555xzzjm/3aPz
c84555xzzjnnnHPOOeecc87n/RnPVl+t7ug6OD/hrc/v7jr4b199XrmunHPO
Oeecc77Go/NzzjnnnHPOOeecc84555xzzuuepY7VnqUOznf66HMRXffXfdV8
XznPOeecc84553y3R+fnnHPOOeecc84555xzzjnnnNf7lcZlqbvmWergPMJH
n5four/qq8+x1vk555xzzjnnnP/26Pycc84555xzzjnnnHPOOeec83Z/xrPV
11p3b5zzN3uWOnibt47LVjfnnHPOOeec3+7R+TnnnHPOOeecc84555xzzjnn
9X69/aM8Sx2cZ/Tbn2/+156lDs4555xzzjl/u0fn55xzzjnnnHPOOeecc845
5/zL/ozX+rX2z7Ke3jjnb/TR56jUotfzdl91XbKsh3POOeecc87f4tH5Oeec
c84555xzzjnnnHPOOf+il/qtyrOq7tk453z8uSv1i17P2/wZ331dsq2fc845
55xzzm/x6Pycc84555xzzjnnnHPOOeec83IbnS+qjto8o3Vw/kbf9fzzNj91
Xq3uxznnnHPOOedf9ej8nHPOOeecc84555xzzjnnnPN2bx1XG1+a53SdnPNy
y1bfW/1teTjnnHPOOef8rR6dn3POOeecc84555xzzjnnnHO+z0ttdJ5s6+P8
Jm99vlqf59m8/Ewe14NzzjnnnHPO13h0fs4555xzzjnnnHPOOeecc875ei/1
i66L8y9763Pa6715+dr5sq2Hc84555xzzt/q0fk555xzzjnnnHPOOeecc845