סיכום הרצאה

‫© אגף התקשוב‪ ,‬אוניברסיטת בר אילן‬
‫ד"ר סמדר שץ‬
‫קורס תוכנת מטלב ויישומיה‬
‫קורס תוכנת מטלב ויישומיה‬
‫שיעור מס' ‪ :2‬עבודה עם מערכים‬
‫יצירת מערכים‬
‫יצירת סדרות‬
‫האופרטור ‪ :‬יוצר מערך שורה שאיבריו סדרה חשבונית‪.‬‬
‫‪start : step : stop‬‬
‫‪16‬‬
‫‪3.0000‬‬
‫‪14‬‬
‫‪2.5000‬‬
‫‪12‬‬
‫‪2.0000‬‬
‫‪8‬‬
‫‪10‬‬
‫‪1.5000‬‬
‫‪6‬‬
‫‪1.0000‬‬
‫‪2:2:16‬‬
‫= ‪ans‬‬
‫‪2‬‬
‫‪4‬‬
‫‪0.5:0.5:3‬‬
‫= ‪ans‬‬
‫‪0.5000‬‬
‫אם ‪ step‬חסר‪ ,‬ברירת המחדל היא ‪.1‬‬
‫‪start : stop‬‬
‫‪11‬‬
‫‪10‬‬
‫‪9‬‬
‫‪7‬‬
‫‪8‬‬
‫‪6‬‬
‫‪5‬‬
‫‪3‬‬
‫‪4‬‬
‫‪2:11‬‬
‫= ‪ans‬‬
‫‪2‬‬
‫אם ‪ stop‬איננו חלק מן הסדרה החשבונית המוגדרת ע"י ‪ start‬ו‪ ,step-‬הפעולה עוצרת באיבר האחרון לפני ‪.stop‬‬
‫‪6.5000‬‬
‫‪5.5000‬‬
‫‪3.5000‬‬
‫‪4.5000‬‬
‫‪2.5000‬‬
‫‪9.5000‬‬
‫‪0.5:10‬‬
‫= ‪ans‬‬
‫‪Columns 1 through 7‬‬
‫‪0.5000‬‬
‫‪1.5000‬‬
‫‪Columns 8 through 10‬‬
‫‪7.5000‬‬
‫‪8.5000‬‬
‫ליצירת סדרה יורדת יש לקחת ‪ step‬בערך שלילי‪.‬‬
‫‪start:-step:stop‬‬
‫‪5‬‬
‫‪2.5000‬‬
‫‪0.5000‬‬
‫‪6‬‬
‫‪7‬‬
‫‪4.5000‬‬
‫‪8‬‬
‫‪6.5000‬‬
‫פקודת ‪ linspace‬ליצירת סדרה ליניארית עם ‪ n‬אברים‬
‫‪10:-1:5‬‬
‫= ‪ans‬‬
‫‪10‬‬
‫‪9‬‬
‫‪8.5:-2:0‬‬
‫= ‪ans‬‬
‫‪8.5000‬‬
‫)‪linspace(start,stop,n‬‬
‫אם ‪ n‬חסר‪ ,‬ברירת המחדל‬
‫היא ‪ 100‬מספרים‪.‬‬
‫‪10‬‬
‫‪a‬‬
‫‪8‬‬
‫‪6‬‬
‫‪b‬‬
‫פקודת ‪ logspace‬ליצירת סדרה לוגריתמית עם ‪ n‬איברים בין ‪ 10‬ל‪.10 -‬‬
‫)‪linspace(0,10,6‬‬
‫= ‪ans‬‬
‫‪0‬‬
‫‪2‬‬
‫‪4‬‬
‫)‪v=logspace(a,b,n‬‬
‫כלומר‪ ,‬המרווחים בין איברי )‪ log10(v‬קבועים‪ .‬אם ‪ n‬חסר‪ ,‬ברירת המחדל היא ‪.50‬‬
‫‪100.0000‬‬
‫‪63.0957‬‬
‫‪39.8107‬‬
‫‪25.1189‬‬
‫‪2.0000‬‬
‫‪1.8000‬‬
‫‪1.6000‬‬
‫‪1.4000‬‬
‫)‪v = logspace(1,2,6‬‬
‫= ‪v‬‬
‫‪10.0000‬‬
‫‪15.8489‬‬
‫)‪log10(v‬‬
‫= ‪ans‬‬
‫‪1.0000‬‬
‫‪1.2000‬‬
‫ציון מפורש של איברי המערך‬
‫יצירת מערך שורה‪ :‬רשימת איברים מופרדים ברווחים‬
‫]‪[a1 a2 a3 a4 ...‬‬
‫או בפסיקים‬
‫עמ' ‪ 1‬מתוך ‪10‬‬
‫]‪or: [a1,a2,a3,a4...‬‬
‫שיעור ‪2‬‬
‫מרץ ‪15‬‬
‫קורס תוכנת מטלב ויישומיה‬
‫© אגף התקשוב‪ ,‬אוניברסיטת בר אילן‬
‫ד"ר סמדר שץ‬
‫‪0‬‬
‫]‪V15 = [3 7 -1 3 0‬‬
‫= ‪V15‬‬
‫‪3‬‬
‫‪7‬‬
‫‪-1‬‬
‫‪3‬‬
‫יצירת מערך עם יותר משורה אחת‪:‬‬
‫סיום שורה ע"י >‪<ENTER‬‬
‫‪9‬‬
‫‪3‬‬
‫]‪-1 3‬‬
‫סיום שורה ע"י ;‬
‫‪9‬‬
‫‪3‬‬
‫]‪; 4‬‬
‫יצירת מערך עמודה‪ :‬אבר אחד בכל שורה‪.‬‬
‫‪M23 = [4 2 9‬‬
‫]‪2 -1 3‬‬
‫= ‪M23‬‬
‫‪4‬‬
‫‪2‬‬
‫‪2‬‬
‫‪-1‬‬
‫‪M23 = [4 2 9 ; 2‬‬
‫= ‪M23‬‬
‫‪4‬‬
‫‪2‬‬
‫‪2‬‬
‫‪-1‬‬
‫‪V41 = [1 ; 2 ; 3‬‬
‫= ‪V41‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫◄תרגיל ‪ :1‬לכתוב סקריפט ‪ d2rotmat‬שמסובב נקודה במישור בזווית נתונה‪ ,‬לפי נוסחה ‪ .8‬הסקריפט מניח שקואורדינטות‬
‫הנקודה נתונות ע"י המשתנים ‪ x,y‬ושזווית הסיבוב נתונה ע"י המשתנה ‪ .alpha‬הסקריפט מייצר את מטריצת הסיבוב ‪rotmat‬‬
‫ומשתנה ‪ rotxy‬שהוא וקטור עמודה של הקואורדינטות לאחר סיבוב‪.‬‬
‫מערכים מיוחדים‬
‫קיימות במטלב פקודות לייצור מערכים מסוגים שונים‪ .‬כמה דוגמאות‪:‬‬
‫מס' ארגומנטים לממדים‬
‫ארגומנט אחד לממדים‬
‫קבועים‬
‫מטריצה ‪ nxm‬שכולה ‪1‬‬
‫)‪ones(n,m‬‬
‫)‪ones(sz‬‬
‫מטריצה ‪ nxm‬שכולה ‪0‬‬
‫)‪zeros(n,m‬‬
‫)‪zeros(sz‬‬
‫)‪nan(n,m‬‬
‫)‪nan(sz‬‬
‫מטריצה ‪ nxm‬שכולה ‪NaN‬‬
‫כאשר ‪ sz‬הוא מערך שורה של הממדים‪.‬‬
‫במערך דו ממדי ]‪.sz=[n m‬‬
‫דוגמאות‪ :‬מטריצה שכולה ‪5‬‬
‫מערך שורה שכולו ‪NaN‬‬
‫‪NaN‬‬
‫‪NaN‬‬
‫‪NaN‬‬
‫‪NaN‬‬
‫)‪5*ones(2,4‬‬
‫=‪ans‬‬
‫‪5 5 5 5‬‬
‫‪5 5 5 5‬‬
‫)]‪nan([1 6‬‬
‫= ‪ans‬‬
‫‪NaN‬‬
‫‪NaN‬‬
‫מספרים אקראיים‬
‫התפלגות אחידה בין ‪ 0‬ל‪1-‬‬
‫התפלגות גאוסיאנית סביב ‪ 0‬ברוחב ‪1‬‬
‫מספרים שלמים בהתפלגות אחידה בין ‪ 1‬ל‪K-‬‬
‫)‪rand(n,m‬‬
‫)‪rand(sz‬‬
‫)‪randn(n,m‬‬
‫)‪randn(sz‬‬
‫)‪randi(K,n,m‬‬
‫)‪randi(K,sz‬‬
‫ממדים בפקודות שלמעלה‪:‬‬
‫ניתן ליצור מערכים רב‪-‬ממדיים ע"י ציון יותר מ‪ 2-‬ממדים‪.‬‬
‫אם מציינים רק מימד אחד‪ ,‬נוצרת מטריצה ריבועית‪.‬‬
‫)‪rand(1,4‬‬
‫=‪ans‬‬
‫‪0.9134 0.1270 0.9058 0.8147‬‬
‫דוגמאות‪:‬‬
‫עמ' ‪ 2‬מתוך ‪10‬‬
‫שיעור ‪2‬‬
‫מרץ ‪15‬‬
‫© אגף התקשוב‪ ,‬אוניברסיטת בר אילן‬
‫ד"ר סמדר שץ‬
‫קורס תוכנת מטלב ויישומיה‬
‫)‪randn(3‬‬
‫= ‪ans‬‬
‫‪-0.4336‬‬
‫‪0.8622‬‬
‫‪0.5377‬‬
‫‪0.3426‬‬
‫‪0.3188‬‬
‫‪1.8339‬‬
‫‪3.5784‬‬
‫‪-1.3077‬‬
‫‪-2.2588‬‬
‫‪6‬‬
‫‪1‬‬
‫‪3‬‬
‫‪5‬‬
‫‪9‬‬
‫)‪randi(9,5‬‬
‫=‪ans‬‬
‫‪7 9 8 9‬‬
‫‪7 6 2 2‬‬
‫‪7 1 4 9‬‬
‫‪4 8 9 9‬‬
‫‪6 9 8 5‬‬
‫◄תרגיל ‪ :2‬ליצור סדרה של ‪ n‬מספרים אקראיים בהתפלגות אחידה בין ‪ a‬ל‪.b-‬‬
‫‪load LDGWsineGW‬‬
‫)'‪plot(T,deer,'k‬‬
‫‪hold on‬‬
‫)'‪plot(T,deer+6*rand(size(deer))-3,'c‬‬
‫◄דוגמא ‪ :1‬נתון סיגנל‪.‬‬
‫להוסיף לסיגנל רעש בהתפלגות אחידה בין ‪ -3‬ל‪.3-‬‬
‫‪45‬‬
‫‪40‬‬
‫‪35‬‬
‫‪30‬‬
‫‪25‬‬
‫‪20‬‬
‫‪100‬‬
‫‪90‬‬
‫‪80‬‬
‫‪70‬‬
‫‪60‬‬
‫‪50‬‬
‫‪40‬‬
‫‪30‬‬
‫‪20‬‬
‫‪10‬‬
‫‪0‬‬
‫‪15‬‬
‫מטריצות אלכסוניות‬
‫מטריצת יחידה בגודל ‪nxn‬‬
‫)‪eye(n‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫יצירת מטריצה אלכסונית ממערך חד‪-‬ממדי ‪v‬‬
‫)‪diag(v‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪6‬‬
‫)‪diag(v,k‬‬
‫יצירת מטריצה עם אלכסון משני‪ k :‬חיובי מעל האלכסון הראשי‪,‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫שלילי מתחת לאלכסון הראשי‪.‬‬
‫)‪diag(M,k‬‬
‫מציאת אלכסון של מטריצה ‪ .M‬אם ‪ k‬לא מצוין‪ ,‬ברירת המחדל‬
‫היא ‪( k=0‬אלכסון ראשי)‪ .‬הפקודה מוגדרת גם למטריצות‬
‫מלבניות‪.‬‬
‫עמ' ‪ 3‬מתוך ‪10‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫)‪eye(3‬‬
‫= ‪ans‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫שיעור ‪2‬‬
‫)]‪diag([5 -1 8 6‬‬
‫= ‪ans‬‬
‫‪5‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪-1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪8‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫)‪diag([5 -1 8],-1‬‬
‫= ‪ans‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪5‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪-1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪8‬‬
‫] ‪G=[5 -1 8 ; 3 1 7‬‬
‫= ‪G‬‬
‫‪5‬‬
‫‪-1‬‬
‫‪8‬‬
‫‪3‬‬
‫‪1‬‬
‫‪7‬‬
‫)‪diag(G‬‬
‫= ‪ans‬‬
‫‪5‬‬
‫‪1‬‬
‫מרץ ‪15‬‬
‫קורס תוכנת מטלב ויישומיה‬
‫ד"ר סמדר שץ‬
‫© אגף התקשוב‪ ,‬אוניברסיטת בר אילן‬
‫◄דוגמא ‪ :2‬להראות איך לכפול כל שורה של מטריצה במספר‬
‫אחר‪ ,‬ע"י כפל במטריצה אלכסונית‪.‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫)]‪4‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪4‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫◄תרגיל ‪ :3‬לכתוב סקריפט ‪ d2chess1‬שמייצר "מטריצת לוח‬
‫שחמט" (לדוגמא משמאל מטריצת שחמט בגודל ‪ )5‬בעזרת ‪.diag‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫)‪Q = ones(3,4‬‬
‫= ‪Q‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪P3 = diag([2 3‬‬
‫= ‪P3‬‬
‫‪2‬‬
‫‪0‬‬
‫‪0‬‬
‫‪3‬‬
‫‪0‬‬
‫‪0‬‬
‫‪P3*Q‬‬
‫= ‪ans‬‬
‫‪2‬‬
‫‪2‬‬
‫‪3‬‬
‫‪3‬‬
‫‪4‬‬
‫‪4‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫טרנספורמציה‬
‫ארגון מחדש של האיברים‬
‫מטלב מסדר בזיכרון מערכים ממימד ‪ 2‬ומעלה לפי עמודות‪ :‬תחילה כל האברים‬
‫]‪A = [1 2 3 4 ; 5 6 7 8‬‬
‫= ‪A‬‬
‫מהעמודה הראשונה‪ ,‬אח"כ כל האברים מן העמודה השנייה וכו'‪ .‬אם יש יותר ממישור‬
‫אחד‪ ,‬לאחר כל האברים מהמישור הראשון יופיעו האברים מהמישור השני וכו' לפי אותו‬
‫סידור‪.‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫‪8‬‬
‫‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫)‪ A(:) A(:‬מחזיר וקטור עמודה של כל האברים של ‪ A‬כפי שהם מסודרים בזיכרון‪.‬‬
‫= ‪ ans‬פקודת ‪ reshape‬מארגנת מחדש את אברי המערך מבלי לשנות את‬
‫‪1‬‬
‫‪5‬‬
‫‪2‬‬
‫‪6‬‬
‫‪3‬‬
‫‪7‬‬
‫‪4‬‬
‫‪8‬‬
‫מיקומם בזיכרון‪.‬‬
‫)…‪reshape(A,d1,d2,‬‬
‫)‪reshape(A,sz‬‬
‫)]‪reshape(A,[2 2 2‬‬
‫= )‪ans(:,:,1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪5‬‬
‫‪6‬‬
‫= )‪ans(:,:,2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪7‬‬
‫‪8‬‬
‫)‪reshape(A,4,2‬‬
‫= ‪ans‬‬
‫‪1‬‬
‫‪3‬‬
‫‪5‬‬
‫‪7‬‬
‫‪2‬‬
‫‪4‬‬
‫‪6‬‬
‫‪8‬‬
‫מטריצה מוחלפת ‪ :‬שורות הופכות לעמודות ועמודות לשורות‪.‬‬
‫)‪transpose(A‬‬
‫'‪A.‬‬
‫צמוד מוחלף‪ :‬העמודות של ‪ B‬הן הצמוד המרוכב של השורות של ‪ A‬והשורות של ‪ B‬הן‬
‫)‪B = ctrsnapose(A‬‬
‫הצמוד המרוכב של העמודות של ‪.A‬‬
‫'‪B = A‬‬
‫אם המטריצה ממשית‪ ,‬אין הבדל בין '‪ A‬ל‪A.' -‬‬
‫‪5‬‬
‫‪6‬‬
‫‪7‬‬
‫‪8‬‬
‫עמ' ‪ 4‬מתוך ‪10‬‬
‫שיעור ‪2‬‬
‫'‪A‬‬
‫= ‪ans‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫מרץ ‪15‬‬
‫קורס תוכנת מטלב ויישומיה‬
‫© אגף התקשוב‪ ,‬אוניברסיטת בר אילן‬
‫ד"ר סמדר שץ‬
‫◄תרגיל ‪ :4‬בהינתן ‪ ,n‬ליצור וקטור עמודה שאבריו הם המספרים מ‪ 1-‬עד ‪.n‬‬
‫;‪n=3;m=5‬‬
‫')‪reshape(1:n*m,m,n‬‬
‫◄דוגמא ‪ :3‬בהינתן ‪ n,m‬לייצר מטריצה ‪nxm‬‬
‫שהשורות שלה הן מספרים עוקבים‪.‬‬
‫‪5‬‬
‫‪10‬‬
‫‪15‬‬
‫‪4‬‬
‫‪9‬‬
‫‪14‬‬
‫‪3‬‬
‫‪8‬‬
‫‪13‬‬
‫‪2‬‬
‫‪7‬‬
‫‪12‬‬
‫= ‪ans‬‬
‫‪1‬‬
‫‪6‬‬
‫‪11‬‬
‫שרשור (‪)concatenation‬‬
‫שרשור ‪ :‬פעולה המצרפת כמה מערכים למערך אחד‪ .‬השרשור שומר על סדר האברים בכל מערך‪.‬‬
‫אופרטור השרשור‪ ( [ ] :‬סוגריים מלבניים המקיפים את האופרנדים)‪.‬‬
‫בשרשור אופקי מצרפים את העמודות של המערכים המשורשרים למערך‬
‫אחד שמספר העמודות שלו כסכום מספר העמודות של המערכים‪ .‬אורך‬
‫העמודות חייב להיות זהה בכל המערכים‪ .‬צורת כתיבה‪:‬‬
‫]‪[A B‬‬
‫אפשר גם‪:‬‬
‫]‪[A,B‬‬
‫;]‪c = [2; 3; 4; 5‬‬
‫]‪M = [c c.^2 c.^3‬‬
‫= ‪M‬‬
‫‪2‬‬
‫‪4‬‬
‫‪8‬‬
‫‪3‬‬
‫‪9‬‬
‫‪27‬‬
‫‪4‬‬
‫‪16‬‬
‫‪64‬‬
‫‪5‬‬
‫‪25‬‬
‫‪125‬‬
‫◄דוגמא ‪ :4‬שרשור עמודות ליצירת מטריצה‪:‬‬
‫בשרשור אנכי מצרפים את השורות של המערכים המשורשרים למערך‬
‫אחד שמספר שורותיו כסכום מספר השורות של המערכים‪.‬‬
‫אורך השורות חייב להיות זהה בכל המערכים‪ .‬צורת כתיבה‪:‬‬
‫]‪[A ; B‬‬
‫‪load arrays‬‬
‫]‪W = [R; S; R‬‬
‫= ‪W‬‬
‫‪3‬‬
‫‪6‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪6‬‬
‫◄דוגמא ‪ :5‬שרשור שורות ליצירת מטריצה‬
‫‪8‬‬
‫‪3‬‬
‫‪8‬‬
‫◄תרגיל ‪ :5‬לכתוב סקריפט ‪ d2chess2‬שמייצר "מטריצות לוח שחמט"‬
‫(לדוגמא משמאל מטריצת שחמט בגודל ‪ )4‬בגודל ‪ 4 ,2‬ו ‪ 8-‬ע"י שרשור‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫חוזר של מטריצת יחידה מגודל ‪.2‬‬
‫פקודת שרשור לאורך מימד כלשהו ‪:dim‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫)‪cat(dim,A,B‬‬
‫שרשור אנכי‪:‬‬
‫)‪cat(1,A,B‬‬
‫שרשור אופקי‪:‬‬
‫)‪cat(2,A,B‬‬
‫שרשור שתי מטריצות מאותו מימד ליצירת מערך תלת ממדי‪:‬‬
‫)‪cat(3,A,B‬‬
‫עמ' ‪ 5‬מתוך ‪10‬‬
‫שיעור ‪2‬‬
‫מרץ ‪15‬‬
‫קורס תוכנת מטלב ויישומיה‬
‫© אגף התקשוב‪ ,‬אוניברסיטת בר אילן‬
‫ד"ר סמדר שץ‬
‫פעולות על חלק ממערך‬
‫במטלב אינדקס האיבר הראשון בכל מימד הוא ‪.1‬‬
‫המימד הראשון מתייחס למקום האיבר בעמודה (או למספר השורה)‪.‬‬
‫המימד השני מתייחס למקום האיבר בשורה (או למספר העמודה)‪.‬‬
‫המימד השלישי (אם יש) מתייחס למספר המישור‪.‬‬
‫גישה לאיברים‬
‫גישה לאיבר במערך ‪ :A‬סוגריים עגולים‪.‬‬
‫)‪A(n1,n2,...‬‬
‫‪C‬‬
‫= ‪C‬‬
‫מערך חד‪-‬ממדי (שורה או עמודה)‪ :‬מספיק אינדקס אחד‪.‬‬
‫‪4‬‬
‫‪7‬‬
‫‪8‬‬
‫‪1‬‬
‫‪8‬‬
‫)‪C(3‬‬
‫=‪ans‬‬
‫‪8‬‬
‫‪load arrays‬‬
‫‪R‬‬
‫= ‪R‬‬
‫‪3‬‬
‫‪6‬‬
‫)‪R(2‬‬
‫= ‪ans‬‬
‫‪6‬‬
‫)‪C(3,1‬‬
‫= ‪ans‬‬
‫‪8‬‬
‫אפשר גם כך‪:‬‬
‫מערך דו‪-‬ממדי‪ 2 :‬אינדקסים‬
‫‪8‬‬
‫‪3‬‬
‫‪6‬‬
‫‪9‬‬
‫גישה עם אינדקס אחד למערך עם מספר כלשהו של ממדים‪ :‬האינדקס מתייחס למקום בזיכרון‪.‬‬
‫)‪R(1,2‬‬
‫= ‪ans‬‬
‫‪6‬‬
‫‪A‬‬
‫= ‪A‬‬
‫‪3‬‬
‫‪0‬‬
‫)‪A(1,3‬‬
‫= ‪ans‬‬
‫‪8‬‬
‫)‪A(4‬‬
‫= ‪ans‬‬
‫‪9‬‬
‫גישה עם מספר ממדים פחות ממספר ממדי המערך‪ :‬ברירת מחדל המימדים החסרים = ‪1‬‬
‫גישה עם מספר ממדים יותר ממספר ממדי המערך‪ :‬אפשרי אם הממדים ה"מיותרים" = ‪1‬‬
‫‪ end‬האבר האחרון‪ :‬בעל משמעות זו רק בהקשר של גישה לאיברי מערך‪.‬‬
‫האבר האחרון בשורה ‪1‬‬
‫האבר האחרון בעמודה ‪2‬‬
‫‪ :‬כל האיברים לאורך מימד מסוים (רק בהקשר לגישה לאברי מערך)‪.‬‬
‫עמודה שניה‪:‬‬
‫שורה שניה‪:‬‬
‫‪3‬‬
‫עמ' ‪ 6‬מתוך ‪10‬‬
‫שיעור ‪2‬‬
‫‪9‬‬
‫)‪C(end‬‬
‫= ‪ans‬‬
‫‪1‬‬
‫)‪A(1,end‬‬
‫= ‪ans‬‬
‫‪8‬‬
‫)‪A(end,2‬‬
‫= ‪ans‬‬
‫‪9‬‬
‫)‪A(:,2‬‬
‫= ‪ans‬‬
‫‪6‬‬
‫‪9‬‬
‫)‪A(2,:‬‬
‫= ‪ans‬‬
‫‪0‬‬
‫מרץ ‪15‬‬
‫© אגף התקשוב‪ ,‬אוניברסיטת בר אילן‬
‫ד"ר סמדר שץ‬
‫קורס תוכנת מטלב ויישומיה‬
‫)‪C(1:3‬‬
‫סדרה של אינדקסים‪ :‬מחזירה סדרה של איברים‪.‬‬
‫= ‪ans‬‬
‫‪4‬‬
‫‪7‬‬
‫‪8‬‬
‫‪8‬‬
‫‪3‬‬
‫)]‪C([1 4‬‬
‫= ‪ans‬‬
‫‪4‬‬
‫‪1‬‬
‫)‪A(:,2:3‬‬
‫= ‪ans‬‬
‫‪6‬‬
‫‪9‬‬
‫◄תרגיל ‪ :6‬כל האברים ממערך חד‪ -‬ממדי מסוים‪ ,‬בלי הראשון‪ .‬כנ"ל בלי האחרון‪.‬‬
‫)‪indx = randi(length(s),1,n‬‬
‫◄דוגמא ‪ :6‬נתונה קבוצה ‪ s‬של מספרים‪ .‬להשתמש‬
‫בפקודה ‪ randi‬כדי לייצר סדרה ‪ v‬של ‪ n‬מספרים אקראיים‬
‫שערכיהם לקוחים מתוך הסדרה ‪.s‬‬
‫= ‪indx‬‬
‫‪4‬‬
‫‪3‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪2‬‬
‫‪1‬‬
‫‪8‬‬
‫‪7‬‬
‫‪7‬‬
‫‪7‬‬
‫‪5‬‬
‫)‪v = s(indx‬‬
‫= ‪v‬‬
‫‪7‬‬
‫‪9‬‬
‫;‪s = [9 5 8 7]; n=7‬‬
‫ביצוע פעולות בין שני איברים סמוכים בכל המערך ‪:A‬‬
‫)‪A(end‬‬
‫)‪A(3‬‬
‫)‪A(end-1‬‬
‫)‪A(end‬‬
‫)‪A(2‬‬
‫)‪A(1‬‬
‫)‪A(3‬‬
‫)‪A(2‬‬
‫)‪A(1:end-1‬‬
‫)‪A(2:end‬‬
‫)‪A(1‬‬
‫◄דוגמא ‪" :7‬ממוצע רץ" = ממוצע על כל שני אברים סמוכים‪.‬‬
‫החלקה ע"י ממוצע רץ‪:‬‬
‫;‪y_av = (y(1:end-1)+y(2:end))/2‬‬
‫נקרא ונשרטט באדום את הנתונים הגולמיים‪.‬‬
‫;‪x_av = (x(1:end-1)+x(2:end))/2‬‬
‫)'‪hold on; plot(x_av,y_av,'k‬‬
‫‪load acid.txt‬‬
‫‪0.2‬‬
‫;)‪x = acid(:,1‬‬
‫‪0.15‬‬
‫;)‪y = acid(:,2‬‬
‫)'‪plot(x,y,'r‬‬
‫‪0.1‬‬
‫נחשב ונשרטט בשחור על אותו גרף את הממוצע הרץ‪:‬‬
‫‪0.05‬‬
‫‪0‬‬
‫‪900‬‬
‫‪850‬‬
‫‪800‬‬
‫‪750‬‬
‫‪700‬‬
‫‪650‬‬
‫‪600‬‬
‫‪-0.05‬‬
‫‪550‬‬
‫חתך ‪ :‬התייחסות לאינדקס בערך נתון באחד הממדים ולכל האינדקסים בשאר הממדים‪.‬‬
‫דוגמאות‪ :‬עמודה במטריצה‪ ,‬שורה במטריצה‪ ,‬מישור במערך תלת‪-‬ממדי‪.‬‬
‫במידע טבלאי‪ ,‬משתמשים בחתך כדי לבדוק תלות במשתנה אחד כאשר המשתנה השני קבוע‪.‬‬
‫◄תרגיל ‪ : 7‬קריאת נתונים וארגונם מתוך קובץ נתוני לידות ‪.births.xls‬‬
‫קריאת קובץ אקסל נעשית ע"י פקודת ‪ xlsread‬באופן הבא‪nums=xlsread('filename') :‬‬
‫לקרוא את הטבלה המספרית‪ .‬להפריד עמודת שנים לחוד וטבלת נתוני לידות לחוד‪.‬‬
‫מהי השנה האחרונה? לשרטט את נתוני הלידות בשנה האחרונה כתלות במס' החודש‪.‬‬
‫לשרטט את נתוני הלידות בחודש השני כתלות בשנה‪.‬‬
‫לשרטט את נתוני הלידות בחודשים רציפים כרונולוגית‪.‬‬
‫עמ' ‪ 7‬מתוך ‪10‬‬
‫שיעור ‪2‬‬
‫מרץ ‪15‬‬
‫קורס תוכנת מטלב ויישומיה‬
‫© אגף התקשוב‪ ,‬אוניברסיטת בר אילן‬
‫ד"ר סמדר שץ‬
‫שינוי איברים‬
‫שינוי ערכים של חלק מאברי המערך נעשה ע"י השמה לאברים אלה ע"י ציון‬
‫האינדקסים‪ .‬לדוגמא‪ ,‬נתון‪:‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫השמה לאיבר בודד‪:‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫השמה למספר אברים אפשרית‪ ,‬אם המימד של האינדקסים בצד שמאל זהה למימד‬
‫של מערך בצד ימין‪ .‬דוגמא‪" :‬שתילת" השורה ]‪ [6 7 2‬בחלק מן השורה הראשונה‬
‫‪2‬‬
‫‪1‬‬
‫‪1‬‬
‫של ‪.A‬‬
‫הרחבה סקלרית‪ :‬השמת ערך אחיד למספר מקומות‪.‬‬
‫דוגמא‪ :‬מילוי השורה האחרונה בערך ‪-1‬‬
‫‪2‬‬
‫‪1‬‬
‫‪-1‬‬
‫)‪A = ones(3,4‬‬
‫= ‪A‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪A(2,3) = 5‬‬
‫= ‪A‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪5‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫]‪A(1,2:4) = [6 7 2‬‬
‫= ‪A‬‬
‫‪1‬‬
‫‪6‬‬
‫‪7‬‬
‫‪1‬‬
‫‪1‬‬
‫‪5‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪A(end,:)=-1‬‬
‫= ‪A‬‬
‫‪1‬‬
‫‪6‬‬
‫‪7‬‬
‫‪1‬‬
‫‪1‬‬
‫‪5‬‬
‫‪-1‬‬
‫‪-1‬‬
‫‪-1‬‬
‫◄תרגיל ‪ :8‬איפוס כל איבר שני במערך חד ‪-‬ממדי‪.‬‬
‫;‪n=5‬‬
‫◄דוגמא ‪ :8‬יצירת לוח שחמט בגודל ‪ nxm‬ע"י הצבה‪.‬‬
‫;‪m=6‬‬
‫;)‪chess = zeros(n,m‬‬
‫ניצור טבלה של אפסים‪.‬‬
‫‪chess(2:2:end,2:2:end)=1‬‬
‫נמלא את המקומות הזוגיים‪.‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫נמלא גם את המקומות האי ‪-‬זוגיים‪.‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫= ‪chess‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪chess(1:2:end,1:2:end)=1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫= ‪chess‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫מחיקת איברים‬
‫מחיקת איברים במערך מקטינה את המימד שלו ו"מזיזה" את האיברים שאחרי אלה שנמחקו (נשאר רצף)‪.‬‬
‫צורת הכתיבה‪ :‬ע"י השמת מערך ריק [ ] לאיברים שמוחקים‪ .‬ניתן למחוק רק "חתכים" (שורות‪ ,‬עמודות או מישורים שלמים)‪.‬‬
‫מחיקת עמודה‬
‫‪0‬‬
‫‪9‬‬
‫‪0‬‬
‫‪2‬‬
‫‪1‬‬
‫‪-1‬‬
‫מחיקת שורה‬
‫‪9‬‬
‫‪0‬‬
‫עמ' ‪ 8‬מתוך ‪10‬‬
‫שיעור ‪2‬‬
‫‪1‬‬
‫‪-1‬‬
‫] [=)‪A(:,2‬‬
‫= ‪A‬‬
‫‪1‬‬
‫‪7‬‬
‫‪1‬‬
‫‪5‬‬
‫‪-1‬‬
‫‪-1‬‬
‫] [=)‪A(1,:‬‬
‫= ‪A‬‬
‫‪1‬‬
‫‪5‬‬
‫‪-1‬‬
‫‪-1‬‬
‫מרץ ‪15‬‬
‫קורס תוכנת מטלב ויישומיה‬
‫© אגף התקשוב‪ ,‬אוניברסיטת בר אילן‬
‫ד"ר סמדר שץ‬
‫◄תרגיל ‪ :9‬מחיקת כל אבר שני במערך חד‪-‬ממדי‪ .‬מחיקת עמודה אחרונה במטריצה‪.‬‬
‫הוספת איברים‬
‫השמה למקום שאינו קיים במערך‪ MATLAB :‬משלים את המערך למלבן‬
‫ע"י מילוי באפסים במקומות שעבורם לא צוינו ערכים‪.‬‬
‫‪0‬‬
‫‪9‬‬
‫‪0‬‬
‫‪2‬‬
‫‪1‬‬
‫‪-1‬‬
‫‪7‬‬
‫‪5‬‬
‫‪-1‬‬
‫‪6‬‬
‫‪1‬‬
‫‪-1‬‬
‫‪A(2,5)=9‬‬
‫= ‪A‬‬
‫‪1‬‬
‫‪1‬‬
‫‪-1‬‬
‫◄תרגיל ‪ :10‬בפקודה אחת ליצור מערך של אפסים ‪ 3x5‬למעט האבר בפינה הימנית התחתונה שהוא ‪.1‬‬
‫אלגברה ליניארית‬
‫פתרון מערכת משוואות ליניאריות‬
‫מערכת של משוואות ליניאריות ניתנת לכתיבה בצורה מטריציונית‪ CX=R :‬כאשר ‪ C‬מטריצת המקדמים‪ X ,‬וקטור עמודה של‬
‫נעלמים ו‪ R-‬וקטור עמודה של קבועים (צד ימין)‪ .‬במטלב כדי למצוא את ‪ X‬יש לחלק את המשוואה ב‪ C-‬מצד שמאל‪.X = C\R :‬‬
‫כדי לפתור את מערכת המשוואות‪:‬‬
‫]‪C = [3 5 -1; 2 3 0; 4 -2 5‬‬
‫‪3x + 5y - z = 18‬‬
‫= ‪C‬‬
‫‪= 12‬‬
‫‪2x + 3y‬‬
‫‪4x - 2y+ 5z = 13‬‬
‫כותבים במטלב‪:‬‬
‫‪3‬‬
‫‪5‬‬
‫‪-1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪0‬‬
‫‪4‬‬
‫‪-2‬‬
‫‪5‬‬
‫]‪R = [18; 12; 13‬‬
‫= ‪R‬‬
‫‪18‬‬
‫‪12‬‬
‫‪13‬‬
‫‪X = C\R‬‬
‫= ‪X‬‬
‫‪3.0000‬‬
‫‪2.0000‬‬
‫‪1.0000‬‬
‫קו‪-‬רגרסיה‬
‫כאשר יש יותר משוואת מאשר נעלמים‪ ,‬יש אילוץ‪-‬יתר (‪ )over-determined‬ולא ניתן לפתור את כל המשוואות כך שצד שמאל =‬
‫צד ימין‪ .‬במקרה זה מטלב פותר לריבועים מינימליים‪ ,‬כלומר שסכום הריבועים של ‪ CX-R‬יהיה מינימלי‪.‬‬
‫התאמה ליניארית‪ :‬עבור סדרה של נקודות ‪ xi‬נתונים ערכי הפונקציה ‪ yi‬ורוצים למצוא מקדמים ‪ a,b‬כך שהקו ‪ y=ax+b‬יעבור קרוב‬
‫לכל הנקודות‪ .‬אם ‪ x,y‬וקטורי עמודה‪ ,‬ניתן לכתוב את המשוואות לכל הנקודות כך‪ C[ab]=y :‬כאשר ]‪ 1( C=[x 1‬מסמן עמוד של ‪-1‬‬
‫ים) ו‪ [ab]-‬וקטור עמודה‪ .‬הפתרון הוא ‪ ab=C\y‬כאשר האיבר הראשון ב‪ ab-‬הוא המקדם של ‪ x‬והאיבר השני הוא האיבר החופשי‪.‬‬
‫עמ' ‪ 9‬מתוך ‪10‬‬
‫שיעור ‪2‬‬
‫מרץ ‪15‬‬
‫© אגף התקשוב‪ ,‬אוניברסיטת בר אילן‬
‫ד"ר סמדר שץ‬
‫קורס תוכנת מטלב ויישומיה‬
‫◄דוגמא ‪:9‬‬
‫‪26‬‬
‫‪raw‬‬
‫‪linear fit‬‬
‫‪inverse fit‬‬
‫‪24‬‬
‫‪22‬‬
‫הסקריפט ‪ d2cars‬קורא נתונים מקובץ ‪ carbig‬הנמצא במטלב‪,‬‬
‫‪20‬‬
‫ומשרטט את הקשר בין תאוצת מכונית למסה שלה‪.‬‬
‫‪18‬‬
‫מחושבת התאמה ליניארית בין המסה לתאוצה (שיפוע שלילי)‪.‬‬
‫‪16‬‬
‫מחושבת התאמה ליניארית בין המסה להופכי של התאוצה (שיפוע‬
‫‪14‬‬
‫חיובי)‪ .‬הנתונים "מתורגמים" בחזרה לתאוצה והמידע מוצג על הגרף‪.‬‬
‫‪12‬‬
‫‪10‬‬
‫‪5500‬‬
‫‪5000‬‬
‫‪4500‬‬
‫‪4000‬‬
‫‪3500‬‬
‫‪3000‬‬
‫‪2500‬‬
‫‪2000‬‬
‫‪8‬‬
‫‪1500‬‬
‫רגרסיה ליניארית רב‪-‬ממדית‬
‫ניתן להכליל רגרסיה ליניארית למספר כלשהו של משתנים בלתי תלויים‪ .‬עבור סדרה של נקודות ‪ xni‬כאשר ‪ n‬הוא מס' המשתנה‬
‫הבלתי תלוי ו‪ i-‬מס' הנקודה‪ ,‬נתונים ערכי הפונקציה ‪ yi‬ורוצים למצוא מקדמים ‪ a1,a2,a3,...,b‬כך שהביטוי ‪a1x1+a2x2+a3x3+...+b‬‬
‫יקבל ערכים קרובים ככל האפשר ל‪ .y-‬אם ‪ y‬וקטור עמודה ו‪ x-‬מטריצה שאורך העמודות שלה כמספר הנקודות‪ ,‬ניתן לכתוב את‬
‫המשוואות לכל הנקודות כך‪ C[anb]=y :‬כאשר ]‪ C=[x 1‬ו‪ [ab]-‬וקטור עמודה‪ .‬הפתרון הוא ‪ anb=C\y‬כאשר האיברים הראשונים ב ‪-‬‬
‫‪ anb‬הם המקדמים של המשתנים הבלתי תלויים ‪ x‬והאיבר האחרון הוא האיבר החופשי‪.‬‬
‫התאמה ליניארית לפונקציות לא ליניאריות‬
‫קומבינציה ליניארית של פונקציות לא ליניאריות‬
‫ניתן להכליל עוד רגרסיה ליניארית‪ :‬המשתנים ‪ xn‬הם לא בהכרח משתנים בלתי‪-‬תלויים במרחב רב‪-‬ממדי‪ ,‬אלא יכולים להיות גם‬
‫פונקציות שונות של משתנים בלתי ‪-‬תלויים (או אפילו משתנה בלתי‪-‬תלוי אחד)‪ .‬למשל ‪ xn‬יכולים להיות חזקות שונות של ‪ .x‬במקרה‬
‫זה העמודות של המטריצה ‪ C‬לא יהיו קואודינטות שונות אלא פונקציות שונות של אותה קואורדינטה ‪ .x‬ההתאמה תהיה ליניארית‬
‫כל עוד הפונקציות עצמן אינן כוללות פרמטרים בל תי ידועים וכל עוד מחפשים רק מקדמים (כופלים) של הפונקציות‪.‬‬
‫לדוגמא‪ ,‬אם רוצים למצוא מקדמים לנוסחה‪ y = a1x12+a2x22+a3x1x2+a4x1+a5x2+b :‬אז המטריצה ‪ C‬תיכתב כך‪:‬‬
‫]‪C = [x12 x22 x1x2 x1 x2 1‬‬
‫המרה מפונקציה לא‪-‬ליניארית לפונקציה ליניארית‬
‫אם ניתן "לחלץ" את ‪ x‬מן הנוסחה כך שמקבלים ‪ x=af(y)+b‬אז ניתן למצוא את ‪ a,b‬ע"י התאמה ליניארית‪ .‬דוגמאות‪:‬‬
‫פונקציה מקורית‬
‫תהליך התאמה‬
‫ערך הפרמטרים‬
‫‪y  Ae ax‬‬
‫‪ln y  B  ax‬‬
‫‪A  eB‬‬
‫‪y  Ae  ax‬‬
‫‪ ‬‬
‫‪y‬‬
‫‪ ‬‬
‫‪2‬‬
‫‪a‬‬
‫‪b  x2‬‬
‫עמ' ‪ 10‬מתוך ‪10‬‬
‫‪ln y  B  b  x 2‬‬
‫‪A  e B , a  b‬‬
‫‪1‬‬
‫‪ c  d  x2‬‬
‫‪y‬‬
‫‪c‬‬
‫‪d‬‬
‫שיעור ‪2‬‬
‫‪a  d1 , b ‬‬
‫מרץ ‪15‬‬