תרגיל 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
© Copyright 2024