From b95875585cee7b62acefafca7e8d1378bcf34e9d Mon Sep 17 00:00:00 2001 From: Sabari Ganesh Date: Tue, 22 Feb 2022 09:54:06 +0530 Subject: [PATCH] added derivative calculator --- .../Integration/Topic/Calculator.js | 239 ++++++++++++++++++ .../src/Components/Integration/integration.js | 6 + funwithphysics/src/Images/derivative1.png | Bin 0 -> 12597 bytes 3 files changed, 245 insertions(+) create mode 100644 funwithphysics/src/Images/derivative1.png diff --git a/funwithphysics/src/Components/Integration/Topic/Calculator.js b/funwithphysics/src/Components/Integration/Topic/Calculator.js index 15f90f784..866fafbfa 100644 --- a/funwithphysics/src/Components/Integration/Topic/Calculator.js +++ b/funwithphysics/src/Components/Integration/Topic/Calculator.js @@ -5,6 +5,7 @@ import { useParams } from "react-router"; import "./Calculator.css"; import { Form, Button } from "react-bootstrap"; import limits1 from "../../../Images/limits1.png"; +import derivative1 from "../../../Images/derivative1.png"; function Calculator() { let { topic } = useParams(); @@ -134,6 +135,47 @@ function Calculator() { " Hence,the limit of function at x -> 2 is -0.75.", ], }, + { + topic: "Derivative", + details: `The derivative of a function of a real variable measures the sensitivity to change of the function value with respect to a change in its argument. `, + formula: "f'(x)=(Δx→0) lim Δy/Δx = dy/dx ", + process: [ + "The derivative of a function of a single variable at a chosen input value, when it exists, is the slope of the tangent line to the graph of the function at that point. ... The process of finding a derivative is called differentiation. ", +
, + ], + example1: [ + 1), + "Find the derivative of the function sin(x^2) at x -> a where a is 3.", +
, + Solution: , + + "Finding the derivative of sin(x^2) we get , ", +
, + "f'(x) = 2*x*cos(x^2) ", +
, + "Substituting x = 3 , we get slope as 6*cos(9rad)", +
, +
, + " Computing the value we get the slope as ", + -5.43 , + ], + example2: [ + 2), + "Find the derivative of the function 1/x at x -> a where a is 0.", +
, + Solution: , + + "Finding the derivative of 1/x we get , ", +
, + "f'(x) = -1/x^2 ", +
, + "Substituting x = 0, we get slope as 1/0.", +
, +
, + " Computing the value we get the slope as ", + Infinity, + ], + }, ]; const page = Topics.filter((data) => data.topic === topic); @@ -414,6 +456,199 @@ function Calculator() { ); }; + + const Derivative = () => { + const [parameter, setparameter] = useState(""); + const [func, setfunc] = useState(""); + + const [result, setResult] = useState(null); + const reset = () => { + setparameter(""); + setfunc(""); + setResult(null); + }; + + function compute() { + let f = func; + + f = f.split("^").join("**"); + + f = f.split("sin").join("Math.sin"); + + f = f.split("cos").join("Math.cos"); + + f = f.split("tan").join("Math.tan"); + + f = f.split("cosec").join("Math.cosec"); + + f = f.split("sec").join("Math.sec"); + + f = f.split("cot").join("Math.cot"); + + f = f.split("e").join("Math.exp"); + + f = f.split("log").join("Math.log"); + console.log(f); + + const exp = f.split("x").join(parseFloat(parameter)); + console.log(exp); + return eval(exp); + } + function computewithvalue(value) { + let f = func; + let v = value; + if (value>-1 && value<1){ + v='0'; + } + f = f.split("^").join("**"); + + f = f.split("sin").join("Math.sin"); + + f = f.split("cos").join("Math.cos"); + + f = f.split("tan").join("Math.tan"); + + f = f.split("cosec").join("Math.cosec"); + + f = f.split("sec").join("Math.sec"); + + f = f.split("cot").join("Math.cot"); + + f = f.split("e").join("Math.exp"); + + f = f.split("log").join("Math.log"); + console.log(f,v); + const exp = f.split("x").join(v); + console.log(exp); + return eval(exp); + } + + function slope(x1, y1, x2, y2) { + return (y1 - y2) / (x1 - x2); + } + + const calculatederiv = () => { + var at = compute(); + if (Math.abs(at) == Infinity || at !== at) { + setResult("Infinity"); + return "" + } + var y1 = compute(); + var x0 = parameter - 0.000000000000001; + var y0 = computewithvalue(x0); + var x2 = parameter + 0.000000000000001; + var y2 = computewithvalue(x2); + var slope1 = slope(x0, y0, parameter, y1); + var slope2 = slope(parameter, y1, x2, y2); + + if (x0-parameter === 0 || x2-parameter ===0){ + setResult("Infinity") + return "" + } + if (Math.abs(slope1 - slope2) > 0.1) { + setResult(slope1); + return "" + } + setResult(slope1) + + return "" + } + return ( + <> +
+ + + To find the derivative of function + +
+
+
+ + + + + [Trigonometric values should be enclosed in brackets (Eg:- + sin(x^2))] + +
+
+
+ +
+
+ + setparameter(e.target.value)} + value={parameter} + /> +
+ +
+ + setfunc(e.target.value)} + value={func} + /> +
+
+ +
+
+ + + + + +
+ +     + +
+
+ + +
+
+

