From b09a6bda0418d3a70658716d578ff27ba3e0c7b3 Mon Sep 17 00:00:00 2001 From: tsb1995 <47466105+tsb1995@users.noreply.github.com> Date: Sun, 29 Dec 2019 12:02:32 -0800 Subject: [PATCH] added plots to the riemann route with image links in summed.html and rightsummed.html. Also fixed algorithm for riemann route to account for functions not centered at 0 --- __pycache__/app.cpython-37.pyc | Bin 6004 -> 6490 bytes app.py | 25 +++++++++++++++++++++---- static/img/riemann_plot.png | Bin 0 -> 19028 bytes templates/rightSummed.html | 4 +++- templates/summed.html | 4 +++- 5 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 static/img/riemann_plot.png diff --git a/__pycache__/app.cpython-37.pyc b/__pycache__/app.cpython-37.pyc index e781f97c2b1d37bbaff4303ad3a43e5a025d461f..f2ac8aee6cd4de75cb63792cff050a6025f2f6f6 100644 GIT binary patch delta 2764 zcmZ`*&2JmW72nzA$MS1QkrYW$5>3e;F#}tc-NtcIr%hAaX=0~w<21InY1kEKNUpNG zWM)@3r7pn&${`mc4kmv9bqSIJ4N&9~}2g%_Vc0m8T7w+9NbgGw&)Od4iQU8#GIE z)aa=+|45|;Iwv_z$tfPhS z=!tg~^E4~b=G*FH!mogvXZ94>TI`O}TG_`?wBnJV#LBfulzNSI0?X?;O#G3&l`w$I z4bf6Bi@cGLJA5#u3U!d1`mNj59B=t-v05B_R4m07Xr! zS&}AMP1g*f6GP<<@n21(kjcvcqN$w_U&KmeUi>+Bc2Y%p4PgO6M@S*m0nC)`1+2%d zfbk_HY5*;bFXQ+G!g0=JzET3mPJ__5Io1T;`i_2q+sw5*uLD#0pqIGcAH(1O62cNF zn}iYwvC974^klys%(R@ta$=+2!Z%*oMj@A$9txCPg z*NU`QRgNfMyQ@gk>Cw}n4yIPenNXP;;Bsb99cRO|G@C^y56nF{(8!I>glXxV5gK8# ztblax|D->@t4xA)kPmaaMD8>{+xfT<6sB{qA1y4XAR#LMG+3q!VIm~b+Z3CsEwna);adcz7dnkrVm8 zw2$w73a~ThGizhOz4H(IHlBBzM&w~ji{cM$8uX(?pV_^BV5S)DvChC5@O>=Sokc%@ z>g!yv-QHJ+xIJ_R!P?O4?PUBd*JX6ApAB56m6=t_N%4FAN<7lGxFh!Um1i0}1`F|H ziZIfkiex25x?{N;Q1IKc8mx=;)ag{D!TOQv4aFzM%EZ)q9gAmREi+|N+8$a#r*G;$ z3)&;cc4wn)7)43ndceANFN$}ZfzM_YU7l6+N%Un6;R3=sKoke#?e5I`i%7kMRATe* zNUrS-w*vF!SisyN|1OdegRKB){283YsO<+4xo5_#5%bL$hYonOmn9GC|5;G*9r4%H znVTdV*GZ8ippg|wL*lBOWl2T8b$A;Z%49(T+8kMecMT-dM313XK`oG?%3t~H>GVhH zH@aU#EJLzw`L(HpexL44=?6Qk6GUNWhdBFHpr2Y^Rc z@#k^+BZLYG>3Une8}h$?# zu~M#n`>psUsKTx2x1ptMFfQ}RF<-OHJ%=mDyUxH0BF)w$Z>1P2ctiT_4y9*#E0`AUOkeNENo@K z`*4^Y##7K3{RFHH9}`e*d<#aA-fp{=?X}yjrv$A$&t$dWxir(R6=2tM><8HEee`(=xBOj32NrWRxMBK%&eU#nl& H^)&e(WM*?> delta 2180 zcmZ`)&2JM&6yI5U?e+TGu^q>DLL3MrkP@I2l@>wES3jUgB~V}sq?^n-Y_Qj6c7u{= zT??5?y&yq{Q%}hSsYn&7xU`q5e?qU_L)9CNRQ1$D)n5AEY)Y*Z*79%O%mT@IZ|Zn5sY&oWt1H*L;}23LvhTsJGhH*emZHi!Arh5nq>*f<^$d|rVrF|p&zS=> z+9Ow0J+Bw^qCTjX^dY^hSIpd6m8$E6#;A5z0?lDFw^*fdnxM%AnWpZ^G)*&t84*mj zkIB&i!E6JjTc!Cvsz8f^8Wl!^eN2fC38p5PavxKnRl$tWVLEbG(zlygy6vWXpRg%# zbH};_p@nCp$8F`#Q|^(A{AY4Kk_3(=`EhwVnF7&~QCVhb{;B*m z$?~btqum8m$s+{HD50*OrdGXf!s}eiaIKb|<1M8^hIuK>BU#iM;NOH_BYFNTJn=~p z7X}eZ2r5DhVF*BvS+;8~FvB%j1s6jAlOa|`c?97_`^Wz^g1vX(-UqjV>Z&@;EVF6Y z_B_nQlLkcJPr%)DKxEB-K#nHJa5+NzuK5HxHY+y!xvY!z#9@xNfHSR1mn5QTME`$k$Nd!?zyHVN$;1i2Y z;iy=4d&$+quGws}S8yfLT5@5D?M2-!r61iau|vQ)=OzASe0;y6k{pQ;jbun!;E0$d zNKuR`jHwW^DLF$jGCTZKOFWYQ>y(7MD$64lgt=>!D+F5_^PP0(rjDx6>)67+Ax}P(7!7|zm-8l zSDaSkw#i;aZP{+?5rZu>jpbmpY(E4O0L$i2wAuhWfO?^ZY5Pi>VLqn$lT4`#8yUCF zy0zdd^Np5ciUtp|QVg>4JR!aUUd+~+xM9wq3#z&7GHBi_>^+#W_i-({xyDZ7(rJWK z2=4&+VQM+9PcAdegda8A{8)B-bxXD);5fM50u`tJ#bAN+>_uWc-N-uq$IpBD&kK0! z>`egcSEyL_21pxeekWGshYGo&<1k%KTrlhfxb#NPTDHlKqQNn46!Mw3P<$H!_1Fpi zS>Y5kB8Ub4W1-T07sOS~XtUOGQ1RuL7I;wGXTbojMrRhPV9sPBj|@{4B<&zbzEW?r z4A&1Ca}GO))Q1QkAe={-LAZc$?jqt91RddH1iXENR zvrWUYXJ;qJ`E=>68m2)+r)y2aZ8utO!@yp?p6`!p7#1&rpj&z*Xt*`iAg^C(_j4qh!)qLMuP aRcQBwoL567ITtSH;CHxuvV2NaHS!PSvgVfn diff --git a/app.py b/app.py index 375e915..2522160 100644 --- a/app.py +++ b/app.py @@ -3,6 +3,7 @@ from sympy import * from helpers import apology, setup_symbols, gif_apology import numpy as np import matplotlib +from matplotlib.patches import Rectangle matplotlib.use('Agg') from matplotlib import pyplot as plt @@ -75,6 +76,7 @@ def riemann(): # Setup our symbols for SymPy f = setup_symbols(f) + lam_f = lambdify(x, f, 'numpy') # Run through Riemann Sum algorithm, creatings lists for display # of inputs, outputs, and areas (their products) @@ -84,10 +86,10 @@ def riemann(): inputs = list() if sumtype == "1": for i in range(0, si): - inputs.append(round(dx * (i), 3)) + inputs.append(round(lb + dx * (i), 3)) if sumtype == "2": for i in range(0, si): - inputs.append(round(dx * (i + 1), 3)) + inputs.append(round(lb + dx * (i + 1), 3)) outputs = list() for input in inputs: temp = f.subs(x, input) @@ -98,13 +100,28 @@ def riemann(): rectangles.append(round(temp, 3)) result = round(sum(rectangles), 3) + # Plot and save figure + dist = ub-lb + X = np.linspace(lb, ub, (dist)*100) + plt.style.use('seaborn-whitegrid') + plt.plot(X, lam_f(X)) + axes = plt.gca() + for i in range(si): + rect = Rectangle((inputs[i], 0), width=dx, height=outputs[i],edgecolor='w') + axes.add_patch(rect) + axes.set_xlim(lb-dx, ub+2*dx) + axes.set_ylim(0) + plt.savefig('static/img/riemann_plot.png') + plt.close() + + # Choose template based on left or right sum if sumtype == "1": return render_template("summed.html", value=value, sumtype=sumtype, lb=lb, ub=ub, si=si, dx=dx, - inputs=inputs, outputs=outputs, rectangles=rectangles, result=result) + inputs=inputs, outputs=outputs, rectangles=rectangles, result=result, url='static/img/riemann_plot.png') else: return render_template("rightSummed.html", value=value, sumtype=sumtype, lb=lb, ub=ub, si=si, dx=dx, - inputs=inputs, outputs=outputs, rectangles=rectangles, result=result) + inputs=inputs, outputs=outputs, rectangles=rectangles, result=result, url='static/img/riemann_plot.png') else: return render_template("riemann.html") diff --git a/static/img/riemann_plot.png b/static/img/riemann_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..9a7e8692acd6244c14f8d70d10e57809f39ac622 GIT binary patch literal 19028 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 literal 0 HcmV?d00001 diff --git a/templates/rightSummed.html b/templates/rightSummed.html index d505856..6c260c4 100644 --- a/templates/rightSummed.html +++ b/templates/rightSummed.html @@ -52,4 +52,6 @@ -{% endblock %} \ No newline at end of file + + Chart +{% endblock %} diff --git a/templates/summed.html b/templates/summed.html index 72f1fd0..08725a1 100644 --- a/templates/summed.html +++ b/templates/summed.html @@ -52,4 +52,6 @@ -{% endblock %} \ No newline at end of file + + Chart +{% endblock %}