9 תרגיל

Transcription

9 תרגיל
‫תרגיל ‪9‬‬
‫שאלות לעבודה עצמית‬
‫‪ )a‬כתבו פונקציה ‪ ex9a_7boom‬שמקבלת מספר ‪ ,N‬אינה מחזירה דבר‪ ,‬ורק מציגה את את כל המספרים עד ‪ ,N‬כאשר‬
‫כל מספר שמתחלק בשבע או שיש בו את הספרה שבע מוחלף במחרוזת '‪.'BOOM‬‬
‫‪ )b‬כתבו סקריפט ‪ ex9b_coin‬שמבצע הטלת מטבע‪ ,‬בדומה לסקריפט ‪ ex8b_coin‬אלא שלא משתמש ביכולות של מטלב‬
‫שנלמדו בשיעורים הקודמים‪:‬‬
‫‪ )1‬במקום להשתמש ביכולות של מטלב לטפל במערכים‪ ,‬השתמשו בלולאות שמגרילות את המערך של אפסים‬
‫ואחדים (בסיכוי שווה)‪.‬‬
‫‪ )2‬בהחלטה על איזה צד נופל המטבע יש להשתמש ב‪.if-‬‬
‫‪ )3‬במקום להשתמש בפקודת ‪ mean‬לחישוב ההסתברות‪ ,‬יש לסכום (בגוף הלולאה) את כל המקרים שבהם תוצאת‬
‫ההגרלה הייתה ‪ 1‬ולחלק במספר ההגרלות‪.‬‬
‫‪ )4‬יש להציג את ההיסטוגרמה (כמו בתרגיל הקודם)‪.‬‬
‫‪ )c‬סדרת פיבונצ'י‪:‬‬
‫‪ )1‬כתבו סקריפט בשם ‪ ex9c_fib‬שמוצא את שנים עשר האיברים הראשונים של סדרת פיבונצ'י על ידי אתחול שני‬
‫האיברים הראשונים‪ ,‬ושימוש בלולאה כדי לחשב כל איבר על ידי שני האיברים הקודמים (ע"פ נוסחת הרקורסיה‬
‫של הסדרה)‪.‬‬
‫𝑓‬
‫הסקריפט מציג את האיברים ווקטור שמכיל את היחסים ‪. 𝑛+1‬‬
‫𝑛𝑓‬
‫‪ )2‬בנו מטריצה שכשמפעילים אותה על וקטור של שני איברים סמוכים בסדרת פיבונאצ'י נותנת וקטור שמכיל את‬
‫האיבר הגדול בוקטור המקורי ואת האיבר שאחריו בסדרת פיבונאצ'י (ראו הדרכה)‪.‬‬
‫חשבו את האיברים ‪ 11-12‬ע"י העלאת המטריצה בחזקה המתאימה וכפל בוקטור של הזוג הראשון‪.‬‬
‫‪𝐹12‬‬
‫𝑓‬
‫הדרכה‪) ( 𝑛 ) :‬‬
‫‪𝐹22 𝑓𝑛−1‬‬
‫‪𝑓𝑛+1‬‬
‫𝐹‬
‫‪) = ( 11‬‬
‫‪𝐹21‬‬
‫𝑛𝑓‬
‫(‪ ,‬מצאו את איברי המטריצה ̂𝐹‪.‬‬
‫‪ )d‬כתבו סקריפט ‪ ex9d_clock‬אשר מצייר מחוג של שעון ומציג את התזוזה שלו כפונקציה של הזמן‪.‬‬
‫‪ )1‬חשבו את הזוויות (ברדיאנים) המתאימות למספרים ‪ 1-12‬בשעון‪ ,‬ושמרו את הערכים במערך ‪.alpha‬‬
‫‪ )2‬ציירו בקו שחור מעגל ברדיוס ‪ 10‬שמרכזו בראשית‪.‬‬
‫‪ )3‬חשבו את מקומות המספרים ‪ 1-12‬על היקף השעון והוסיפו את המספרים במקומות אלה על ידי שימוש בפונקצית‬
‫‪ text‬בתוך לולאת ‪( for‬מקמו את המספרים על מעגל ברדיוס ‪.)9‬‬
‫מטלב לפיסיקאים תשע"ה תרגיל ‪ 9‬עמ' ‪1‬‬
‫‪ )4‬הגדירו את צורת המחוג (לא סתם קו) והוסיפו אותו לציור בקו אדום‪ .‬העזרו בסקריפט ‪ ex6c_clock‬מתרגיל ‪.6‬‬
‫‪ )5‬חזרו על סעיפים ‪ 2-4‬בלולאת ‪ , for‬ובכל איטרציה סובבו את המחוג לזווית של השעה המתאימה מתוך ‪.alpha‬‬
‫מצאו דרך יעילה לסובב את המטריצה של המחוג לזוויות המתאימות‪ .‬לפני כל חזרה‪ ,‬השתמשו בפקודת ‪pause‬‬
‫(לפרק זמן לבחירתכם) וכן נקו את הציור‪.‬‬
‫שאלות פתורות‬
‫‪ )e‬פתרון נומרי של משוואה דיפרנציאלית‪:‬‬
‫‪ )1‬כתבו פונקציה ‪ ex9e_ypp‬שמחשבת פתרון של משוואה דיפרנציאלית מסדר שני )‪ y'' = f(y,t‬כאשר הצורה של ‪f‬‬
‫נתונה ע"י פונקציה נפרדת‪.‬‬
‫‪)i‬‬
‫הפונקציה ‪ ex9e_ypp‬מקבלת כקלט את )‪ ,y(0‬את )‪ y'(0‬וכן מערך של זמנים עבורו יש לחשב את הפונקציה ‪.y‬‬
‫‪ )ii‬מצאו את הנקודה השניה לפי סדר ראשון בטור טיילור‪.𝑦(t 0 + Δ𝑡) = 𝑦0 + 𝑦′(𝑡0 ) ⋅ Δ𝑡 :‬‬
‫‪ )2‬השתמשו בקירוב‬
‫)𝑡‪𝑦(𝑡+Δ𝑡)−2𝑦(𝑡)+𝑦(𝑡−Δ‬‬
‫‪Δ𝑡 2‬‬
‫≅‬
‫)𝑡( ‪ 𝑦 ′′‬וחלצו מן הנוסחה את )𝑡‪ .𝑦(𝑡 + Δ‬השתמשו בביטוי‬
‫שקיבלתם כדי לחשב את ערך הפונקציה בנקודה ‪ k+1‬בהינתן ערך הנגזרת השנייה בנקודה ‪ k‬וערך הפונקציה‬
‫בנקודות ‪.k-1,k‬‬
‫כתבו את הפונקציה ‪ f(y,t) = -sin(y) :f‬כפונקציה משנית בקובץ ‪.ex9e_ypp.m‬‬
‫)‪function [y]=ex9e_ypp(y0,v0,t‬‬
‫;)‪y=zeros(length(t),1‬‬
‫;‪y(1)=y0‬‬
‫;))‪y(2)=y0+v0*(t(2)-t(1‬‬
‫)‪for k=2:(length(t)-1‬‬
‫;‪y(k+1)=2*y(k)-y(k-1)+f(y(k),t(k))*(t(k+1)-t(k))^2‬‬
‫‪end‬‬
‫‪end‬‬
‫)‪function res=f(y,t‬‬
‫;)‪res=-sin(y‬‬
‫‪end‬‬
‫‪ )3‬בדקו את הפונקציה ע"י הפעלתה מחלון הפקודות‪ ,‬עם‪ y'(0)=0 ,y(0)=0.1 :‬ומערך הזמנים בין ‪ 0‬ל ‪ 10-‬בקפיצות של‬
‫‪.0.1‬‬
‫;)‪y=ex8e_ypp(0.1,0,0:0.1:10‬‬
‫‪ )4‬כתבו סקריפט ‪ ex9e_run‬אשר מריץ את הפונקציה מספר פעמים על נתוני קלט שונים‪ .‬מערך הזמנים תמיד בין ‪0‬‬
‫ל‪ 10-‬בקפיצות של ‪ 0.01‬אבל ערכי ההתחלה ישתנו‪.‬‬
‫מטלב לפיסיקאים תשע"ה תרגיל ‪ 9‬עמ' ‪2‬‬
‫‪)i‬‬
‫ערכי התחלה ‪ . y'(0)=0 ,y(0)=0.1‬הוסיפו לשרטוט גם את הפתרון האנליטי (ניתן לחישוב מאחר שניתן לקרב‬
‫‪)sin(y)y‬‬
‫‪)ii‬‬
‫ערכי התחלה ‪ . y'(0)=0.1 ,y(0)=0‬הוסיפו לשרטוט גם את הפתרון האנליטי‪.‬‬
‫‪ )iii‬ערכי התחלה ‪( . y'(0)=0 ,y(0)=0.5‬כאן הפתרון האנליטי לא מדויק)‪.‬‬
‫‪ )iv‬ערכי התחלה ‪( . y'(0)=1.99 ,y(0)=0‬כאן הפתרון האנליטי לא תקף כלל)‪.‬‬
‫‪close all‬‬
‫;]‪Y0=[0.1 0 0.5 0‬‬
‫;]‪V0=[0 0.1 0 1.99‬‬
‫;']‪t=[0:0.1:10‬‬
‫]‪for n=[1 2 3 4‬‬
‫;)‪y=ex9e_ypp(Y0(n),V0(n),t‬‬
‫)‪subplot(2,2,n‬‬
‫)'‪plot(t,y,t,(Y0(n)*cos(t)+V0(n)*sin(t)),'--r‬‬
‫)]))‪title(['y_0 = ' num2str(Y0(n)) ' , v_0 = ' num2str(V0(n‬‬
‫‪end‬‬
‫)'‪legend('Numerical','Approximated anylatic solution‬‬
‫מטלב לפיסיקאים תשע"ה תרגיל ‪ 9‬עמ' ‪3‬‬
‫‪ )5‬הוסיפו לפונקציה ‪ ex9e_ypp‬בדיקה של הארגומנטים‪ .‬במקרה של בעיה הפונקציה מחזירה מערך ריק‪.‬‬
‫‪)i‬‬
‫האם כולם מספריים וממשיים‬
‫‪ )ii‬האם יש לפחות שני זמנים במערך הזמנים‬
‫‪ )iii‬הם המערך בסדר עולה‬
‫‪ )iv‬האם כל מרווחי הזמנים אינם עולים על ‪( 0.1‬התחום בו הקירובים לנגזרות סבירים)‪.‬‬
‫‪% right after the declaration of ex9e_ypp‬‬
‫;)‪prob=false(5,1‬‬
‫;)]‪prob(1)=isnumeric(y0) && isnumeric(v0) && isreal([y0 v0‬‬
‫;)‪prob(2)=isnumeric(t) && isreal(t‬‬
‫;‪prob(3)=length(t)>=2‬‬
‫;)‪prob(4)=all(diff(t)>0‬‬
‫;)‪prob(5)=all(diff(t)<=0.1+eps‬‬
‫)‪if ~all(prob‬‬
‫;][=‪y‬‬
‫‪return‬‬
‫‪end‬‬
‫‪ )6‬בדקו את התוספת ע"י הפעלת הפונקציה מחלון הפקודות‪ ,‬עם ארגומנטים המתאימים לתנאים ועם ארגומנטים‬
‫שאינם מתאימים‪.‬‬
‫;)‪ex9e_ypp(4+2i,0,1:0.01:5‬‬
‫;)‪ex9e_ypp('0.1','0',0:0.1:10‬‬
‫;)‪ex9e_ypp(0,0.5,0:0.25:10‬‬
‫;))‪ex9e_ypp(-sqrt(0.2),0,randn(1,100‬‬
‫!‪ex9e_ypp(pi-0.001,0,0:0.05:30) % works‬‬
‫מטלב לפיסיקאים תשע"ה תרגיל ‪ 9‬עמ' ‪4‬‬