Derivative

+ + + + + + + + + + + + + + +
LimitFormula
Derivative of f(x) at x = a + derivative +
+
+ + ); + }; //adding the calculators together function calC(key) { let currentCall; @@ -423,6 +658,10 @@ function Calculator() { break; case "Limits": currentCall = Limit(); + break; + case "Derivative": + currentCall = Derivative(); + break; default: break; } diff --git a/funwithphysics/src/Components/Integration/integration.js b/funwithphysics/src/Components/Integration/integration.js index 8d8b96b66..390adb125 100644 --- a/funwithphysics/src/Components/Integration/integration.js +++ b/funwithphysics/src/Components/Integration/integration.js @@ -24,6 +24,12 @@ export default function Integration() { formula: "", process: "", }, + { + topic: "Derivative", + details: ``, + formula: "", + process: "", + }, ]; return ( diff --git a/funwithphysics/src/Images/derivative1.png b/funwithphysics/src/Images/derivative1.png new file mode 100644 index 0000000000000000000000000000000000000000..4182c2cee454ddf873b450eeaee6ae6f8580bdb7 GIT binary patch literal 12597 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�VLfr|2vt+UwKN`|y17iGGImvxlkw-YWz0$kzILpU$zy%56!PBfl#=7*jp zpBgvkUHBO2#&^{TwpK)Qn8N?T*IP6(Z43N^gO2Fj$s(rJ%K*xP< zab}r5kL#&%e#D>G)EQzxoMMjB&e5+@6t0Rf$_30WbAM;c2=Dz!8_gq1OliS~McHx; zu+r(!&||fPVsuyjUQX{SL1n4xoIuIKnIA^x(d;mQiv3zRx$4RcGC`)LV12ixC}y~Z z%ZruecMeG6UK#bu`o|Jb9yuTpdVXjmtxrjr?|Fk-`l3F#xPH(P0_(|%R+H>yhBP&=#Sxb@QtGMrt}BTPvB zl%~@AR1=?F(yF$RKX(JVZ9L&133yp~RXXE?f!V86^HWzkon@0;QIAoH&5wUx>QXn{ zarO+;H0o#Pjlrm#GFj>eEC@d0@I1YvtoHuH@y*_Es{OpV(+yDt&nV|3-}mN@w6B_6 zcYQ-wM+V&)5jn1~tK|O^yr(MvS$!C2;SoB{j zD8(G^WQh8!#GRp2aK#x=L`!P}5j+Nw>_%@BW%CmiQDu7!a<}{4Q2^T4z1Iw~@nKib ztpq(#&8=`12E7$)L|ebP&W7+zYt$TVl8hg8?SGNWQ=R%ag)lpD^j2%I%0lnS9|?D< zs;vF$ORZTO+S2GG%F4U`pD8l)%dsF3i?qjX)>paz;Lmf|hYo+%=&D!fZ=}-H>?Ss<%oRX73o? z;hoS#SM;QKY@%nAhHzgydiT9$Kb#d(?V}fFXE%pVfxe$xE~S^t>%K~bM>Yb<9FxiN zjO;~F)i5G?1KjCPZsktVB6ikr_Fi=JMXogPNY>m3 zdr}_hQ7o#NP-WT+x(ush-)eI2)SHhBj=xm~e@%(a*2<+_v^E8&Md_nM1kQpAzCg`6 zE%m``mh;iBXb^!Rp(@lNKV?NeH>JU<9y^S#?*@W8NT;>&sj5hc{hDJ!Pd6iks4BE{ zmAz*hwXPv#&`AW>>)kN7t)iQS7L;YxwAv%pjtU2@D zS1;|aqKnC~A}gY|{kKf5#!Ob|@Kh+kmMX5W}jt@jG|h?gT{Q8@bJ8Z7ee5{suFtq=osaQ>l1u!o1DAkTFEOvB~vrpkaLU#gO$@d zhFodl!S*fQV!cY?jx)w_3Th8hf^1P11t7~jCX&}FPmTT7Mi=7ed4z=sCGJ+<_vye> zDNTr)#KZXvONPU@#j69y@bR*LM_w2HDKF8IiD#aQ zyzNArF%5ix3p{0CwXimRfjOLRVd9?^(sJQS`){XhG?_UtJwAhrZWRIOPPBTjmUm6D zdalekyMDjsjF^Z%4ZikY=(>@^qGACJmicXga}+l?yRHM7OxsxB{9Sj(hb+6|^gzNQ zt>!YHKZ2K?&f*m@EM%ZfflIEUX5nZFYAgQ09_op!s{DpimQ&uefC7+al8ldXaU!dl z>XSexFKJ%BpXgFg`LKIfUK+t_7J~z|zt%svn#jRRZYQdhHIr^b%)hQ)jP||7Bh-1F zmt}MDng~(s%M{CiOG7s#es_>)1XOv$r2fy}`IC4AOUYR#PeD6>Po5<14r;XGv&&gl z?p29suhTPt+w+#M5-a71DgUUoBY{BiyJ=K>iJNhZySm{bymNg@)bEQLPAYxXxAb$3 zjlc5boqm`dNc-A}IDTf=f5HPo{oLw1SB-n*j(uO4R@jY&IX?=7M5v#(`y;srm0cR2 zojhB!v@LqmM|ou7ERnE?uNbTN0Y zF{vM@HT1$iH#7xnKlZByeDg8!A!XiO$ZJJ2+>GXHKHKNt;0yuT$XY z92W5(CC!pX`)~C}p1YZS{_;u#2ll4c)^A_e$mQ+b%E{>YYxl7DV_4ZUs}p-)npb!L zMW!|qgelbEpdeZUY<^>%w$(CdsLVE-XtWUXGe^m#llmdLW2wD^v(odI!+J;9{`hfEq+oK180anKU0G9LSF zi$rDyaN?CQt(xiv7A7ef4rwXH6YvqoAWR}QW4No&9VbQ#kp3LWtynNAq zjA_c+5biW{rC_GOmtSlZjYDxh>F|5Wvs56Q!k{fA5)&*bDVQ9e$q|&((YsQrAv#OK z=q@VIsj?=I%K$7apCzIjwvkFJcqzXbdfl)nqawQ$oPTokatJWCoWeTp33yEsMev?G z$_bsKc+R;SU#oZMNiOP!;OsaOXs$SBII}SGbBz&yf|ntgJoQSMv4C$E-69EO!jPRO zdEF<&N)(fgDU-}UJiLdhvXcN3+u-)@bm^r@^*Q5YUpvc^X^Bd)P-OTxoo8<+n~%Mz zu~MtNEd#0y=6NAFuajZWra>pj!3|omPyyR<(1iN=KF_B<;MV^*3$yj=i`O7(RQz0ZNZz$0o&;BxZG|x{k0d88dMcI|5Kx?edSPw zEP|WM_%gHs3yArTK)|PL0!{t8qNMfhU%FRant2*v2i2@GcB6#aO{o?u88?RHqSn1l z20{^oDB*8MX43M28^7~$`N<+x=!pN-QtDY6)2JJ(=CbOQ8xHSrZ*$f<8HKT7`xkqa~Pva`+L4NwTBi6UVn8yi87@hm~c&)R2>fQN~>;0R=Trm48a91=?yD6~AMqtr>jNtX+pOMj&7i#UoF9|62!T48|{o zsFoA=4R+Sh$+%tniR6-;=F>$dPLvx%gpDy9Qlx6vFUx?vVy&$%OTs0)g0R3M9TmS7Sco-i=u1w7ak_K88hT< zC*i!#!;naMn_=n+0c!JmQwPMU1WaN!I_8=8GVa+`3(3=j*|EI$lVJ<_w$Ng{vy=SJpzi*r_pC7Wc9sXVsKV>ph2mIC= zxz7GhaCX~Q9cm<>v9%VGiqZ20iou0p;HCMEoC~u&YSN_uG@YWM_mZ(YEYdB_)`#Ey zHBkm5RUQry+K;T;K1;T2i&MFY>Yg67ooZkj2~6%`xS(&&3Kd9oyv-Cng%LBhf0Z~K z$NgS09^k@V-HbI^DZU}rx4{OW-cxA3!>qWpZ>KcdX9fB=c7Gas22u$YTLAon@7?a6IXocQ1(($in7FPF2ifZI8Y@`vBhmi8>66cEWv%sF&{}D6_PdY>&jNXy?sCF_lhDH-6V6Ah2sfea zbOo*ca7{_?8+f)Y4eJe9kW4H{)I{X+G+`X2<;2Da!w=!i6nh01sI64UrsbXbx z;#IlWG>RW+iIuEWEyfOP@e>swD%}pj8$()L{*M~-m!k@ zfZAJi`K1`0hoO=&@jckgGaa|fhf-@wf>9ZRGGVHb--Rmc5(#l`PpG2}a{_-BtJi?7 z6xc>(hkd&%0`lQ*nn^-WIdZsrODJN;x~R90N;Gy_GVW%G`omWe^L+C<-Ub|_Vj{uB zR$;GA6o_Iio6~1ywX9;lrLY6P!W8TT!Hz=C6LQ_l7#EmX4iJYf55n(aW3=+x?SIAP zl{kOOF8u6hX3g<)eGe|S+^iX*>G6ZqV+n6ApyUWLDN8OM^-5O%WDZUJS{=nbA%9cT$#xb7 zXN`3K>Vvn(TjchSKzM1tAJ4FHI2Z`WVbua zH3+!boSgHlbSZKXzIQcP`1^EB*8|=o@O^Jj7tQ^tc3dv>jqwyNoXZE!dqsQMGlX`RPfJbRGtDf?~DT+8=DRyeOJiZr{v zQ@NvZLQdKt-G^`$QebpKw37j0OKR+<)+nUrING zG#JS|!j+(U6w$5Ux1m5VExMmAZ*w_h&;?Q(NA*sYg_fK(g_7uID2L|L4sWBNXWXZ%5 z+4;{s?4wH1L>54upxqO&z&`(w2ZTv!FcWi+g{9BPDnk4jiFr6U_*gQ9f6o1= z*dT|VA5<(atdxX^W!U`e*-$1C-sFd*a&oLMkR103MJC@VBf!)>=WhomDa>L zS5?R+LojL1TR0OTN0z7)(an~ZQ+A?r){y-Rx^!M!O&r#0DjKK4Tui z6LlYjZGgd1ObR|^K)5$O9WQMc7XUcAvg$AMP~^)~&8Gn_kmZ*vBT+5_ zWDqn8RObEyO`f=t2#~08p!URFHsgpX65sow5SBq?))jtKZIPIXTP)zD4?=ZpHhdwZ~eXqpBX#LbP z-mxm|W@Jp!-~E|2U62c*0=7umLx%{?6Fk59ssqRGS-}m9|FI5ub5`psMa#eUdSEQ< zZpd?w5IUM3bv~`p1F92Veb)E4W3RsU1B;y751-2B0I7gIy4N(*!TC<0BOxz|y<&3j zYAs`O(xIpmvHY)H?gG^}X)5$}_aQH}(?YR`2Wzf~1=c!H_g6y+KV|R(H4`^ux@D=C zpr5o$t{O?HMt=^8IDyO6dqvLJ15PEWF=Za(yj^RIrfg}|kQ)aSVc{wFp(;;Lhs3TH z5}XjrvV-aycC1V+>NkS>_D8P)oiMm< zOKED;KKb_th>8K|AqG66(4`Teat^i~Vcxd7^N^WJu8;BLW`k<1t(+`HrtUen?PePl zWnf_lrCSJlzRW@%0=It)E$Tu)xyT0u;ezAb@B@Opjst0Kp^ zgp16E#V=mKt*l}ZZP_f0ra#G%TJ1Xiz~)TcMxl@OL_hTNnt%Zx)mVKK;fJ$aM>gEH zF|XDP)PdAJ?SySNxp`(ovAfQ_l@uobH3_|Aho@rf)Tx@h5?qME_S;DM0Dft|5Z<_z z&hf`0&25AJMZKZPl67@$WhavSPg$;{ur=t{rxo2WaJbO5MVscEB`M{$j6S7CM%~;e z3*iznYO(lTJ&54?xhiMjO3Xr?wNY7kvf74JRu{vC?Y+ESIY8M_xwj1CXNXs2Y!T>Z zu8qWnNFD#)%ZZqVEU!@O36EOQ7X1|%@$b10U(UIFo{&wDasnZE!qg1x=boy%0pF5H zHaRKjc|=i6+L1A+RmwsTMhvgE5~d8koziaYE6eaiM?;ulf9GfXb+fHaE*p9I8~8B5_X@chJi1Ba9W(wEwB8}m zD+y6@8|hrCme3c#U{J6bFlEG?(ISMAdeMSd!|8*{QrLDvXI~1m#EcyBe%5j0X() zz`hkl6z2p8$BOimC%y*TNE)?08)OQ8Yvpf0poJ7y_{Cu7gXPRiDd*9xKK^|v2LIGS zghe_yal&&J_womJ1~v&x0d^)7s#x4*7EsH8Co{(q>bsK{IUyK+S4&MIWGir1m>SpP znAvkr{(J<&%`B?cRHO^7g|h+*d4;j(u`s)^zF-Y}Qiq8iS7{`gZ|#aOK9`)MJ{6bM zo89Bh=G#xo)jd9H4%I0qR)PGE zk@s5ouJ8;@M#E{qHZJunnkgm7wH>L5@rE8rvqG~v?J3cVfP8rtEG-`M-bUC?hR<hPE91C1)B;aa0V8gI2O1Rp~z~JVZ7-B5f7koJC2&RDfmQF6;CrW zZrPs4^YlYe9(EHfibh0=wkI?s4Kw|QCE);_@lBDUA*jS+1i(MY6a?2;0w;PZxv>#N z`ke&Sj%2E!3bpa>PdC;UQf(G)UYodL$tZ2OY}2rG5}6@;Io;jRG57nPJbW{hA$zoU z0-3G@?6xkdxhiHnL5e7Z%o)Pbgl=#gU!+v0&^n8r3vc|cmWu;?g*wDHKpTe5Pmyl_ zan)E3T0)1HW#}XjCBREOPy1{+hCE5PWlyBTzg0`m#k>hE-VKt+fV05f^4`TlbaKSLb$N$nHGReRp~+N>T7p>hS1m9}Ocm?Y#hS6L&ZGKcwB9M z9ERNpKii=7G=}fcI{>}!NYf16kWwd=ub3P-z|^-bT?>ib4|?c~s}yUc#y~gwHISE_ zU#@>JtC{Fv9_K%}u!jOTw%AIiJSB$z2#Oi(&!~T8WFyL8hKlA{z)`Ky9$Ydj*|IQX z-?_uoMpKYQ?Qe|^ru9ju-m{+UgNjv3S}fGY>Wm%asp0|!Ok^j(dZQx4dW2?CP!tkE zHz+NST=y%XRSP^ALpv|ZJU+=cuQWp}QuB~J=g>bpw)jWpW1!s$kHi-$xKkN^<78MO zn=y1))W)Mo#f;W@)mLjsfDx0U8TGqGXbFEvl)$_am1*yIW(Cz;^u2J1*? zkd#1$qy5x; zSPzfM!}mhA(RiO;!S*}cs9?L2bMJyNSR72mrS&7FG9i?q3|()zm z>~f)?TBCo$5%voFJ*1ASoIOmnKxGc#RC6mRj}`NYS;P=MR7O6vH0iP&k>3g(Neij7 z_5-6^kf`KMCia|!f-2D)3BU^qUA^5&aQRsh0b6eRVO4mRnGPgiy@}#Y*H~sj_mJ#r z!zeub2K#tkgelr8n=$KNc#rQ$q-k4pR1I8(MRE+^9A@v5ZBV`HilLlERv@DAW8rut z8$2RJIA#e|MO+W%GiWc?!0}YL;>ph~yEmyPkHf=~v#)Fn7V}uuvNMOm8Jrnu97i3< zXQ63MjFG_HRIW@A`^Ts|^oL-s zEi=8U-R*91PIi?LlR~rEd=LYb)AJ&=m?rFWf*SIz&ZONeqYTP7wWWf8dU@?nRbxJ< z#aRU3v9+;o%>Xjsj>h_?!7S zH;d<1G4Z@1H+mi4QZs9T#j1F}a=l9AFYGEXfVVr6XfcH0){GIO`W?Pue`*=$lZ)z* z4fZ&(ksQiK=LV>Oq!|*>! zUvKt*bQ36bDfkk~Be3&i5`Wn>o>GqxoqhjJUGN((EL*XBD7pnDcH7(zRtuLB`X}5w zC+Njwp>a{n&uu@61#BRU$8zh?Ik4pEtM0dsb`Qqh)zQ5MWB}aK4%ZF=wbn+XOaiX2MY<#6j@n0Yw)= z^I1=V`$&L640U1y7OS+<^G|z(QJyw0NHAxL%>=%*Xo)8}B-8EO=}L-(!W}MNm^kRX z`WZpT5zZxWfcw&LggnOh9Ns#^eSI3b2JGIkrL^QPiIIvSm3CVN0LO^T??|&*Acu)uP&K-EAzu;rJ;mP+HC#H3d9l~0YR8Nk0=o|B2V8@x3pGZw9 zxba8E{eD_0b&<&`MPV!qBVvti2(pp$Ti(5B4DH;NP zFx#RRb=_n34jb&|M^|r0Hf(O9eMdII?WSXNI~}sD5%QEZTzZ`!YKHlh9Ely77Li+* zIKrh*x)FjrhBnn+172LOVde)RjK%~B2f8nCv(Cm2TXF-VZmm9le6vxxl|6iemAums zq_ew#7*u^pZX4?`WXYtnchh}4cAA>ViL2k&;(EnuYFlsE4uCA7()I5t8?g)%!tdL=eu7P$X}eVLg>MHaT1dastVRg4N-?MbAS zc*0L!14RDUs=7w%d0&#aTQno6sqwI0%9j7MOo_ckijg8`kdiK=uo1xjURffG$~$?3 zm0ZAqy{YN5cPXG>q?2LTBopHAjs#R((I?3Z`H&(E7`3$T8m(Bs{WVgfU%j;a zov{}wr%ffhL7I-pcu0#wio0fz+Tvvsol^D^oFeW49>IUc6DZql?aX1IV&%;FFw@Px z!1y~c|NPftnXN3tj}FMtF8hwez`XsxZ_?)Nx=(1HA*D=>5%(tJo<(&3`-3pq3bgS8 z>Z*)2q&vKfq4}p5Lyj?l|92wV`!)B!VOFcoi&PXMM_b-MY2p7p5zm{x4P+|Pl2;5{ T!b1Ml0Y&kxs%(|CS;+qYT?x3u literal 0 HcmV?d00001