Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

11th grade-all tasks

2151 views
Kernel: Python 3 (Anaconda)
בתחילת קובץ jupyter notebook עליכם להעלות את כל החבילות השימושיות. כמו כן אם אתם רוצים לקבל הדפסה יפה של פלט ושל גרפים יש להוסיף שתי פקודות נוספות
import sympy as sp sp.init_printing()
%matplotlib -- inline #from sympy.plotting import plot
הדפסה יפה
#????
הגדרת משתנים סימבוליים
x, y, z, t = sp.symbols('x y z t') alpha,beta,gamma=sp.symbols('alpha,beta,gamma')
פעולות מתמטיות
sp.sqrt(2), sp.pi/2, sp.sin(sp.pi/2)
(2,π2,1)\left ( \sqrt{2}, \quad \frac{\pi}{2}, \quad 1\right )
מספר אוילר והפוקנציה האקספוננציאלית
sp.exp(1), sp.exp(x)
(e,ex)\left ( e, \quad e^{x}\right )
הגדרת פונקציה, וגזירת הפונקציה לפי המשתנה t. ניתן לגזור את הפונקציה גם על פי המשתנה τ\tau.
tau = sp.symbols('tau') decay = sp.exp(-t/tau) decay_dt = decay.diff(t) decay, decay_dt
(etτ,etττ)\left ( e^{- \frac{t}{\tau}}, \quad - \frac{e^{- \frac{t}{\tau}}}{\tau}\right )
פעולות שניתן לבצע על פונקציה. הצבת ערך בפרמטרים ובמשתנים (שימו לב: האבחנה בין פרמטרים למשתנים היא מלאכותית. כולם שווים בפני sympy.)

אפשר למצוא פרוט של הפעולות הביסיסות ברשת. למשל כאן: http://docs.sympy.org/latest/tutorial/basic_operations.html

decay.subs({tau:5})
et5e^{- \frac{t}{5}}
decay.subs({t:2,tau:5})
e25e^{- \frac{2}{5}}
decay.subs({t:2,tau:5}).evalf()
0.6703200460356390.670320046035639
f1 = (x+2)**2 f1.expand()
x2+4x+4x^{2} + 4 x + 4
כלי נוסף שיש להשתמש בו בזהירות הוא simply. זהו אלגוריתם מאוד כללי ולכן כבד מבחינה חישובית, ויכול לתת תוצאות בלתי צפויות. בשימוש בכלי הזה אתם נותנים למחשב להחליט מהי הצורה הפשוטה ביותר של ביטוי. לא תמיד תסכימו איתו.

לרוב כדאי לחשוב קודם איזה סוג של פעולה תעזור לכם לקבל את הביטוי הפשוט ביותר בו אתם מעוניינים. לרוב הפעולות האלו יש פקודות ספציפיות. אם אתם יודעים מה הפעולה הדרושה, עדיף להשתמש בה ישירות.

קיראו על כך בקישור המצורף

http://docs.sympy.org/latest/tutorial/simplification.html

f2 = sp.sin(x)**2+sp.cos(x)**2 f2.simplify()
11
f3 = x**2+2*x+1 f3.simplify()
x2+2x+1x^{2} + 2 x + 1
f3.factor()
(x+1)2\left(x + 1\right)^{2}
אפשר להפוך פונקציה סימבולית לפונקציה פייטון נומרית רגילה. אתם יכולים כמה משתנים הפונקציה תקבל, אבל תדאגו להגדיר אותה היטב. לא להשאיר משתנים ללא ערך מספרי..
#t is input, tau=5 is a constant f_num1 = sp.lambdify(t,decay.subs({tau:5})) f_num2 = sp.lambdify([t,tau],decay) help(f_num1) help(f_num2)
Help on function <lambda> in module numpy: <lambda> lambda _Dummy_140 Created with lambdify. Signature: func(t) Expression: exp(-t/5) Help on function <lambda> in module numpy: <lambda> lambda _Dummy_141, _Dummy_142 Created with lambdify. Signature: func(t, tau) Expression: exp(-t/tau)
f_num1(1), f_num2(1,5)
(0.818730753078,0.818730753078)\left ( 0.818730753078, \quad 0.818730753078\right )
# יצירת גרף

כך נראית פונקציית הדעיכה האקספוננציאלית. המשתנה t מתאר את הזמן - זהו המשתנה הבלתי תלוי של הפונקציה. הפרמטר τ\tau מייצג את זמן הגעיה האופייני. זהו הזמן הנדרש לגודל הנמדד לקטון פי ee.

