Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

11th grade-all tasks

2151 views
Kernel: Python 3 (old Anaconda 3)
Name = ["Roey Dvir"] Name
['Roey Dvir']

החבילה SymPy


SymPy היא ספרייה למתמטיקה סימבולית המיועדת ל- Python. היא כתובה כולה רק ב-Python, כך שאין צורך בסיפריות נוספות כדי להשתמש בה. בכוונת מפתחי ה- Sympy לפתחה עד כדי מערכת המכילה את כל התכונות והיכולות של תוכנות CAS, ראשי תיבות של Computer Algebric System. המפתחים מנסים לשמור את הקוד פשוט ככל האפשר כדי ליצור חבילה קלה להבנה ושאפשר להרחיבה בקלות. באופן בסיסי Sympy היא מחשבון סימבולי, אבל יתרונה בכך שאפשר להשתמש בה בתוכנית מחשב.
import sympy as sp sp.init_printing()

תרגיל 1

חשבו: acos(1)acos(-1)
5\sqrt5 9\sqrt9
import sympy as sp #from sympy import * sp.init_printing() display(sp.acos(-1), sp.sqrt(5).evalf(), sp.sqrt(9))
π\pi
2.236067977499792.23606797749979
33

Symbols

האוביקט הבסיסי ב- Sympy הוא ה- Symbol אוביקט זה מייצג משתנה מתמטי. יצירת אובייקט זה נעשיית באמצעות הפונקציה Symbol
alpha=sp.Symbol('alpha') sp.sin(alpha)**2
sin2(α)\sin^{2}{\left (\alpha \right )}

תרגיל 2

בעזרת הפונקציה symbols צרו את המשתנים μ\mu ו- σ\sigma (החליפו את ה- ? בקוד המתאים)
import sympy as sp sp.init_printing() mu,sigma=sp.symbols('mu sigma') display(mu,sigma)
μ\mu
σ\sigma

תרגיל 3

