From 0e13392adee9909b875c96a45fcab5e03c0d7736 Mon Sep 17 00:00:00 2001 From: Francesco Minnocci Date: Wed, 23 Aug 2023 13:38:53 +0200 Subject: [PATCH] Split up main script into local modules --- adapt-step.jl | 22 ++++++++ euler-newton.jl | 29 ++++++++++ hc.jl | 125 ------------------------------------------- homogenize.jl | 19 +++++++ homotopy.jl | 12 +++++ plot.jl | 14 +++++ plots/solutions1.png | Bin 0 -> 16583 bytes plots/solutions2.png | Bin 0 -> 14712 bytes plots/solutions3.png | Bin 0 -> 16947 bytes solutions1.png | Bin 16523 -> 0 bytes solutions2.png | Bin 14720 -> 0 bytes solutions3.png | Bin 16783 -> 0 bytes solve.jl | 59 ++++++++++++++++++++ start-system.jl | 14 +++++ 14 files changed, 169 insertions(+), 125 deletions(-) create mode 100644 adapt-step.jl create mode 100644 euler-newton.jl delete mode 100644 hc.jl create mode 100644 homogenize.jl create mode 100644 homotopy.jl create mode 100644 plot.jl create mode 100644 plots/solutions1.png create mode 100644 plots/solutions2.png create mode 100644 plots/solutions3.png delete mode 100644 solutions1.png delete mode 100644 solutions2.png delete mode 100644 solutions3.png create mode 100644 solve.jl create mode 100644 start-system.jl diff --git a/adapt-step.jl b/adapt-step.jl new file mode 100644 index 0000000..9e5b955 --- /dev/null +++ b/adapt-step.jl @@ -0,0 +1,22 @@ +module AdaptStep + using LinearAlgebra + + export adapt_step + + # Adaptive step size + function adapt_step(x, x_old, step, m) + Δ = LinearAlgebra.norm(x - x_old) + if Δ > 0.1 + step = 0.5 * step + m = 0 + else + m+=1 + if (m == 5) + step = 2 * step + m = 0 + end + end + + return (m, step) + end +end diff --git a/euler-newton.jl b/euler-newton.jl new file mode 100644 index 0000000..e3cefd3 --- /dev/null +++ b/euler-newton.jl @@ -0,0 +1,29 @@ +module EulerNewton + using LinearAlgebra + using TypedPolynomials + + export en_step + + # Euler-Newton predictor-corrector + function en_step(H, x, t, step_size) + + # Predictor step + vars = variables(H(t)) + # Jacobian of H evaluated at (x,t) + JH = [jh(vars=>x) for jh in differentiate(H(t), vars)] + Δx = JH \ -[gg(vars=>x) for gg in H(1)-H(0)] # ∂H/∂t is the same as γG-F=H(1)-H(0) for our choice of homotopy + xp = x .+ Δx * step_size + + # Corrector step + for _ in 1:10 + JH = [jh(vars=>xp) for jh in differentiate(H(t+step_size), vars)] + Δx = JH \ -[h(vars=>xp) for h in H(t+step_size)] + xp = xp .+ Δx + if LinearAlgebra.norm(Δx) < 1e-6 + break + end + end + + return xp + end +end diff --git a/hc.jl b/hc.jl deleted file mode 100644 index dfb0be3..0000000 --- a/hc.jl +++ /dev/null @@ -1,125 +0,0 @@ -using LinearAlgebra -using TypedPolynomials -using Plots - -# Define start system based on total degree -function start_system(F) - degrees = [maxdegree(p) for p in F] - # @polyvar h - # G = [x_i^d - h^d for (d, x_i) in zip(degrees, variables(F))] - G = [x_i^d - 1 for (d, x_i) in zip(degrees, variables(F))] - r = [[exp(2im*pi/d)^k for k=0:d-1] for d in degrees] - # roots = vec([vcat(collect(root), 1) for root in collect(Iterators.product(r...))]) - roots = vec([collect(root) for root in collect(Iterators.product(r...))]) - return (G, roots) -end - -function homogenize(F) - @polyvar h - return [sum([h^(maxdegree(p)-maxdegree(t))*t for t in p.terms]) for p in F] -end - -# Define homotopy function -function homotopy(F, G) - γ = cis(2π * rand()) - function H(t) - return [(1 - t) * f + γ * t * g for (f, g) in zip(F, G)] - end - return H -end - -# Euler-Newton predictor-corrector -function en_step(H, x, t, step_size) - - # Predictor step - vars = variables(H(t)) - # Jacobian of H evaluated at (x,t) - JH = [jh(vars=>x) for jh in differentiate(H(t), vars)] - # ∂H/∂t is the same as γG-F=H(1)-H(0) for our choice of homotopy - Δx = JH \ -[gg(vars=>x) for gg in H(1)-H(0)] - xp = x .+ Δx * step_size - - # Corrector step - for _ in 1:10 - JH = [jh(vars=>xp) for jh in differentiate(H(t+step_size), vars)] - Δx = JH \ -[h(vars=>xp) for h in H(t+step_size)] - xp = xp .+ Δx - if LinearAlgebra.norm(Δx) < 1e-6 - break - end - end - - return xp -end - -# Adaptive step size -function adapt_step(x, x_old, step, m) - Δ = LinearAlgebra.norm(x - x_old) -# function adapt_step(H, x, t, step, m) - # Δ = LinearAlgebra.norm([h(variables(H(t))=>x) for h in H(t)]) - if Δ > 0.1 - step = 0.5 * step - m = 0 - else - m+=1 - if (m == 5) - step = 2 * step - m = 0 - end - end - - return (m, step) -end - -# Main homotopy continuation loop -function solve(F, (G, roots) = start_system(F), maxsteps=10000) - # F=homogenize(F) - H=homotopy(F,G) - solutions = [] - - for r in roots - t = 1.0 - step_size = 0.01 - x0 = r - m = 0 - - while t > 0 && maxsteps > 0 - x = en_step(H, x0, t, step_size) - (m, step_size) = adapt_step(x, x0, step_size, m) - # (m, step_size) = adapt_step(H, x, t, step_size, m) - x0 = x - t -= step_size - maxsteps -= 1 - end - push!(solutions, x0) - end - - return solutions -end - -function plot_real(solutions, F, h, v, name) - p=plot(xlim = (-h, h), ylim = (-v, v), aspect_ratio = :equal) - contour!(-h:0.1:h, -v:0.1:v, (x,y)->F[1](variables(F)=>[x,y]), levels=[0], cbar=false, color=:cyan) - contour!(-h:0.1:h, -v:0.1:v, (x,y)->F[2](variables(F)=>[x,y]), levels=[0], cbar=false, color=:green) - scatter!([real(sol[1]) for sol in solutions], [real(sol[2]) for sol in solutions], color = "red", label = "Real solutions") - - png("solutions" * name) -end - -# Input polynomial system -@polyvar x y -F = [x*y - 1, x^2 + y^2 - 4] -T = [x*y - 1, x^2 + y^2 - 2] -C = [x^3 - y + 5x^2 - 10, 2x^2 - y - 10] -P = [x*y - 1, x*y] - -sF = filter(u -> imag(u[1]) < 0.1 && imag(u[2]) < 0.1, solve(F)) -sT = filter(u -> imag(u[1]) < 0.1 && imag(u[2]) < 0.1, solve(T)) -sC = filter(u -> imag(u[1]) < 0.1 && imag(u[2]) < 0.1, solve(C)) -# sP = filter(u -> imag(u[1]) < 0.1 && imag(u[2]) < 0.1, solve(P)) - -# Plotting the system and the real solutions -plot_real(sF, F, 4, 4, "1") -plot_real(sT, T, 4, 4, "2") -plot_real(sC, C, 6, 12, "3") -# plot_real(sP, P, 5, 5, "4") diff --git a/homogenize.jl b/homogenize.jl new file mode 100644 index 0000000..fab4a6a --- /dev/null +++ b/homogenize.jl @@ -0,0 +1,19 @@ +module Homogenize + using TypedPolynomials + + export homogenize, homogenized_start_system + + function homogenize(F) + @polyvar h + return [sum([h^(maxdegree(p)-maxdegree(t))*t for t in p.terms]) for p in F] + end + + function homogenized_start_system(F) + degrees = [maxdegree(p) for p in F] + @polyvar h + G = [x_i^d - h^d for (d, x_i) in zip(degrees, variables(F))] + r = [[exp(2im*pi/d)^k for k=0:d-1] for d in degrees] + roots = vec([vcat(collect(root), 1) for root in collect(Iterators.product(r...))]) + return (G, roots) + end +end diff --git a/homotopy.jl b/homotopy.jl new file mode 100644 index 0000000..6ac3b9e --- /dev/null +++ b/homotopy.jl @@ -0,0 +1,12 @@ +module Homotopy + export homotopy + + # Define a straight-line homotopy between the two systems + function homotopy(F, G) + γ = cis(2π * rand()) + function H(t) + return [(1 - t) * f + γ * t * g for (f, g) in zip(F, G)] + end + return H + end +end diff --git a/plot.jl b/plot.jl new file mode 100644 index 0000000..721b910 --- /dev/null +++ b/plot.jl @@ -0,0 +1,14 @@ +module Plot + using Plots, TypedPolynomials + + export plot_real + + function plot_real(solutions, F, h, v, name) + plot(xlim = (-h, h), ylim = (-v, v), aspect_ratio = :equal) + contour!(-h:0.1:h, -v:0.1:v, (x,y)->F[1](variables(F)=>[x,y]), levels=[0], cbar=false, color=:cyan) + contour!(-h:0.1:h, -v:0.1:v, (x,y)->F[2](variables(F)=>[x,y]), levels=[0], cbar=false, color=:green) + scatter!([real(sol[1]) for sol in solutions], [real(sol[2]) for sol in solutions], color = "red", label = "Real solutions") + + png(joinpath("plots", "solutions" * name)) + end +end diff --git a/plots/solutions1.png b/plots/solutions1.png new file mode 100644 index 0000000000000000000000000000000000000000..dc76801628f11b34441f637c4fcde046531a64a9 GIT binary patch literal 16583 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 BXMX?y literal 0 HcmV?d00001 diff --git a/solutions1.png b/solutions1.png deleted file mode 100644 index 17e3a36f051153fdecb2cae99e99b9ce251d8385..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16523 zcmZ{MbzIa@)9)@zccZj~NFyyFh#)E5t(0_2m!c9NOgmg(u8c0aDw1RZE22ME1fz z*!NWx7)tl%MJb`?TcZp<<^79(&J?-phxpoqwV{rx*P; z-f(xMA11e33zCwN*>f}WBO@Xr@5%0xJ+?L;F6J@5kzY$ zH=P|!*!)OdpQ<XjWdoK%o=CBA1k?x_f4;#!b{<=J%I)C19lluMr7&C9% zNyrFklqp1-&q@7$XKZXNB370*T0u$IYVwy_HeOMvTL0yUA zVF}~AY{t?h`IQI-rR*z3b>2yNcMQYjX&*sXAt?vl^{J+ylOO!el<9KkTwGk)+WAYA zr8av@{hvR7R!QrjZPy&PmZuF@$UAVE`s97MG1V(`Vd_PCoB~3#yV%QJf$Lm*M@g5J zNA9j>p?-1j*>R-$tqYGoomA|-?RT@}MZN~XY+taIXwt)!7|L-Yg~N#s$;gLsfw?xQ^HGb3tgA{-!HxV z38OfK=W0Btr{GZE+n8>2w_gtbeP4{3n`3b{nU~?>$Z9ei&vT)>aJ!6vnny`l8EJX% z-uA(StC;=3yq@AKarexWl+m$rD@TCA`E#0eeo2q{_QVusTq2?% z)2Njngn0;uqhvDs>*z`9Dr~U~bk*WJGW;8mWkuQ6-)JnJ(@Gm_Xq4JM_F3w?*Aj|E zz(642eYqM;2pb!l=8N-_Vv`yvX=xn7OYaH`377>1cV<67PEAdno}P|lD$)-QK0n@H zwX(8uc5?dUy*g5M?=~VbGSZ~liIazC4fp|P=dFLo%5dSy!MdY^1ODt#zRvgW-}hIB zCB2q3wY3MLsJID3i?9GsdQw_o} zFg(m~GqAR?Q95*OZEb&bl;i5v@rjAUrT#4QMt_ljtob|#vG)~d>3rfCZtQ$m?R;BR zr68z4GIU_TbFruKoCgaFOV8QZ-28mR#C82=MO$mD4bY}HjBELK=Z|1&*VnIBpf&iX zZ~n~Hcq?SrBkV8)XZwwmAGxfWnp)!3y8{CQYIpAj?5|XTXy%#=y8r&x)fG}wOHM|% zJ!%mmEx9(3qgr?;IyTm2ywZO7fpoyZWZ6AbDC{zc%<0x+lA8izVsWvt!MojJ++19U z22gooE|U+2^0e&jmw#5+S?rp#~ZqKz{ESB695~?6(kYHnDd(J3* zoS(Y@t*qPQ3;IpX%w&$2vcga}80|lPm^Ap7CnoBEn5>UiS>3eZ_vjFaEKeFFugsF|x{;BQnCmoVS>Rs}SM+PMrKRQf@88+k*^4nZ{C4I)+)aD9KJLB!yHziM z)OE79A08Cgf!r`KF}+PoGnwnsh#i4vwY9Yk4N{1Mg9CMSb%d9f7d->R;J|>Fw>Nqr z{`)KYYd?2WEP^?Cd5gERJ-&&^Wzt&0S^3`7#F4S9%jH&>w-h5bowq$J?Z0=lR?*AC z!s0MoAmThOjJR{>4xI7xvjmuSe|d1RCtY&z!(BLmN@{9dtY{10d6n zaY&{s?R75B&kDcu@SNs$M@L10W&{nL$e*B+6Nkfd?V7Lqf}Ns}fIuGY{I(!@r2N%H zn?=FM z7`!>%2=r`@R}~f&b%C7$b{iNNTuqb?Jn9=7s$AJh1YTR)*~z%Rf$zGy)adBaU|)OQ z+}QmdLx&izacu^51-%fCqa{RyghQjFAv=0}e0(YV7TEFW=|Nkwp9^q!d3g(^i}pJD zM~aLF3-k(e?*tT8Rtj@)v`tS3kCoknoh-&@r5^?58hV0TWo&3THWCq0L(FJuWIFk~ z|M7B*uGy5#UA3MfWA+pyP%|fc%R&JMYg=1ecobKUPEN#}$1BUqwhq=OfW3||OS**j zYcW?BS6BW7C5O?Hvj%q{A3DzX&Jl5Q7ZT9$1?~?UAU>$2l9Q7U)Vf=lm`s3WD@ae! zcrD?*(w@K?^7l_lWo2bSmKw6sd7}E`$AQ7Y!PeG4?vfZs^NAV-cPh%uBje&i9#*z} ztf)Yndl&^yL^KV5&s&*`s%h36IXO94I_UTd7QvhSy-Ayo^bF~$3JT7~)uv6hcZXveUw3qOiwFw`Hc03h8yoBD zTHm{;wLjFICI*57&WnY&u)Tsp>u{mL{{B9lh(l6Z8t6~1mnyqEJ0QO?&!1d~nsjPP z%A}Vsjf{;K78X`kR}G}k*B*c&`TO^;-mk(PIy$=5l@)3lnwbW_3OGTx9%Dm0jYgD3 z@ZX%s$PUopj;D+_Ir;f}ySmn7XeNkwkPm;@s8Aie*nFBiTfco=dna#wZ-3wJZ0jq> z+mPV-_Jr(gHUfg^WL^`0KflI>G7YN7O-<)>+QMRDr4llm*YkC0Nl7*L|IRh#AJ~~# zSj>!$9_Hh)lXvK(7iVSd)?y*WB_#9%oEGP9hh?aptUb`q-*YeEpb-@o-a9-Dd1x3$ zAEt};R*0kH5iOma1wNb8nL2%|9+qU}jS`GJx3h21hdz_d`DYivJGilj@MPBUB4pV| zdkEKJTTtlE1mHkqiDPi0?J^DZm4rL_-JlQ*zGdAR&d}wO_S><#V^eHQQUEV=>U<~$>2AP4UUtSQ*G;ZFq8($X(w?0IKPcI?=- z?Rey>atjM5vXv?NIp<5kdmI}xERNQUFmBo9%T|{k{(V!9CFVCKTQmrnIoh*&qM)=_ zfPRxB8jm4$7#l0UM~J4cA64XM02F?PMF>wysO+ggqu1XrE0Ka{6a%i1@Le-zEiY`A ze~yrF56}O$75<;LANZo;)~*@6bdFhRj9*?Od@iQAa}&P8=(8Y4!>v-mt{XecP?Nl6JDBLxnY;z4r5Yd~lx`2D87zP?&oTFt>{A3uJ)6HA|(oGc19ssFuF zeI+(F^3Q1)M*(pNAEgWE`Z$^1o*pnu6w&cXUHEwfrpVV(>T=nSYU4EXL4Sg!W0%0P z&#G=YFDiQThQ9w+gl??-)w#36m-BFM1MAo1_Ulnfia`|tCMIT5Qj)m1IO1q;P-CLf zK5H_xAg8RX@4pu#LaL8Z^9}RgCch;;N_w98yeqS->vz}Wi^(q^d8%l}l5mNR&e58TI*H0O#P`f$WjJprkIr7~_s6*x9*JveYo@$rj;SLbMXIYr zs`o!0eiW`09udN}{NSo@Z0g|T^v2+|fw_@6XJHp#PtUck_G_KBsX;*E zR?UBT0c$-SIJH&pCU33{{H;ZRk%v{((?u_6uf0{}=y7};F+>-w`O9UdX)0eQx6X6% z>C>lCJ#s4h%om@hB?Atpe+Gyjl%+Nqt$r#txl!|)Qat~?+3kFJuEXWE=j-tMT2kcM zrc9hQrOg|4@iU{(i24wIBb@fTi#fIt=bu@0Yh9bq4!}L7xT^L_;2s7-L!;Mo(buEm z>WSo^&F)dL3-6QC?8$7)!&$!lPp1~S7lqFHCV!Qko;yu%``bNj;?z7E(z(ojV>N5! zaBF4zk#w}Y@gs#iw;y0=Dj)REU8v;jSWq$RxpD0FJk28_8)fO_>O2-%si`~}SWxe# zDqlD(m;|>~DsXHqQZZJUtt3WD%xq%s*9M8?@G9j3#Yk&Kbl8xrp*+ib2s+r^N55Dk zusBte6*@-fOj68DA4={%e2~>Q+^ApU=5R$~sQI+a!{))sfezEnHGQossOr__?uwe3 zrgIG%niLTF;(imF3={F=-u}(wX2}m7uZ~6c6&BgGMX9f75lwY}sz3d`BVsUmBzY7v zw3EeXF74&5yN%O1IJj%6J4B+Bd%ihV?iBe=O8lt33yyX&q9~?F5$icEmB5PmNaNOz zU+clnqwP)oCwFH^wu!a6OP?r_`7*x8$0H&l0ymU^fPz7uosyC=Z*7@kF|qf;_qff< zz3r(O<4rD0UFlW-sElo!SlXb={jwa)zi#v<>nFKH|E%8oGElo#8;6o%?Dq}NZ{o_x zVJ`K#EwnY|8`SWTu%BDpZL`J1aeAdWCqy#kVL4OlIqB(Ra%0U{TEwyJyl2L6%F3bZ z(8W?&mWf==8+EDmroOYnEDIZI8!i!+gaOco=AD1%cU?<@ce5IqVhAt!1)Q#LcekZ2 z<^L&}$!KA^s8Smozbm#sWP5Xm?~X~8}p%fgq%`liNLYOLj19<0Sl^mG3VwDR2DT5$c;a9b!(#hI4g+E24^ zY;k|jpLKHMqHoB=a-te{>c<M_y*s&oD4yML_}OZ+cqfCvgMgetF`Fc8 zShoBWTR5KfbbNQz=WN=!v0%UTgyxT!KmrD^pq?^?=J0Q0?^(l1+cTz8M=b*{`p>4J z3oWiYj1RSEvva1BA5QeGYpz}Ki@VDf!Xr1p@;B$NG>iYMrBo-TGBc6Q%G|)W2pI&` z4rBE*gE-#zCSR(6*m@Ll?)d~&t;G$04#DaQ*s;MJ3%M?=-k)$6k(_mpecX#+c6z5Yx2im07Z;A324 z@8>Hxc8qCt^IyoZ2sPN4PGe+W^EV1Ketk`h3d9bi*-KyIDOh57M?RMS>htQvkc{A3 zdt7daX|R3WeOqRKGgyI}Uyh&IsL%THl&63Fa%M%|HM}k9t)HuA?(0~SJX6F(H}Re9bnXfI$ zUVNvm4{)+qSbiNZA|PFO9j6ClrU57rBCl%)eQy#ys}E*6D;6vw z2?X#i70wzxJtA3N9v1TQeDFkVV{w~e7!wwFH&FewKBR%JU+hcwz+ErueWA+{IHKIX z$xIUG?{c%m_WN|PdT;M(gP3VWbw>NUu1Hs{57n5?kf$r~E~5%Vw`B`h>=IP6SN%&* z;9y5Ml106Fwvtv$wH&?>k#Jig>Mllcp$@Zul^p zA90QXGTM&w_6>AO_?EvH`ZboM%JRHhI_&TL>Myk(^DGf7`Z9;g3WP?&lPZtLW$ z-`7p7Cbk%VZLa(B=gRk|tLjQqU&(KrNUgDZ`=;@#b&M_x3_N&>nT>eM<(mwCf!EH` z-ZE05_x8V*VyS8epG!zSRHc2dz^3|)7$c%bEO7c})-fz@)HN=;t=$9m>Jq`2HB||Y zo~j;xP2s-{5h2LvFbk?1(RE>ezwi;XZCY(%#Xbyn%-XFtSVTS6GGAA5V1E*hUd&@){%3!jLW0Pwr~pjZ8+lCJcyeHT}R1JliyYzTaW*;kGhSXuugwSri03_;IJE;HG z5)*Ie4_T=`wUQcV+Jo<9iFh1YgIRyX*tGV6r|RIf6Sp$bUKY>>IDv-Sl3?p{AJr>- z%1$daE9trN?(cjOHA;++$r=GF80v^p<%T1AeNc>oA-v!^X)VS#r z6T>FNtY4pKbZVd-2g?(Fep`SPixB0HeBUxPddWd;@cIuvzC;6oOb0Lt&OG3D!y|}P zsP-eDBE*nP@2~`rN(KGmw@Plc{%N&)(bIl|sh?y*k2Oxb&o~X+A6LNB`^rk)Drn3Zpo5Z$}k5k zr;r@boht4zu~V_*KUW%$QBYdB!otPUmBP_qc%6Gzb(XP@;)s3=`<$dbIFe>Wv~b;O zv*NJF{D~r)Gw?#hZT(l(n-_0Hdz|HQ-jCW~K1cAO3d2-GB?U0W33Z#c^zJp?Bhw=5 zR8}$u742Z@xHl3^bfU~g-hWHU1tZM6=6X%$m?SGqcjP<(S z^{rJq*rC&pJg0*VYS}QU5AfY5O@B1sOZ*D=lxPjJGt>v+3M6iFB&Ukr`(lyR_Ew{$ zHYurrlZ(rtGbthH7*|#8HB4K;*C=rIaA93`Q5L2RI}NRq<=LXsMDC%aLgT__?ptZx zkuU1*DM2C1kPCknXw5%)?Ja4Qhbbq5A{}0DtPpGGRf4Oi7pb;5ULWBr)Fkp8;S}Z? z$FQ1_xH}}e-B(n^D(Mpysq{L+$BR|3W^<#dXI~;({Z{7!$q|a!#s-iX4QU&MH5C<} zvI1?SV|exo@suRx8Y7PcRwP+pcE>%()m+9&8{6s+x1ag92v}0N?dtWYu=!I*$Lo$y z71fhRenVRbQgT*iX4!>JnVG(=ZR20q(v7O>>dTG(>j-0vXJI{|ynR$h*kc6QkzJ|| zkqSy&>$+d^MZNuw-|3$?kCvQn&!vfrSJqUxUr)>+BAD=<4b3QVVVw=KWFRG&L`>tT zgfWF3%bGD`zQS9>AXixA7;Xy+&mK@`&v00uH1@(L@967u`#xDGw9wPt({W(9aee(O zQwhVggg5>hw)9xG}CnG&YjauIs%-K8y@Qv}nyD}A_Sy5}jkxF8h5wXXI%RSTIV zpUeEx(*EAh$^5^d2waDQSFxg%5hN|BrNgBJ;aM(Hyf-L)jQ-HeeTX~~UzB+$&1~1Y zl`)J^P?()L?=oU0gChf5sVAI2JinRLY+)MS`w{ghjDw_B1(6w+CM#UVP>Yp~Vw9C` zq1Zx9BE?#;X7#44kigB+m`XZEea414OzDNy+4{f73!_ZAe3~>%d*4`}w4^ICrGyo? zNHbq{!!$*VDl&N^?cVWO9vxp%vH@Z6R`_to!#h4>esNapY|BgGxf9_LQX{D5B`Q*u zo|NPpvMm&onM?_zD@-DkVwP|S`wf!g9kphfB=azYzjQ~do{a`F1S;e*Q)$n9I0x?! z%LdC~$FuYl2mOr3aq@BsFUR;M~X%{^GZCK`#FMF{6_2?)fKG${FZ^1*3(WW1L|d zURpUirD-Ky`EQ5knS^w#jJMS_Dy~<96$=EttN`~?V>;;|MST_mRP;dSz>6rf^71Uh zeR)MnszEh{FX-d|Li?3VJPxd-!o36WG=-TCuU69*DHkKuZ@qq;t8s0zwE0{D5DO}9 z{co+U-pd1j00S*4DapK@9|psr^23%Wv!e*Th*Y>$fU54#B63emYTbST)&?M$xWiB$ zgz}#~dls#p&8X6;O6X-2u1f?yJ@u6ivS`h6Ks_=uGci!8!t)6LUVx;?m~1|P&3mnw zMP_fxyvA|mgpT(d#r{FE@|E@ zfyXuMSN?*B993YY&v9K$3q1hd4Lt9z6%a1kCpbUy;>kUCi<_GAL;qxvIJV%IVN`CB z)AlU%DAy@deZ+?VoCHCB{MeeI0f7Nzd1RI0>P5(3MUmp5&)WzElT9dLVZv-|paHJzl4+9BJ#t)Ze3E>9*EPNH2d?qRQDweOp&_TDTA15i(_xog zXqFKSC1j>rkYcJ8VcE}#cWgmX2|4QFjYsGqjO#&CR#ru)#NGW9RqEs3Y8wyXB zB_5L=n>_NFC4Erv@d-R$|&S3J$h$ZiO~)VpkIk8NcKmt>o6`)r|wizqt&JZI&> z@SR>MbL1q>?@+^8Mz>3bc#~Kk5gP9pHA&EBY&x{~&6gv|W6zlQ49Zm6Wpo4s%bu3{ zN+TubETK5c`QpqM>4sBFG>Pm%6o#gSVs2s6Vi1Mhkwv|;%?*JduT^W2*L8nmibFUl#dyRPgqVbYQMA(0FuwQ1GeHV8<>j?dOXj2gkmxX_S#r0_ zhQyPo)360u)ptai-o4)e9rKa&Ay)R=QqXc=POVQnSSNTZ<~mVs_5FJTS$eWWs@unx zp4<$0{DjIL-&xp@gwS_a@uC}t4`VTOzs0bH`~hl`R%E5Ew)UZ*(Xb$|hexu!LU;Q0 zxmCYi`PQrDXg9^IrV4lxc2q+ZX@}o{7l^%v7zl+_u$`T~rKL7rLmPSJj_G0(EE~4% z*j5HdlbZDqe#N~gFbc+OvaFVxw?0?kyrxAM<>aIwj6_OViBim81w&N#olvQu$__-! z^sHT6GWZgb&Q3nF$@ccR2+U$OkkBJKTeDe_2h%_4=BcxDb=L3c$(KSjsQ_|C_827g zR4Edp6yqo{=6HA)19$HVyJ2i0KA@^X$yyjiGpWaXd@MNP)In|7q7VA9@3Gh1bt{bZ zwW}sZL?U7j?prYm+NmFANF#j_ZxMFjUGr}-%wnox@)O|hS-yqgh6N_-)04a37H#O5h~J0vxP&As*@v6{6Zfmv*EPS zML?MF2ppUoz=5k>XM*K6@e(d4boh1jnsgBz;nx!IV8)_cS`24j3qF3q;v6w9(DLk% znN0zVB(1=Z$lCJM?%`^4v+s4ht*d2twb0!*4Byoazo;g%G6IRs~xXSM6n+rN1 z8xiH(@x&1+6e?~>xrNntX$+xzy7)theZ8)tt!+9t)~~x{Qhjd*-Tcwyqm9L>=7TM& zYM&L1do439^p=hy6i`fU0{pUB&6mYKG1@Wr7&Sg0SFaVZ~NW-oy&a9LG@)E`#hD)ay zJ?D4041Njx+O^j$|38hj+8Wfk7xm#HSg?&tZploFs>B+{&q=?NAxl^JVLep|SGvCFbm3ut4=s zL#x_``o28pW2+>8aEpNEO(YYdVXzSYwU7UF8?OvCoKt}QhQJ1=Qi?CP>Bw|Cw)Dud zX<`UtWzLIS>-Y+>a*`dUaA92Vv;H;hvTXhwl6%Uqujx`{gDk>m!h96^WQR7%d;;Q9 zS8>#nRkA@=7Oco#yuKb!8wk+CPY&B3K4YI-@GRN4_{0(mLLEs;)9*@1Hf+0rufq+3 zaTeIO_ZaT}EIO=zB#Xq{i2G3E7@Ru{ug&}SSO+<3UOQzwqBSWN_+3moL4*0uxxv9( zo^^3fm_-=JsNzr)52keU9&q<*HZABUAXkz(n->_6JnedXzTP$Q>^_yp##g%*16fj6 zw`=W5XF9gtuUdz1X@h>uXa7%t_w;mjQ7~1mgi(Uh5W@@mfcw6ef0Og|2@eR|xNB)& zg_ecqF~_Je-=M5V-#3v?aE%V(e1PG9$H?aA&~2TNrK88O;mxm={EnvXtf;Ug@T@hs zb)Iw9u}6Jk4U)9v5FixKdWW|(bH3Si0f3oT{-}Z%=>Q+tWUJygCf;6~;=4y`t#|wB zBM|;bkDKx@GZK>0_U4wELN<;oU_sunpy`E&Z%!tLXTUgUO;R$1V#)e2o4b3G3f$`r zCrJx3?ERGS-=G z+4a?h0Kx5OCiU}oeMUF2KOx_TVw~uk4LiZxR+gjdo)m{9&Lb`b5TLs7(PiF5~}Ar2vGgWHR?m@JLq zr1dlZNO)0y$_jW3;{aN}wsIeBg;RgwZBlO6QiJmyaU1c(bl^@}l715LxWog8iTtL6 zrp$_X$OwM1P$pbCIpj0gw|?6-drEUjelV2WGGA`74`c4|xsQPNtFikK!OC8TrD++D z*x%S(_iGf}@8Rsw0)l15x2Sq~0*O@l`J@>`0`HcJK(3S*H9GDwAbk7m*+aKY0qco) z6{DQrw%gcOk#m${VRs|}B~8nkIlX+4TNhTh#3K)lNoG!CFZH4gzXO;qIQH$uajY~AygzsnqFOE^z**Xk-1-76aKgfWt@xnOi_o0?AwW!iyW`Dc!w zEL{LIzB^ctK4=SN_*zXO$rxhlUU7=swIHHoA@`){{ua~Y;^#%w-bQQ^1pUoGOQML6 z17kl&=FCEH3X`dRAEmi0u7KjLEJyrQHBmqn>)7k)j-BG+xX+P7LUp{bX}n3_fQ#x( zq%Q}Aw{PhLqE7MIxE^@zb0l_rU%%`lId>3S#?VkCn$HY~K+`mlfA6|@&D?nG=wJ!= z{Xj)aN&yqH+l9>q)D5SzJ0)TD&%I*g+pZKmEm=aycM7!o#K+2W_&RUJA|(OtO*uJA zMDSZ;&t5xxKWyY@^EW_p8g7I$V!liom)TynipUL6-@AFQdG9Fa z<@?DtJv)d<0S?p4(>W>W%Wo2|iv~56#Clx-Gi<0|pK`vwBSR7_NJ>248DzSjWb$Id z#*7A)|G64DQLB)oOAoD80euX>*<`pFJyKYl47nE4^B~yE@lTzGIhY&evDgip`h_?~fTOyjxFMhMO`dit3_sZ9|L2T&xK z2<^zdijlYLmmBOxB8^Zr#A@7Xh1;6ENVD1J^k4I{yTwFL`1cRX59@>%Uc7z$c1c`b z1dTmjydHA!ultsI%O0R;PDKDS}u#}txdHvG|-Nane<b}~@iE|R!{_Q`>ezi2ADkDq za||ny<}sy>o8$3Sk#&&-y?jp8(?xYUyVvi2_bQyZ%aw4m%DQb}AfYX;zOAjkwzkr7 zRNcZNXO-;=$CXo$qs|}PfC*ky?&nH3`g>5tS7J8zM>>4@Iq5e&u}gka9oLysVsV~+ z6syF7>FgLHwQU4%WC9KbkN0QRMoXRcmZZ;)s}A-W+|Cmkk-;KIFfHB9+r_B}lO zH1&mcu0!40+PAee#zudJ=*a70Vl-)WDxjo(jeUi9`NMCJS6JTxo>bbgi{OY5b$YZC zg8Kazv!+15Kb0ijyf^_LtmLcCN z(<$=(eJ$hT`NuWh>=jvyOol-P%Eeckh@0S+8?#1xd4;w!=m3&#+K1ZVw=mzJ_i8%t zHC|jVVke!N?vEQkUf&Q2IC#g%!V6Rvw70iI7B%?e_=oDf8R@y|3>nF`+e-=bvp$aX zs~3_!xko*Ja8gLx7|nej{wjWM(nH+?+6Dr5F3B$NH}*rU=yy?wJXC+L{v^SFyxqm! zt;(;a!L9V;TBlOGa>S3==-G9iAwv0}X&h$4I+KrZuhx~C~Ee_{TRSHs` z_b_nbH83>vg>AB9I^5qE5fTbGotdilX+GJgPe@3BiWk3!zY6|90nc4EHOK>B=zYsX zNtvDZZROp6lGK7+-D_MAH;gDah<|hzSm;w1=N_iL98QU*Zk(!GP5hChmpt{OiRLW@ z6Z)6#ZG75R+3Y=AciTH!cWkvjL}oAF~7K&_Iii7<>DF-kC&Spy7H(T_s=Xkf4lK; zx+0F>ykTr~v}R>@t}X6xec}*8cMk?XbnkwLd>%ijA(-)7WI(_QwYCR)D2xA-P8t+V zDr;-Iz+_TA`6)OkGOo9=DQLa8$b9+F&(@!U?f5DLpfL&X@u8vtVR*@SNy!V$I%WA? zJu|2&k^al^A$bm+$7`=k3}H*3)1z$~9;lT`g@Om?$=Yo!UR+to)q)z3sVTE*q%xtS z<7z^dB5Dlv4Rug@0_eZRfmM?uX`Viel}Fmf-{u>X2Qo-rg=+B|sQb9j|)zzO{x)OJ1(G!d+{hIfz@k|2nQNRUm1^vb<| z&tGA9hhBoNOGeO~9S;GwYFYVSP}rP!kZ~yjx;Kdpab$v?3eXrO<E^~ z#O_pRW6tD2&(VgPhc!vT@Hip^vS+oqTo~B@&5%<-GD(T<{_iP2kRJuvrkpRuT))d_ z--q#4z>Q+jgFwDESHL@rcF2K^V1(pVP7~?bSV$<{y96}uk`ZYQ@nNzd^CAn=w68kKG`?GGhGO4u!a6h4<^%t zQSfFvVg8rk=#qyzhRYW`Mt{u>V*p$di8%{%t-uc8Y0@Y`8Zuf9MPlXwGGmizMM?(L z%PApoW}9GKbgJ&P9@$JF`QKabP&Qx`E=;Wj&A6bPjO{5!JdXs53^IAy@L>XQ#v{L> zcNZ7BUaImt#!PU4kC9q*N=R$;@X&@3)pF?{OJIyIZmZW4xX{Gt5GX<7a0L39_($AG zU34MaCB@k=m>alE{+&z-&5nOv2LGqaTnns{3er2s(e-5b=zAnF3~a5T|;LH z|A1`_??)DedVxSxf(NR^CdqskH4YIHHnb@Gdj<{4Vfsff{WlPFJX?Tr$-#|ddqow`4n&Fq zC3v>o{~qSakyB7GN%=AZ0su965pi)e>2jCNZDZWJUyE>Za&{_Z5r6smRY<7r#$P7Y zWS)-RUT6SH>m{4CbR!guKowueXTgq+4tIC=PL=GHYL_Yh^>LAY&ZJ*9QEqeJW1xIZ z`wp#l*~4|?^K2<-{t1boZji9MwDbUi5P#g5t|S=p$k~ilIYPmwIrM_) zjGi@~H99lC8!|Fe5)*fS+P&p9`=kp`lTpgo($TRnHqLd6%#VW9AXR>Xl#B7zoO ziAu2sS-YoycQvHPii|3N0452qB`B4XIos2LL4Yv;$GEtZ)YbV_&B-e$u(Po({d+;7 zgG!EetDS)vJ3BizHa4JN{qJw{`)aRF$I$$)-)4i-)8D@VobjKdeSiOK=Ldg1fU`_*j7oO4X2r=#*~zlC7v(s)*qpmhF;27KuBn?t<7$>CCu0t|1(r}qKk2s zmc${a+|kjo-(CI_xE4^O1oATb>(_Pbc2Y31{gL0eIXR8$9~Q^OX;@mmTjE)XattqU z?0R)w=YtwlaAhwsv%r$WpFXvE_Qa%StKMRq`xi+3aq*_qywOetkHj;R?OuMRL)d8PaGd^ z@=K%$z!vF^8Xj$ZC7GI>BxbrfSz)Kq|6cwR_&ZQ3<$t)rD-nU-11=Q}4XBgcTk0xq$hhC}y5m zj~|M0jEzn|1Eh zXWcH&gUS3~H>-)6U#{ z8Y(yy>~u3q%<6BRxa_SAuXfl#tsFHKRTYq+b>&Il;9$Vc@=y|1p{j$BS! z2O!jc8)GKq;tV7wj{ZibbDP=-%ngNNyu95#J;bse9v%R_0aMm$W`fgh1|9$U`pnGC zOu>%K9tv)5+_Cc}RlgV~RTffkIc>R93 zsD-Z2`RU&uDf}}2dwCBZ%34~^#$UO8^Jw-llmeK$^p?H=jsTQLD$Q(kTIw{hlvRY2yk$4pfa*R@v24! zJvH@J(U)A8r2Q-N^Or$QfTl6vk$Xu^L16`_%F&TqB0@j`ynL5Q-yJd%5)vrl*76Hi zQdhs}{yY5f+XFF`ERXRh+O@p$|e?L0!H? I&hpX!0oL1P_y7O^ diff --git a/solutions2.png b/solutions2.png deleted file mode 100644 index 54adf3a8e58b801a6c1073bdbd64c73cb0eca78e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14720 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 k&TS`K@L6Gil5J~Coxcm6N|L@Lx z-+XuG9vK+VZ=W4&ueJ8G)?UvE{U9&-9F+(a0)af2mJ(BfKw#A&5SVCWSn$q+TIeYF zgJ>u#DF%6h{>yGHjDtYPA<|+ZDsJfq%dYxbn>m7ylCdUQrC8DXgu{tHrgvJR->~nt5CQgQ+Ys7+eU0pdRQ&#pEbfDN)ahgfZ zNAfjK%sQu9u`iNV)0!4^VjHe#qPY~}pT$30b-r)?CafkV(dHWAfJG79R4J_H*SAVX zPk+?7P3p;4(cZ3?H;(4$C?`I&0B7ZFK>DRSgxd4{LhLB4Wp>|}*u~}r&os}9CHGC1 zs|MxMuY_+&y^ci`vg9}T66Tf#sSs;5mseLSl!~cnZF(a~>X%&>jiLlzOIuKd{`vFA zb;aFmwaq)zXUv?v=hv@3MQSDVI%MfkB_$=*3SE*N%`w-@qt&Moz9aZ1y!;O@U;Ure zB&Ii#RKR2KVs?9bBfq;>fsE_$(etqQ`*$>_f{;F0piQIv7hi;ivN&Wf7ObAs6i-Y& z?;g6l%^vT!X>ne+T&;NOCN+9q9U_ss{q_gHHew_>ZI|X27xyes^t>;o0}!6Ily?jy z&~w?X@DDxD@_lqyQ%icdsIysQYCTt~$P&l320KRTwpUi~b0+k3Ca$;o%-fsZ@64a0 z!?&q9t6F`gT-W>0FO;LOhuzYO70)Aqz@O34(Z|1V6d3f{mL{=1JUz9vv|2rR{Vp#r z4-XFwY}MPm+`YY9A1>y87}>R)NcF7#8z!6bf4{pCo)AwOe&-T>i zqnoMe)~L_rTZn8DQwFcIrL3&1p&_Lo91^B}LHt_VQpc zJUl#!L8Hoiobqn?sQu~j@!@XT@&fdi#Hh8kj4w{bQ->V7^if+|Tj^u1X-Jmt>g?58 zFWFt2Sx&$4ggLuqEm6la<`(;9=h^O_9v4?vX7$SKq9WuDumzDMe5Nb}3kwUTqnSD% zKXRxj0&(>;Iq$K(eOp~sC3v%ebJtDwblnSngxJ{FbUhDhWtm&23OeoDZocJ3)mK%W z=6oR~Qr|yW@6B@igL1d`f?l=dd_wkef~k3*&C{a&Zuv;{ySk!^3NAi=z2$TXbK7<2 zqnZ2l+80L$2hioq1PW9{Yb@->(xxU}4ob=eL&EbycfaE1=GxlnmDn?tPoGZUF!=R< zsIPcmEq@{N;T9BJG5oRQdDQv^on&Be5H5S%e5OM0X}0~*`C@lE@?mXZaq;P*!gm=o z2~2GCeR?z*Oq?f9$lwOdbC(y(bB@t#&+66Y{yQ3rd4m-di^K-OT}W9$zYA< z!9uMSm>MLV*LlFldwV1U3H>DvJ$?AsuPtkziO~?dfZP(9bWruDOFm)<-Lv>@ZEd-( zdb^J2ir-xxXw_Oyzvo)s=uUb^MUP0)UtU~nado&X8TqomudiV4p^#3U^}HmRca8OY6|rrD z!9>3F8~Jn^8k&%=U*WT-Ey1!p@2^j=0_|x=3WC3U8BKY+eSNZiNuDm~-Sm(-o+o)U zUyalOR#Icw9ag{Mu{Qzs{bnoeIbxtI26gPqz-Z$uV2*8PBYdi*z(9DB)|_W`%-D(S znh)yQpB|2^X1<@8%oO;_rE`y4*JeUqV_Z&Vbo|=4_M~&8;NrS^ygNdw)c+Z9 zS^1%GQd~@|wEJU4}?O1i(R~yKK^q|FrLw@;5n+Mu*L%M#r<$)2-1gI~Ia{1YMt-O~>t#hv^ER zgsiNi`=qLr5*mSqnGGd>>VBbyi;Ju6G%gMXJGs51h{eO$q84($oHtu_TaOqOyc>FS>H7Sf z%CM@;&~XP`ppR;S5~FU*^|v(JQ$zn{Vc-OO?oWDM_vhA@d#x-j z4;xN;FzT&Sa%SIXlzpU|PB}bG1D?=TLFnLu#mv>!)y~e&$*E>t#>&bH{8cSI*xRG0 zrM0lIAQbXxF(Q)x`0=BO$tEyFd^|kUTFna&Z#_LdNy*+0cizp-O%4u@;^N{X%%zCNikRja4Gi;Ii-_LSJz*xTFN^YiniCG8}S!`1euZK0=|?JVEJziPA7)7?y} zr&ztnv@A}%8E2@6Pz3iarAVa&oY4Bf7w9U8f5OAUS{pRDA|xa{^1A;dE!}^(+zigq z$;nB4M$P!x*gr-I`xG0$LsBX$D}i@!UJ~*+-vN$+PY>nUGh(MYOL_T7?~+2lPE9}` zJT?as9JhvefKezb2yF6;N{DT6p^3&W1DUm(4C3`_N&ePxU3Ol5dc0D|;N|%A=NAwz zWI8e=K2k)gDm*NV$da4!-)ngEf`ZbahxH%Q1_OU$CmPOq_hp|R-kLLwZxa2z!0T4k z3RU-G3`s88%YY#2#n}q(85=iEhpgI)!gk3D68GV*5NbYVIjYmQOhtv5*{Y>?cXtK1 z2dk^AzUMoNcTYEPT#GNK7>|}6?)DeWzKuFP(b^{NBcRAWzQug5ePq+GB~xcjKY#ga z;*CVhWJavAlG0}(txq2$^2XigDP!>GD5<&un0RaEgJWU)NHoki@_tB`Az9`3qw>Zb z0;56y4`I^Z*UIjirv=u+xL@yUS;}dWfnPK??!Vpm4-EIn@EiFO#if-R=Oi6F z{h3A>AhlPrp)yz;$lg5gRRD@p4-~d;h6KO>Y!CgIgrgC__5yKsB6Iq-QsZxtX*U4W zmPpK1u-M0CLFR+eGhJqP=A_s)Fjf+d5kIwji@ zXd0j+;t}EzmZKc)93nf3Q*8}?AMY8FxD1aa0NvY4hhp0&k0q5W$`eu>umJ273#P}y z1@N-cF4Aqf%hDw-K2|IXXc|b5`1m~i`m)R|Z7|tem+xn}A~qbD4dxNdnZGa0D%=V@ z`JXK|!SW3AU2B;M#{rs9zd{AfMqczKG%v^yOe91I(i7ScKh_%|LCi;7z0NPl5lVyn zLtJWOSMWEhJ~~97_n5#wDMS{eEHD{`TOmWTPtxFba}SWgOloqGkn4Z#%=XpT`tx`j|B_K5u+s<-D;u$SZ0T zrIQ$kShtmQ`uEo~J%&Qt+hso7)L#*_DvJ5Re%FTZA4My+a%< z%*^7xL!6tZw2Eh*JO=BwoNcvly|I9TjR<{A2A72H`A$M*pb+*s&g}%p0Bs%>Hdro~ z3vBr3Rs%T|%d*Ct1)78HWtK~TC1Z*?g zrM0Nt>%f2g?-Kr#HWp+b$u!Cd`q`+)pNR3dc@kA;VBpff(gYy-fy^CAgtKta)&8hH zfffELk;5#~2b2IMFdA9)H$9hT5bbR|qGMMuECPjD1U86B;j>?cz)A4i2yoC%lLqlU zDALZm3uyG1R@bU)&T+_e>SJQB{i-A$;GP@Z8b(Tmz@QtSHd)owmVT_5{$kZhU5=^f z2i3{vqB_Y;+BhrY%es)4(XC2VXC5;&NXXJGU{bDun5&nOBY2d^j4S`t1Ld=bR8X97 zo2TnSpnW8!$d2i;4R>@-#%`hXN6 z$NRm2pGJq;>9n+uAgMwYUdC$^5Rr$8NXe+de|5auQXJ3QeSZP@1|zvy8h7tyjpZ;y z1KkZ7SG+#QJJUM?3Q-|s?|HqlpGzIAqELCpmlF`|T@L5vN=&Ei!E8YAvPIe~`-hV7 z3^Ix%b^fUettS2$nsJkNd!9J5KHYJx+;nW#?Bc+=rssQsZ$W+Vq4Z+7+-RaoHEgxK zNMjA&zOjPEt);D_3tupgNG?o#YmL3DG`saksL&r*<-$};RGWo_k%jXnsCKYZdDAfe zh?t+c%$T3#E=u_sfAWM%A@S}-BEXFNhhmuY_s^pZ-aDZ!o3c;M3E}>9lCz<&z zAvfIlfFk1!*yhiYr?GDT9%j}fE9WZh%c8vUXUJBMwCo?vt`=YvJ8CbY|GJ0Ut4z_{ z&9}HH`>n^$3<$OG<+PPGzpt2~C^9^$C>;VTjevsQ0_-HD<;b3%}61i;ldoyW1~k(ZVAr0wqTYdiC8X%u|_|_si!Zk}s^IKynk$WF`u4+}Az85CdK{0l}o3Ghn?=>cb z;E1vyw;mF`kCIPn;1u)k!J|N!=!qbXE@Wm;pGF-V1sW zU^CI7QwYan3=0bbArBOsLj(Hb-y*F($FvWeX*T__)U(=-!@JX^1s)zI#v1``g4Ofi zm5TWvtZV3+X4LnPj~Hs3J`}!986LTEQ>)_hVs7MNU|?eynws8J?B`4ac9>oNxAj^r z+-p?=;9WVnuP>?N99WQP^+93><}Q4%yqQTz=;@$-_3^KQFYitUUBWJi{8I(JJ)CM> zjkE&I;d_FD#l^+l6~9qTjOp8kgoRZ-Ib^}J!|m>vZxhtdTVv16q#RLS!F}rJ5dF;D z_|N6N>85r+5z}aY&J#v0ZZJ!Okf~ZaJUCcdT1vc?NiCZQLLu4fF`|yWpXGg(QW>hV zE6cXNrHDNcvx1V8`<6W-lXjX=;CB4SCnwjX+JI<0K(u|fHGH->X(QZ>01XQZt56}U?dkDuROrd8U7!^q1eVf|)K0eY zsEU)qBH+Qs9DxEHvkpBVq>_@6v9z{kprhM8IvO1u43CJo*q+>jkoo3Ch4Grvu5s(P zM>(J7$yaCw0b2)fCYk_j9B+p0?o=_1dkr&OkPGl7BRY9T{v8` zgA!^KlrPrCKw0A`=m*=;5Y1b-(hMLb0Hk#^&*F+ zL!VfBlfH7AH+he+5iFlK2JiL*K0`z**AO!n`(}k>*NZA=d2S3vG*6AOQ&X7{EQA93 zA+IbBUKZqc<_N*~I(e#TwNNBSC!UCkg@6l8wPKjp!#6aPuOd=mlfS1OPW>lxCoLnkzh|4nYb$V~3aWPexoL+Z2%=&E z{z;yMyua%BJlSa*F9)#?b|9ZdL)BDx`)1V(z&3xdh)<~y=@CcN@fWzJcJ&F;5wZCc z?{S@=gDN>kG^PK7Cuhd}jMBQI`Z>--N(FeCbdS&`38XsY=fa`5)Pn=f)8`;N`mZOd zeIn;fhCs{|?%j(=OMZ_4F^~%GjA*9Pf~RPf_$TX6#?L$1I(UCQh;)XRkC(SG z$!1Ygu!%s$26FAVk|pGFA##=H8cnxtTD(PY*#4HZs7X<-rGMv{WnhgkWB*9K2%<|E z*i;dPAZDwCb#AVUW6q>Dv=fB_kqj6jXhModK1fB$yQVP55ub~g!y5|ROGW&6{i>%| zXCO2HA8btlVF*Ge6&<6%Yj6E8JTjbPObN*Cb^&#ke-<~b}k9xbWZfDFTb ziMSoQ+Tav$Nz%V+cM4so6F$8O>VwbHMFIw)s0z&z zjj5SIz2sCT7K!}GNQ)+AaubqLMPxgO=b2tX0KmC{!SO75ky+=wQkKZkMeiOh=@bMz z0qz8$2W<#KrH3=a0SjUsa-6?z_Pb5RrRz}q#eqtzcxa~xF)ezy!V+?y2MH+rw6nG2 z$-i@|n)R3tC=uuW?tngb87R^*wcg4WQO`l|Y1byv&G;El2u|x5g!R>rlqu|Rp-M?9 zSaFIrP6F|QTi;dlmRF@>kGzXMK==wjsZmsNY1UcK%z`HI;=kj+5TEFoZnb*XWu z$-r2wh;1t?`A?h49h@Q-xRU*I9r_v96S7f53qSnWZ4UqDrtLW+= z|B9p{T#7b&8dIo~H%&5~XCyiJ@xLpyh{>_S4Yc7xCGRz*k6Y6aG@PXw7Y0Jb?7vd0 zCU$!7T{o@C)K%@ZAs!wbj{HyFm^_IJkiM^k#_u1@DFP~c)VqMog>D39N|VG}L$(q= z?b#_Lv)Q7;!qXW7E4OoalqdiT$B~l#+z4ezORQ?-KAYVXb)B(_ju26=0kx#n^n=Gx zAa_uP?uE1*q{^o5!x7QJ;SuLWa;%fX*HUZ*EU=y8Y5c}lf6MvACd0HesH#Uz+j76Li8vR35>?a6N zWX9>t!dc`<60>E^S-80MRA4lI*2ItHk#A6nDxm{G27lMdBQT^j_;3;F!EP0=EFsMU z6-t$Sq6iHdj>i<`M!e#`hN8@42mObJx&%(N223AbZ@&}xqZl6j-}cC-89z5z%xBGA zSR$}Ire2%Q($FFSCn<911C3Z|jKR)gZDi8Ik<)XQR<%xS8df6Y-0dOLFVYhR{S!01 zPz^HDvi55nbBKqDPfgl_fHjtBw`spRac=fc@_auF8=F=rDrvj^1M-p_TwH^93_MYp zmBb``O+D&H)${4hpJ6Qg_Ha`npM1?yX3AB|B#23v_Vy`r^`W2F0PsvlXE`rQaA9S| z2c#GKZolK*1b)E(7LFQaS;gL{J&K;XqIeY;4HuM8W8hy7p;a+3SOYgQ#KgpTd3n!J zQDfucqDc5Sop)7INZ;($v7rO&QL9t?wxgWRjM&eT^PHt=nL~42H-;pM(JnY701@Cg zf-e|knQSI9PEPE8eSLi?Z_P;g-9EJSy4S4M%u4h|qAw_;MEH@8HMqXLQhOzC5FQPi z2NHr5Yt1VIzkdB{YHG@{t(&(-KtOO^`qcYTO=oj?o#+*1k9yfR-B}BI(`t=^SZjBK zRHm|qoVj=d2PU5Pr2^TiX-&-q9$~J|Z+?9ll9C1+6%_l?He4dt|xERN0fjW$0|3YowMew z7<_3iH5Le&kSCs#Zi zT=favAHRbv*4cneY%{pE+4M{&OH|O`(V3z1_v6yy2WBN6l>ZWn@sKevd_e*m3YV9b zmL?`9wlh7M*w~cXdT(s1hB}5#&V|{>kn;!h{0-ciQZpIE>V(lMcA(OHE6o zpM=B)N-kP^4FCAHVqz$T{s9kOq;L9MED*Rt1SLiln#=#G1yE6mH^K`3em_Y$75q21 zE036$Si5{1{wE>sp)cHvgBSbw0N`TAUNiWiM*mo!mUhv0vA1nK@JVaPZKZtU(-0~v z765&IKl!p|FmkZm+|}k0p^M3iv=+Is42>2QM1uIov6tS#y?j<<;HGqz^#faC*xXl`w$=J-MkCPkxbBTW?u0D9)@IB$0Ol?gWS;K%k*l zG3%*_lQyghu8uV{ELaGts;igDUVY!!508!y7Loe%%x%^jdu;F0=|$S`<%Us|jmPDD zqpFoqrCwg+LsEN-$ue(LiK4o?+uiQ8^z-M9t*wPM3zeVNQ@L!y2A!ahjoNTh=qJBBs9od)3bDdHYvDBG21V>6!h*tEgXZsLOPlXNGwRB6>Jv6Ys0P z^_(;uL`0}DYG8Z+foFe}E;MepSHU%H)^oapqJ#-LzP_KQlna-)`cdO_)tt#;pr?Ek z`E;b<>#@6t3!e@5xHNOQ{q&%BwRgO=S5aYO@d)z^N^ z;^p{b2EYey2oTem*(}ZH9TI0p+8ou=TC|2a40Xxf2`4-uOO;8#t|z)zl(E=2lJ^X1 zlX0-X>3Ka`V;Sxg1lg8nCo6rZ+*~5?WMr^DDM)J4^Ctt>%&Ry!cNyhQuob_0njG7Z zfQJVsF1B8?uU3%8Cyh31rn3!MW&vv!{+wAdICPjN9Go+d(2wH3h`)Q$H#++CGsE?f zoaY878`({*0Oauv!38YvQcPlaQ`U)EF3N=&Rf zn<`Gq^tA0tWF(5%>Lh#EnVr=sRQ0^HoAD&|K95bH*Sj0k(-rjOv>S-OJ8arZS<-eD zRG(43eE6|?wWA@H12W}*&PEC4&>K%0?J~V4Hw|BpA)mt@%JoiJ)(UCWADWStlQ^-0 zi}K=8Av@oPw#6r08aw9gI<|avkdZvO0ZCszrskIAS~3;5e7Hacmh*5`@}I4IgNp+^ z8lU4qn(NP*>#Vt#ytrrZu&HAsX$Og<*3z?1;M^lLaq!nhi^awK0eJg455d7)?|rk| z>GT8Z2VB(lu(Rj;){P}=95oje2S*MiazqN05%?V#4AnJhiZ@J!6Wo0#E&i5RP4mEC zE5;CK(Yu<21Uv^xvf0Dc6gHR36~&}*7!W2n%KFO~Q3FH@-Aj9kr_1n#&7N&lC$y?> zZ9_*KKOEowGgnXw1HZjpi{tXnIRbGv-Gi%HVxE%91cYV3VR3>^cmgw(^$;3Hs4t#z z1y;7Sri0)Qy3N|znn56k@XDV%d*vv>e^Er;0=dDVgP%? zpF<51XX=VR20e zE_!e>Q;d?;QlJU~`D%0o9$W8eB!xHnWHGFdoQ762n(;{dTWbsgC-NEg=}27zq5OiN1lF6u^Tk_wJ~|LjLB#=WBH0^h`=dtvmVs&Zfk$o*;T&eXYejipHzijg6fOK* zIU^(hr1!*3(abSRKJM-}?E7~GHTvw6IGY`aNn4@ZiT`J+9UxlTpx#1oNv@oapv^PW z8r`A>@i#4qBgOEd*Z*c9c+ncf5sRo#Xo8q1-x$n2ZRtEp&x8Y}wh zh3_Ny%8+OJr?LnV`$RTBY9LZm5p%Xw*m%$x9OLEamMToV`RJm;3sC6%V=D6`zY->1 zEpEj7mwQP~ms^xM@inmjUn6Evzo#C9SQyG5F^KEWFTR6 z7CFLN;w1L+qV8H(cC|+dgGnh7^(CdD6gDyNSQU7@h3C9-$@IRMoL}cCH{=K@fjKbz zzANQHTcAAe@*)ItZUna;ov5G1gIw0*da`VJ4;;oZM7aOdu@$DtM=207J2HZ_WngsB z3x3AV6Y2F)_N-5h+=%u9iK3QW{|er66G5+7|5_LYxuduzkR%8^2#nzO_6bSMA?Kq% zOcE(aFv%rh^4#;jqdWmJQvW&0K~#=18aC{}lgu*9TrKfsUUf_EjF1y46hy=R2nw?_ z`&~i9+h{mFurb1c=@=w!;%-fU&x1Bl90apy*nt5-`#{wfJq;4s9_-_ln`809byVq1C)}94E~t6 zerq<;0xE>c8@GtAvR1xL247qf-Q9j}>@{X<)XSDcOyn0dxc_+?c=mRiul%c0>FDl- z1jgQP(+ql0C)Cvyk&zMjc>bX~=hMmhSBX4)YEO~2*yg4tL&Jc=O$7>|%xoSvn@R20 zf1V|UgZP1%(;8xbcTm4rala!e#Cz0o_IQ@{v}E7)JTNg&srd1-zWseVH!JT#AgAt| zXd*n$KSxqGJ`qjv{M0rw?q)aCtiWXC;8XpMlarBGWk}<(q{wbZl$8HYofpIT?$+A{ z(ztyv%04oW#XZU+YU~~6*)OAw zH13XxBk(w1FcG)QeeT5$CXK{W(sy!peu0O#pmzi+`am%czP7!8O%!rwhROcx*9!d8 zP6L~{B6Xp85nYID#ov_UV&C+i8Ruelf&99Jnb|f1zBZ_N>H;E?Sf5l70`)`I7Gzi| ze1nkWc>dzb;<3$KFM1jxznr!YrNf$2+P`XX#9V-8eFXv6=g*%P7Btg_6Jui5Eb0sS z0xWOf{g$qmBpmY^XI~aP*pBCW;YjZJE55rg`d-GMk+rY=oRZoIga=<`3I;%gH#8Lg z3ZYCGA5*3M?=;=Tb^ZxcMCT9TAN*0Ja1)=e$H9DWXm3vW6KT$YwB%k33!OWh3a2FV zkDIi8^#W;Ia_RQ&6 z05;^pe0iR6`_9eWm#ukS=i!<*Go9Z$`-{OfyB%~|KS5eiiiJIy_^ZISwe{;>uM~rC zUlVH*^LLaDI|D5x7!}EZmjKNu0gMLgVTust(G2R6BNSM%_mbJgEhdw~?F0wtH~mGu zVFU0+l7Xm@YlP48F-Kr@A0a^Cxan~w5IK404Cc4!G_kj|7w;4Z1;*_Iz@kUM2VV!* zLvxNBg5Xe~4GLg^K}Oo8_Lf=3)X4*`i@J;&C+>~REqm@5aM-K}HnZlYa;Bi(V#Q1T zI09)z>NY;dG$PZI7nrq}IlllTMhbe~DUTsi_*qy?M$V8pw^81(tbNeQliZDzQ%Ga_ zn-?NV3Y}JsP9Ef2M5;^vVaVAF3#}k;;YG|ZSfpiqyo@%fPEnNDp!fky{@L!qw}SV4 znnw$i@hr$z{!wq(V8Y&IaHzVi|~mOWEZeHy3CO8GdQ{yC-)ud1*0Zc*`sK$sNB z;b1GXxJGOhZY0$uxLi2%lz)XAk#R-r{ve`0u8UQUq7Y7MX@C$T`cKA7P)|&j#65Du z|BZ$mr6|7W-jdw0a<6wc>XTozIl#7|w8_m9Fmkev8O*QNz^WKK^DZQLgr(R4ko<)^ z#3%}RJ7M~=L}0_qq{XQ#=v^%`#x&`l1(aO>e_Nz0iJVQI_gjBhWSbtxe-itJpi20$ z{_xL$udtz{qEsLn2LrqT))T|I?$&i8XqB}-AeQ|hw-f1kC#W2`JiPpYVnpqM9K#K| zBc~rj*n!iDFaX8W+rPHct@-~pP=3VJ^w%Ue>bMB3MS3>zOoc817lQ&D1iA22C_8@S zPYHU_y2l@f)gtTXh2QF*HqJ?qqZ2eF?fgs)d^>4&tIZ$d2fEHCKf@LIrr+G1DN~Q2OwWF*A*6_C`A<*m|4BT4)Kg2&weXZ{e0z-*&9 z0m{a8%epyXwCCZA(qWJ6EeI$=q4_tnAtHq6tn}5X`KhV-jRrPC?!$NfrX9!)FRPuZ zPK?1NPLWFhkI{;i?H=vx1GuXJm1upWm2n-9yARgr*v|o|03vyt zoIXq}V5cxm+N(ttSc%I5mQZLp+A@CTMUx<94;{4VD;BJJa;?4DjePH7e@CdnA*u9V z{kJAA@kiW3cV1*N)Yu@-gf~V%B&p9}?9;Tbywq3lje0oX&L-M9udAtod22$%N4)p` zLRqQMO;4P19H_N$Mh-w2#8`ZS7A;0s2Q2#O7=ydANbqarVLH#M@hw$|$abZuxS=8p z0wQGUYtvWjX6n__`;3C*5^>0|>TWO+tUDVa1yZY9kD|FbAXrfo}mBvG{ zWz<>+6>)y%*+XZd@^CnyahcO1b{BS*mE?ccQ1f~aqHd^ORc4&FUgp}G7Yr9*Z`D6T zZ3HTPUI8EPCu%Ozx_s5+WoI|N0C}!0rCer4P%BI?;;c($7QTfvbZF)}A$& za~s;2>W^%l`35J+&zz4*aCGjX^|vnEf%y-rXf76zF1u>>voVAwqD)Oo_1nMm3I`Rf z=2(}I1mVod1cgzbrm0Gml3gt5)m-jhcqce{ePo}ci01vkw`6mA+pw*|wQtCn5gq)G z?N-6T5EUk<$!VJs|B(tCI5#mI&CK-jsCk{?&2il$jcl@+oR_9n#GXro zWWdD7Xeo7|I`8}56V^@^u?rF01!9D?S>TSGu^>P550$qQqPhKjdXgloE+R@gpc#|c7DCgpF_n2}8?$S1ZA%(sc(+YyLWnDe!yl5V3HHA3(bqQxJ zW(mL#-CsJ_{%C3`^AeeX<)M?NB89eg(h53>IRT2aKpgx-nDe;SlWZSincgI^%6l_& z8amiDWxzHa_b-xuZ*IfBYv}yA%O&4t;46SJx4u${4z~>xi4gcCcydJlMvqqVA|wdF z*6|?QSsK3=IBM36^On1;Fb$Yfea4L%#r#qAZsyLcs86lB4yb zBsyqbYb&g{UorxYhvV$ZlN%_taRir;Li#`zjF=JXCOLfNWlL=ZsrL(EJj}fniwh*s zG9j-tw> zJ>JvUX;U4veRz*At?tCf0uaA~(bL-$zkqRzsYMWhuwkr7CQ28ZvEWTTvLB)k}gp>~7 zo@W*wY1l`tf^I?aTd0H|9)%y7!tJMsAEsb!WN=5284BAwK*Iy@xrYC>}j% zaq8`EY2o`cm+6mcpgLIkf}6ET;(&?F_vY6|=%}^lj>GRGIGOTEaVp!R%kaWmGp+PT1~Cl3EeNY zE8I6{?*t0LFzV=lB8L0ctChRcL1y3O*?J5XGWWms%LX7w^UA53Uz(pv>Qe)y()+}q zx)~Hs@5eiU_yge?9y=%Ju2WNHX6Dq?l!DNM(@6TyG!Dz!CO~E?P-;BOR{6~xy{lXH zRl*2VhIn3iNOZRnAO905k!jh9Tasv?%a&(9`E}y zHvEw#Zqs12tIgd1t5J1`VVCu&RDw$d%?(LI1=G+lw`r)ZJ_jx(xThqEh=~5Iuanr} zU}Nv@?R{yQH?1Z_``mogb_WFZvh6iz2R6yF9b3v$Y2&=LOLfj)S_@epyRI}>9wkgj zG{*NIf0prA1&(}2;&y2P`;B|=@X$0o+6!1X%KmcmRX4t#Q)AKO-_IzW4GrAY^ZRaA z>_i!kA$H&L-(>P(S zM|~eb5qGuIU!~P7YD>(Oi{F6?#nU?SY774DrPHp<-mV?HVpORAQ!-sUt83+(k(5;L zusMLQ=cSl84xN@7Aa4a?2+mDTo&lPNWv%AFzL?Z2_4_$y*(mPC0MhiY|zYG*4EY5_A5I0 z`ua*re%a`bov^P$3-$wyMJ%%cx5DOTK1#{}>Myqa9<73mjPE03p|{FnfUx@i$57N3 z6rnH$g&Ccgn@kw9@1@0Ym3L#ViwMYe6WP&X|54Q?}H)0E&dVm#~oSZz!+^)S~`0CXwk_wP+%FWAb zWwHd^M?kj-4G)Kl26dBhan*LKf+!`(Vq#)|+$Kp~t63Hlz6zK(oYr&4AnhmnF?$)1 zBDaRq%sA74Jv_~5*#YI3)e?l>e2Pj~So}51^1hr>R?uKbYzB8v`0dxhD%61K^039# z?!H@Gm``V){q5T~u$AY4T6WbG1Xzvn@wmN<;6zJJC8904%m6kAJrl~C4;@DA$d-NX z4xX-jpYX}Zm_Pcv00Ehpn6zJaGlMJkOrP7oWRJ&RI1itTt^jk!ya5Ml7osB|XFz~2 zES(0mqsyd7MmMH2^jXYd2JO*`^A+dy^A-Ud@ z7Es+dZCMLwfg=(52KT>_ga}HE!@Ex}7wwV~5(LhM-U4@XX~}=JQcB-R8+L~ zW;S_v3veZ0;Ns39k+&wMq}%{?>tP>|PXQCPE$AVan9G)d zmNtdM3eOMp1LhV8h&-Uvs3U5S?K3qo>HhT#5)vBP-``Km%$($f$4U!-MN|;|!~5oHu}$+2(x*7{wF2yOtU9+n&@moQr@%>%P$!19bIQlH!m* zsGfaU`0jq=jZhr{d+p7#{hX+OH0dl@4CQg44lJTP}H$1`x?Oz zSbmQ$HS z6bHP(A#k9wdf%S&IBr1zVOw|9o{+dycK(CrB@7u&{7yl>?0phOsz z8dL!TPvh+D45)qtd@kQNHbEILnUIgy)=)~MM!aANV4#(iIk$W)RsnhD^MZ~*B#caO zA}rKc+}zv<&K?p2IAJ!L>D(5ZmBsvVfH$4rolQVMfPzA#lMRDR5ZVt&V6!6h=L6aCTm#ck5rzO3^$_=W|Dw79%jxu|}?{{qE_A65VW diff --git a/solve.jl b/solve.jl new file mode 100644 index 0000000..7197323 --- /dev/null +++ b/solve.jl @@ -0,0 +1,59 @@ +# External dependencies +using TypedPolynomials + +# Local dependencies +include("homotopy.jl") +include("plot.jl") +include("euler-newton.jl") +include("adapt-step.jl") +include("start-system.jl") +include("homogenize.jl") +using .Homotopy +using .Plot +using .EulerNewton +using .AdaptStep +using .StartSystem +using .Homogenize + +# Main homotopy continuation loop +function solve(F, (G, roots) = start_system(F), maxsteps=10000) + # F=homogenize(F) + H=homotopy(F,G) + solutions = [] + + for r in roots + t = 1.0 + step_size = 0.01 + x0 = r + m = 0 + + while t > 0 && maxsteps > 0 + x = en_step(H, x0, t, step_size) + (m, step_size) = adapt_step(x, x0, step_size, m) + x0 = x + t -= step_size + maxsteps -= 1 + end + push!(solutions, x0) + end + + return solutions +end + +# Input polynomial system +@polyvar x y +F = [x*y - 1, x^2 + y^2 - 4] +T = [x*y - 1, x^2 + y^2 - 2] +C = [x^3 - y + 5x^2 - 10, 2x^2 - y - 10] +P = [x*y - 1, x*y] + +sF = filter(u -> imag(u[1]) < 0.1 && imag(u[2]) < 0.1, solve(F)) +sT = filter(u -> imag(u[1]) < 0.1 && imag(u[2]) < 0.1, solve(T)) +sC = filter(u -> imag(u[1]) < 0.1 && imag(u[2]) < 0.1, solve(C)) +# sP = filter(u -> imag(u[1]) < 0.1 && imag(u[2]) < 0.1, solve(P)) + +# Plotting the system and the real solutions +plot_real(sF, F, 4, 4, "1") +plot_real(sT, T, 4, 4, "2") +plot_real(sC, C, 6, 12, "3") +# plot_real(sP, P, 5, 5, "4") diff --git a/start-system.jl b/start-system.jl new file mode 100644 index 0000000..11de79b --- /dev/null +++ b/start-system.jl @@ -0,0 +1,14 @@ +module StartSystem + using TypedPolynomials + + export start_system + + # Define start system based on total degree + function start_system(F) + degrees = [maxdegree(p) for p in F] + G = [x_i^d - 1 for (d, x_i) in zip(degrees, variables(F))] + r = [[exp(2im*pi/d)^k for k=0:d-1] for d in degrees] + roots = vec([collect(root) for root in collect(Iterators.product(r...))]) + return (G, roots) + end +end