decay(t=τ)=eτ/τ=e1=1/e\mbox{decay}(t=\tau) = e^{-\tau/\tau}=e^{-1} = 1/e

פונקציית הדיעכה מופיעה בתופעות רבות, בהן גודל כלשהו קטן בקצב משתנה התלוי בכמות החומר ברגע נתון.

על סמך הגרפים, עבור איזה ערך של τ\tau פונקציית הדעיכה יורדת מהר יותר ל-0 ?

title = 'The decay function with different decay rates tau' sp.plot(decay.subs({tau:5}),decay.subs({tau:2.5}),(t,0,20),title=title)
Image in a Jupyter notebook
<sympy.plotting.plot.Plot at 0x7feb327a2128>
היכולת לשלוט בגרף דרך החבילה של sympy מוגבלת למדי. אם תירצו לקבל גרף יותר מושקע השתמשו ב-matplotlib.
import matplotlib.pyplot as plt x_axis = range(0,21) y_axis1 = [decay.subs({tau:5,t:t_i}) for t_i in x_axis] y_axis2 = [decay.subs({tau:2.5,t:t_i}) for t_i in x_axis] plt.plot(x_axis,y_axis1) plt.plot(x_axis,y_axis2) plt.xlim(0,20) plt.legend(['tau=5','tau=2.5']) plt.xlabel('t') plt.ylabel('f(t)') plt.title(title)
<matplotlib.text.Text at 0x7feb30710978>
Image in a Jupyter notebook
# משוואות אפשר ליצור משוואה סימבולית
eq1 = sp.Eq(x**2+alpha**2,2*alpha) eq1
α2+x2=2α\alpha^{2} + x^{2} = 2 \alpha
ולמצוא את הפתרונות שלה
sp.solve(eq1,x)
[α(α+2),α(α2)]\left [ \sqrt{\alpha \left(- \alpha + 2\right)}, \quad - \sqrt{- \alpha \left(\alpha - 2\right)}\right ]
אפשר ליצור מערכת משוואות ולפתור גם אותן
eq2 = [] eq2.append(sp.Eq(y,beta*x)) eq2.append(sp.Eq(y**2+x**2,1)) eq2
[y=βx,x2+y2=1]\left [ y = \beta x, \quad x^{2} + y^{2} = 1\right ]
sp.solve(eq2,[x,y])
[(1β2+1,β1β2+1),(1β2+1,β1β2+1)]\left [ \left ( - \sqrt{\frac{1}{\beta^{2} + 1}}, \quad - \beta \sqrt{\frac{1}{\beta^{2} + 1}}\right ), \quad \left ( \sqrt{\frac{1}{\beta^{2} + 1}}, \quad \beta \sqrt{\frac{1}{\beta^{2} + 1}}\right )\right ]
קיימות משוואות שאין להן פתרון אנליטי. כדי לפתור משוואות אלה יש לחפש פתרונות נומריים.

לפני שמנסים לפתור את המשוואה נומרית יש לבדוק גרפית עם הפתרון קיים ומה יהיה ערכו בערך.

הפתרון שיתקבל יהיה מספרי, ולכן חשוב לדאוג להציב ערכים מספריים בכל הפרמטרים.

נשתמש בפונקציה ( sp.nsolve(eq,x,x0

fun - המשוואה או מערכת המשוואות

x - המשתנה עבורו פותרים

x0 - ניחוש התחלתי עבור הפתרון

שימו לב: פתרון נומרי לא יעבוד טוב אם לא ניתן ניחוש התחלתי ולשם כך חשוב להסתכל על הגרף.

בדוגמה למטה רואים שיש שני פתרונות למשוואה. פתרון אחד הוא הפתרון הטריוויאלי 0.

הפתרון השני קרוב לערך x=2. כדי לקבל את הפתרון השני נציב x0=2.

#sp.nsolve(eq3.subs({tau:5}),t) eq4=sp.Eq(sp.sin(x),x/alpha) sp.plot(sp.sin(x),(x/alpha).subs({alpha:2}),(x,0,2*sp.pi))
Image in a Jupyter notebook
<sympy.plotting.plot.Plot at 0x7feb30084048>
eq4_num = eq4.subs({alpha:2}) eq4_num sp.nsolve(eq4_num,x,2)
1.895494267033981.89549426703398