הגדירו את הפונקציה e(xμ)2σ2e^{ {-(x-\mu)^2}\over{\sigma^2}} פונקציה זו מכונה פונקציית הפעמון.
את הפונקציה exe^x מגדירים כ- (exp(x
import sympy as sp x,mu,sigma=sp.symbols('x mu sigma') bell = sp.exp((-(x-mu)**2)/(sigma**2)) bell
e1σ2(μ+x)2e^{- \frac{1}{\sigma^{2}} \left(- \mu + x\right)^{2}}

גזירה של פונקציה

a=sp.Symbol('a') sp.diff(a*x**3,x)
3ax23 a x^{2}
bell.diff(x)
1σ2(2μ+2x)e1σ2(μ+x)2- \frac{1}{\sigma^{2}} \left(- 2 \mu + 2 x\right) e^{- \frac{1}{\sigma^{2}} \left(- \mu + x\right)^{2}}

שרטוט גרף באמצעות sympy.plotting

%matplotlib -- inline from sympy.plotting import * sp.plot(sp.exp(-(x-3)**2),(x,-1,6))
Image in a Jupyter notebook
<sympy.plotting.plot.Plot at 0x7fd93dbeec50>

תרגיל 4

חשבו את הניגזרת השנייה של פונקציית "הפעמון" ושרטטו גרף שלה (הניחו כי :σ=3.0\sigma=3.0 ו- μ=1.5\mu=1.5 )
הערה: חשבו את הנגזרת ולאחר מכן הגדירו את ביטוי הניגזרת מחדש כאשר אתם מציבים ערכים לפרמטרים: μ,σ\mu,\sigma.
import sympy as sp x,mu,sigma=sp.symbols('x mu sigma') bell=sp.exp((-(x-mu)**2)/(sigma**2)) belldd=bell.diff(x).diff(x) bellddvalue=belldd.subs([(mu,1.5),(sigma,3)]) bellddvalue sp.plot(bellddvalue,(x,-1,6))
Image in a Jupyter notebook
<sympy.plotting.plot.Plot at 0x7fd93bae5f98>

הפונקציות simplify, subs,expand,evalf

a,b,c,d=sp.symbols('a b c d') expr=(a-b)*(a+b)**2 sp.expand(expr)
a3+a2bab2b3a^{3} + a^{2} b - a b^{2} - b^{3}
expr.expand()
a3+a2bab2b3a^{3} + a^{2} b - a b^{2} - b^{3}
new_expr=expr.subs([(a,3),(b,d*c/2)]) new_expr
(cd2+3)(cd2+3)2\left(- \frac{c d}{2} + 3\right) \left(\frac{c d}{2} + 3\right)^{2}
display(sp.simplify(new_expr), sp.simplify(new_expr).evalf())
18(cd+6)(cd+6)2\frac{1}{8} \left(- c d + 6\right) \left(c d + 6\right)^{2}
0.125(cd+6.0)(cd+6.0)20.125 \left(- c d + 6.0\right) \left(c d + 6.0\right)^{2}
new_expr.subs([(c,2.4),(d,3)])
26.136-26.136

תרגיל 5

בעזרת הפונקציה help בדקו מה פעולת הפונקציה simplify.

מה עושה כל אחת מהפונקציות subs, evalf ו- expand

help(sp.simplify) #Simplifies an expression help(sp.evalf) #Changes a number's type to float help(sp.expand) #Expands an expression #help(new_expr.subs([(x,1)])) #Replaces a symbol by a number
WARNING: Some output was deleted.

תרגיל 6

הפעילו את הפונקציה simplify על הניגזרת השלישית של פונקציית הפעמון
bellddd=bell.diff(x).diff(x).diff(x) bellddd.simplify()
1σ6(12σ2(μ+x)+8(μx)3)e1σ2(μx)2\frac{1}{\sigma^{6}} \left(12 \sigma^{2} \left(- \mu + x\right) + 8 \left(\mu - x\right)^{3}\right) e^{- \frac{1}{\sigma^{2}} \left(\mu - x\right)^{2}}

תרגיל 7

פשטו את הביטוי : (x+1)21x2 (x+1)^2 \over {1-x^2} (הפונקציה simplify)
func = ((x+1)**2)/(1-x**2) func.simplify()
x+1x1- \frac{x + 1}{x - 1}

תרגיל 8

הפעילו על הביטוי הקודם את הפונקציה expand.
func.expand()
x2x2+1+2xx2+1+1x2+1\frac{x^{2}}{- x^{2} + 1} + \frac{2 x}{- x^{2} + 1} + \frac{1}{- x^{2} + 1}

תרגיל 9

הביטוי שלמטה הוא נוסחת הרון לחישוב שטח משולש שצלעותיו הן a,b ו-s. c הוא חצי היקף המשולש. השתמשו בפונקציה subs וחשבו את שטח המשולש אם נתון ש: a=6, b=7, c=9
קודם הציבו במקום s את מחצית סכום הצלעות ולאחר מכן הציבו את הערכים.
a,b,c=sp.symbols('a,b,c') s=(a+b+c)/2 area=sp.sqrt(s*(s-a)*(s-b)*(s-c)).simplify() areavalue=area.subs([(a,6),(b,7),(c,9)]) display(area, areavalue.evalf())
14(a+b+c)(ab+c)(a+bc)(a+b+c)\frac{1}{4} \sqrt{\left(- a + b + c\right) \left(a - b + c\right) \left(a + b - c\right) \left(a + b + c\right)}
20.97617696340320.976176963403

בדיקת שוויון

#Not the way x,y=sp.symbols('x y') a=(x-y)**2 b=x**2-2*x*y+y**2 a==b
False
#The way sp.simplify(a-b)
00

יצירת משוואה

יוצרים משוואה באמצעות הפונקציה Eq
eq=sp.Eq(y,4*x**2-x+3) eq
y=4x2x+3y = 4 x^{2} - x + 3
eq.lhs
yy
eq.rhs
4x2x+34 x^{2} - x + 3
sp.solve(eq,x)
[1816y47+18,1816y47+18]\left [ - \frac{1}{8} \sqrt{16 y - 47} + \frac{1}{8}, \quad \frac{1}{8} \sqrt{16 y - 47} + \frac{1}{8}\right ]

תרגיל 10

כתבו פונקציה המקבלת שני ביטווים. הפונקציה צריכה tupl המכיל שני ערכים בוליאניים. הראשון מציין האם הביטויים זהים והשני האם הביטויים שווים מתמטית.
def equality_exercise(a,b): if(a==b): b1=True else: b1=False if(sp.simplify(a-b)==0): b2=True else: b2=False return(b1,b2) display(equality_exercise(x,2), equality_exercise((x+1)**2,x**2+2*x+1), equality_exercise(4*x,4*x)) #Return a tuple of tow boolean. the first is True if a=b symbolicaly, #the second is True if a==b mathematically. #Examples #======== #>>> x=symbols('x') #>>> equality_exercise(x,2) #(False,False) #>>> equality_exercise((x+1)**2,x**2+2*x+1) #(False,True) #>>> equality_exercise(4*x,4*x) #(True,True)
(False, False)
(False, True)
(True, True)
expr1=(x-y)**2 expr2=x**2-2*x*y+y**2 equality_exercise(expr1,expr2)
(False, True)

דוגמא

קיבול חום סגול של חומר מוגדר ככמות האנרגיה שצריך לספק לכמות חומר שגודלה יחידת מסה אחת כדי לחמם אותה ב- 10C 1^0C . קיבול החום הסגולי של מים הוא 4.2Jgr10C 4.2{ J\over {gr\cdot 1^0C}} (האות J מציינת את יחידת האנרגיה ג'ול) הספק של גוף חימום שווה לכמות האנרגיה שפולט גוף החימום ביחידת זמן. יחידת ההספק היא ווט (W) והיא שווה לכמות אנרגיה של 1J בשנייה (s). בהמשך דוגמא לחישוב הזמן הדרוש לחימום דוד מים המכיל 150 ליטר מים בטמפרטורה של 230C 23^0 C לטמפרטורה של 600C 60^0C בעזרת גוף חימום שהספקו 2000W.
הערה:
כאשר מצמידים גוף בטמפרטורה גבוהה לגוף בטמפרטורה נמוכה יותר עוברת אנרגיה מהגוף החם לקר עד שהטמפרטורות משתוות. כמות האנרגיה העוברת מהגוף החם לקר מכונה חום.

Q - כמות חום

T1- טמפרטורה התחלתית

T2- טמפרטורה סופית

m - מסת המים

c -קיבול חום סגולי של מים

P - הספק גוף החימום

##

חישוב כמות החום הדרושה לחימום המים:

c=4.2# J/(gr*C) m=150*1000 #gr T1=23 #C T2=60 #C #T3=? P=2000 #W=J/s Q=c*m*(T2-T1) #T2=T3

חישוב הזמן:

t=Q/P print(t, "s")
11655.0 s
כפי שניתן לראות במקרה זה אין צורך להשתמש ב-Sympy לפתרון התרגיל.

השימוש ב- Sympy הוא הדרך הפשוטה לפתרון בעיות מסובכות והדרך המסובכת לפתרון בעיות פשוטות

תרגיל 11

נתון גוף שמסתו m1 בטמפרטורה T1 וקיבול חום C1.
מצמידים אותו לגוף שמסתו m2, הטמפרטורה שלו T2 וקיבול החום שלו C2. פתחו בעזרת Sympy
ביטוי לטמפרטורה הסופית של שני הגופים ( הניחו כי כמות החום שפלט האחד שווה לכמות החום שקלט השני).
import sympy as sp m1,T1,C1,m2,T2,C2,T=sp.symbols("m1 T1 C1 m2 T2 C2 T") #T=? Q1=C1*m1*(T-T1) Q2=C2*m2*(T-T2) eq=sp.Eq(Q1,-Q2) sp.solve(eq,[T,T1,C1,m2,T2,C2,m1])[0][T]
C1T1m1+C2T2m2C1m1+C2m2\frac{C_{1} T_{1} m_{1} + C_{2} T_{2} m_{2}}{C_{1} m_{1} + C_{2} m_{2}}

הפונקציה solve

נתונה המשוואה: x1x+bx=7 x- {1\over x}+b\cdot x=7
נמצא לה פתרון סימבולי:
x,b=sp.symbols('x b') eq=sp.Eq(x-1/x+b*x,7) print(eq) ans=sp.solve(eq,x) ans
Eq(b*x + x - 1/x, 7)
[4b+53+72(b+1),4b+53+72(b+1)]\left [ \frac{- \sqrt{4 b + 53} + 7}{2 \left(b + 1\right)}, \quad \frac{\sqrt{4 b + 53} + 7}{2 \left(b + 1\right)}\right ]

פיתרון נומרי עבור b=5

x,b=sp.symbols('x b') eq=sp.Eq(x-1/x+b*x,7) ans=sp.solve(eq,x) display(ans[0].subs(b,5).n(6), ans[1].subs(b,5).n(6))
0.128667-0.128667
1.295331.29533

יותר מנעלם אחד:

נפתור את מערכת המשואות:
3(xy)2+x2=yyx+x3+y=1\begin{darray}{rcl} 3(x-y)^2+x-2=y\\ y\cdot x+\frac{x}{3}+y=1 \end{darray}
x,y=sp.symbols('x,y') sp.solve([sp.Eq(3*(x-y)**2+x-2,y),sp.Eq(y*x+x/3+y,1)],[x,y])
[(73,43),(53,73),(0,1),(1,13)]\left [ \left ( - \frac{7}{3}, \quad - \frac{4}{3}\right ), \quad \left ( - \frac{5}{3}, \quad - \frac{7}{3}\right ), \quad \left ( 0, \quad 1\right ), \quad \left ( 1, \quad \frac{1}{3}\right )\right ]

תרגיל 12

חלקיק נע במהירות קצובה לאורך הקו הישר: y=mx+n y=m\cdot x+n . בנקודה (a,b) דיסקה ברדיוס r.
פתחו נוסחא באמצעותה ניתן לדעת האם החלקיק מתנגש בדיסקה ואם כן היכן.
היכן נקודת ההתנגשות עבור הערכים הבאים: a=2,b=3,m=1,n=0.5, ו- r=5
x,m,n,r=sp.symbols("x m n r") y=m*x+n f=sp.sqrt((x-a)**2+(y-b)**2) eq=sp.Eq(f,r) display(sp.solve(eq,x)[0]) eqvalues=eq.subs([(m,1),(n,0.5),(r,5),(a,2),(b,3)]) x1=sp.solve(eqvalues,x)[0] y1=y.subs([(m,1),(n,0.5),(x,x1)]) print(x1,y1)
1m2+1(a+bmmna2m2+2abm2amnb2+2bn+m2r2n2+r2)\frac{1}{m^{2} + 1} \left(a + b m - m n - \sqrt{- a^{2} m^{2} + 2 a b m - 2 a m n - b^{2} + 2 b n + m^{2} r^{2} - n^{2} + r^{2}}\right)
-1.27668399491647 -0.776683994916471

מציאת נקודות קיצון של פונקציה

בנקודת קיצון הניגזרת מתאפסת

f(x)=e(x2ax+b)c f(x)=e^\frac{-(x^2-ax+b)}{c}

import sympy as sp from sympy.plotting import plot x,a,b,c=sp.symbols('x,a,b,c') f=sp.exp(-(x**2-a*x+b)/c) xzero=sp.solve(sp.Eq(f.diff(x),0),x) y=[f.subs([(x,xzero[0])]),f.subs([(x,xzero[1])]),f.subs([(x,xzero[2])])] (xzero[1],y[1]),(xzero[1],y[1]),(xzero[2],y[2])
((a212a24b+~,e1c(a(a212a24b+~)b(a212a24b+~)2)),(a212a24b+~,e1c(a(a212a24b+~)b(a212a24b+~)2)),(a2+12a24b+~,e1c(a(a2+12a24b+~)b(a2+12a24b+~)2)))\left ( \left ( \frac{a}{2} - \frac{1}{2} \sqrt{a^{2} - 4 b + \tilde{\infty}}, \quad e^{\frac{1}{c} \left(a \left(\frac{a}{2} - \frac{1}{2} \sqrt{a^{2} - 4 b + \tilde{\infty}}\right) - b - \left(\frac{a}{2} - \frac{1}{2} \sqrt{a^{2} - 4 b + \tilde{\infty}}\right)^{2}\right)}\right ), \quad \left ( \frac{a}{2} - \frac{1}{2} \sqrt{a^{2} - 4 b + \tilde{\infty}}, \quad e^{\frac{1}{c} \left(a \left(\frac{a}{2} - \frac{1}{2} \sqrt{a^{2} - 4 b + \tilde{\infty}}\right) - b - \left(\frac{a}{2} - \frac{1}{2} \sqrt{a^{2} - 4 b + \tilde{\infty}}\right)^{2}\right)}\right ), \quad \left ( \frac{a}{2} + \frac{1}{2} \sqrt{a^{2} - 4 b + \tilde{\infty}}, \quad e^{\frac{1}{c} \left(a \left(\frac{a}{2} + \frac{1}{2} \sqrt{a^{2} - 4 b + \tilde{\infty}}\right) - b - \left(\frac{a}{2} + \frac{1}{2} \sqrt{a^{2} - 4 b + \tilde{\infty}}\right)^{2}\right)}\right )\right )

תרגיל 12

מזריקים כמות A של תרופה לחולה. הריכוז c של התרופה נימדד ב: mgml \frac{mg}{ml} .
כעבור זמן t מרגע הזרקת התרופה הריכוז ניתן על ידי : c(t)=Atet/3 c(t)=Ate^{-t/3} . הזמן נימדד בדקות.
הריכוז המקסימאלי המותר של התרופה הוא 1mgml 1 \frac{mg}{ml}
- איזו כמות מקסימאלית A מותר להזריק ? ומתי מתקבל הריכוז המקסימאלי?
- שרטטו גרף של הריכוז בדם כתלות בזמן והעריכו באמצעותו מתי מתקבל ריכוז של 0.25mgml 0.25 \frac{mg}{ml}
- מצאו לסעיף הקודם תשובה מדויקת בעזרת הפונקציה nsolv.
-כל כמה זמן צריך להזריק לחולה את התרופה כדי שהריכוז לא יהיה מעבר לערך המקסימאלי ולא יפחת מערך מינימאלי של 0.25mgml 0.25 \frac{mg}{ml}
## When t*exp(-t/3) is max import sympy as sp A,t=sp.symbols("A t") c=A*t*sp.exp(-t/3) cdot=c.diff(t) eq1=sp.Eq(cdot,0) tmax=sp.solve(eq1,t)[0] cmax=1 eq2=sp.Eq(cmax,c.subs([(t,tmax)])) Amax=sp.solve(eq2,A)[0] display(Amax,tmax) c2=c.subs([(A,Amax)]) display(c2) sp.plot(c2, (t, 0, 100), title="c(t)") #Approximately in 0.3 seconds c3=sp.Eq(c2, 0.25) sol1=sp.nsolve(c3, t, 0) sol2=sp.nsolve(c3, t, 11) print("Solution 1 is: ", sol1.n(3)) print("Solution 2 is: ", sol2.n(3)) x = sol2 - tmax print(x.n(3), "minutes")
e3\frac{e}{3}
33
et3et3\frac{e t}{3} e^{- \frac{t}{3}}
Image in a Jupyter notebook
Solution 1 is: 0.305 Solution 2 is: 11.1 8.08 minutes