באמנות, מֶחְוָה (בלעז: הוֹמָאז') היא מתן הוקרה ליוצר, בדרך כלל באמצעות רמז ברור ליצירתו ביצירה של האמן המביע את המחווה. פעמים רבות המחווה היא בדרך של "ציטוט" רעיון המופיע ביצירה המקורית. מחווה מופיעה בציור, בקולנוע, בספרות, בשירה, במוזיקה ועוד.
להבדיל מפלגיאט שבו ציטוט של רעיון של יוצר מסוים נעשה בהיחבא, ללא מתן קרדיט ליוצר המקורי, במחווה הציטוט נעשה בגלוי, תוך מתן קרדיט מפורש או משתמע ליוצר המקורי.
MATLAB
MATLAB (בתעתיק לעברית: מאטלב) היא שפה דור רביעי בתחום המתמטי פנימי, הכוללת שפת תכנות, ומיוצרת על ידי חברת MathWorks. התוכנה מאפשרת טיפול קל ונוח במטריצות, שימוש בפונקציות ובנתונים, מימוש אלגוריתמים על נתונים, יצירת ממשקי משתמש ויצירת קשר עם תוכנות הכתובות בשפות אחרות.
היסטוריה.
השם MATLAB הוא ראשי תיבות של המילים "מעבדת מטריצות" - "matrix laboratory" באנגלית. MATLAB נכתבה בסוף שנות ה-70 על ידי קליב מולר, אז ראש המחלקה למדעי המחשב באוניברסיטת ניו מקסיקו. מטרת התוכנית הייתה מתן גישה לספריות המתמטיות LINPACK ו-EISPACK ללא צורך ללמוד Fortran. התוכנה נפוצה במהירות באוניברסיטאות ובקהילת חוקרי המתמטיקה השימושית. ג'ק ליטל, מהנדס, גילה את התוכנה כאשר ביקר את מולר באוניברסיטת סטנפורד במהלך 1983. ליטל הכיר בפוטנציאל המסחרי, וצירף את מולר וסטיב באנגרט. הם כתבו מחדש את התוכנה בשפת C (ספריות משוכתבות אלו ידועות כ-JACKPAC) וייסדו את Mathworks ב-1984, על מנת להמשיך את פיתוחה.
התוכנה אומצה תחילה על ידי חוקרים ועובדים בהנדסת מכשור ובקרה, תחום המומחיות של ג'ק ליטל, אבל במהירות נפוצה לתחומים שונים. התוכנה נמצאת בשימוש נרחב באקדמיה, במיוחד בנושאי הלימוד של אלגברה ליניארית ואנליזה נומרית, והיא נפוצה גם בין המדענים העוסקים בעיבוד תמונה, רשתות נוירונים מלאכותיות, סימולציות של תהליכים פיזיקליים, חישובים נומריים ותחומים נוספים. סטודנטים רבים להנדסה ומדע נחשפים לתוכנה זו במהלך לימודיהם.
יכולות.
מתמטיקה וחישוביות.
MATLAB מכילה בהתקנה הבסיסית כמה מאות פונקציות המכסות חלקים גדולים של המתמטיקה החישובית. בין השאר, התוכנה יודעת לטפל ב:
סביבת פיתוח.
MATLAB מכילה מספר יכולות עבור פיתוח אלגוריתמים, כולל יכולות של פיתוח מונחה עצמים. כמו כן התוכנה כוללת סביבת פיתוח משולבת המכילה כלי ניפוי שגיאות וחקר ביצועים. בנוסף התוכנה יכולה לתקשר עם אמצעים אלקטרוניים ממוחשבים.
הצגת נתונים.
התוכנה מגיעה עם יכולות גרפיות, הכוללות תצוגה בשלושה ממדים (ראו גרפיקה בהמשך), ניתוח נתונים ויזואלי ויצירת קליפים.
סביבת הפיתוח המשולבת מאפשרת יצירה של ממשקי משתמש עם פקדים שונים (לדוגמה כפתורים, שדות נתונים להזנה). באמצעות שימוש במהדר, ניתן ליצור באמצעות ממשקים אלו תוכנה נפרדת היכולה לרוץ, ודורשת רק את ספריית זמן הריצה של MATLAB.
ממשקים.
התוכנה כוללת מספר ממשקי תכנות יישומים עבור גישה לספריות הנכתבות בשפות תכנות אחרות (באמצעות קובצי MEX או DLL) ללקוחות COM וממשקי Web, כמו גם אביזרים היקפיים המתקשרים ישירות עם התוכנה באמצעות הממשק הטורי.
חבילות כלים.
ב-MATLAB ניתן ליצור חבילה מיוחדת המרחיבה את הפונקציונליות של התוכנה. קבוצות של כלים כאלו נכתבו ב-MATLAB על מנת לפתור סוגים מסוימים של בעיות, כאשר חברת MathWorks מספקת מספר חבילות כאלו כמו: עיבוד אותות, עיבוד תמונות, רשתות נוירונים, בקרה, אופטימיזציות, לימוד מכונה ועוד. אלפי חבילות נוספות פותחו על ידי חברות אחרות.
תחביר.
התוכנה בנויה סביב שפת MATLAB, המכונה לפעמים גם קוד M. הדרך הפשוטה ביותר להשתמש בשפה היא להקישה ליד הסמן » בחלון הפקודה, שהוא חלק מסביבת העבודה של התוכנה, ולהשתמש בתוכנה כמעטפת מתמטית. רצף של פקודות ניתן לרישום בקובץ טקסט, לרוב על ידי העורך הפנימי, כסקריפט או כפונקציה. ניתן גם להשיג הרחבות לשפה ואף להשתמש בה כשפה מונחה עצמים.
משתנים.
משתנים מוגדרים עם אופרטור ההשמה (=). השפה היא בעלת טיפוסים חלשים, כך שאין צורך בהגדרה של הטיפוסים והם אף יכולים להשתנות. ערכים יכולים להיות מחושבים באמצעות קבועים, ערכי משתנים אחרים ומתוצאות של פונקציות. ב-MATLAB יש מספר קבועים, בהם pi שמייצג את פאי ו-i שמייצג מספר היחידה המדומה formula_1. למשל:
» x = 17
» x = 'hat'
» x = [3*4, pi/2]
12.0000 1.5708
» y = 3*sin(x)
-1.6097 3.0000
» r = 2 * pi
6.2832
A = [3+2i 7-8i]
» A =
3.0000 + 2.0000i 7.0000 - 8.0000i
» tol = 3 * eps
6.6613e-016
» intmax('uint64')
18446744073709551615
וקטורים/מטריצות.
פירוש שמה של MATLAB הוא כאמור "מעבדת מטריצות", וככזאת היא מספקת הרבה דרכים ליצירת מטריצה בעלת ממדים שונים. ב־MATLAB פירוש המונח וקטור הוא מערך חד ממדי (1xN או Nx1) המקוצר לרוב למערך כשמתייחסים לשפות תכנות אחרות. כאשר מתייחסים למטריצה הכוונה היא לרוב למערכים רב ממדיים, כדוגמת, NxM, NxMxL, וכדומה. כאשר N ,M ו־L גדולים מ־1. בשפות אחרות, מתייחסים למטריצה כזאת כמערך של מערכים, כמערך של מערכים של מערכים, או פשוט כמערך רב ממדי.
MATLAB מספקת דרך פשוטה להגדרת מערכים באמצעות שימוש בתחביר הבא: סיום:מרווח:התחלה. לדוגמה:
» array = 1:2:9
array =
1 3 5 7 9
מגדיר משתנה array (או קובע ערך חדש למשתנה array הקיים) שהוא מערך עם הערכים 1, 3, 5, 7, ו־9. המערך מתחיל ב־1, ערך ההתחלה, כל אחד מהערכים נמצא בהפרש קבוע מהקודם של 2 (ערך המרווח), והערכים במערך מגיעים אך לא עוברים את 9 (9 שהוא ערך הסיום). דוגמה אחרת היא:
» array = 1:3:9
array =
1 4 7
אם ערך המרווח (יחד עם סימן נקודתיים אחד) מושמט מהתחביר אזי ברירת המחדל היא 1, למשל:
» ari = 1:5
1 2 3 4 5
מכניס למשתנה ari מערך עם הערכים 1, 2, 3, 4, ו־5, תוך שימוש במרווח 1 שהוא ברירת המחדל.
האינדקסים של המערכים מתחילים ב־1, דבר המקובל יותר במתמטיקה מאשר בתכנות בו יותר מקובל להתחיל ב־0 (הגם שיש שפות תכנות לא מעטות המתחילות גם הן את האינדקסים ב־1).
מטריצה יכולה להיות מוגדרת על ידי הפרדת הערכים בתוך השורות עם רווח לבן או פסיק ושימוש בנקודה פסיק בסיום כל שורה. רשימת רכיבי המטריצה צריכה להיות מוקפת בסוגריים מרובעים []. רכיבים ותת מערכים ניתנים לגישה באמצעות סוגריים עגולים - (), למשל:
» A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
» A(2,3)
» A(2:4,3:4)
» Commas = [ 1, 0 ; 3, 9]
Commas =
ריבוע מטריצת היחידה בגודל n יכול להיווצר באמצעות שימוש בפונקציה eye, ומטריצה בכל גודל של אפסים או אחדים יכול להיווצר עם הפונקציות zeros ו־ones, בהתאמה. לדוגמה:
» eye(3)
1 0 0
0 1 0
0 0 1
» zeros(2,3)
0 0 0
0 0 0
» ones(2,3)
1 1 1
1 1 1
שחלוף מטריצה נעשה על ידי הוספת נקודה-גרש או על ידי הפונקציה transpose. הצמדה הרמיטית (שחלוף + צמוד מרוכב) נעשה על ידי הוספת גרש או על ידי הפונקציה ctranspose. במקרה שהמטריצה ממשית אין הבדל בין הפעולות ואפשר להשתמש הן ב-formula_2 והן ב-formula_3 לשחלוף.
% complex matrix
» Z = [1,i; 3 2i]
1.0 + 0.0i 0.0 + 1.0i
3.0 + 0.0i 0.0 + 2.0i
» Z.'
1.0 + 0.0i 3.0 + 0.0i
0.0 + 1.0i 0.0 + 2.0i
1.0 + 0.0i 3.0 + 0.0i
0.0 - 1.0i 0.0 - 2.0i
% real vectors and real matrix
» A = [1 ; 2], B = A', C = transpose(A)
» D = [0 3 ; 1 5], D'
רוב פונקציות MATLAB יכולות לקבל מטריצה ולהפעיל את עצמן על כל רכיב. למשל, mod(2*J,n) תכפיל כל ערך ב־J ב־2, ואז תבצע מודולו n עליו. MATLAB כוללת אמנם לולאות for ו־while, אבל שימוש ביכולת הווקטוריזציה של MATLAB יוצרת בדרך כלל קוד שהוא קריא יותר ומהיר יותר. למשל הקטע הבא לקוח מהקובץ magic.m המכיל פונקציה magic היוצרת ריבוע קסם עבור ערכים אי זוגיים של n:
[J,I] = meshgrid(1:n);
A = mod(I+J-(n+3)/2,n);
B = mod(I+2*J-2,n);
M = n*A + B + 1;
ל-MATLAB יש פקודה מקוצרת לפתרון מערכת משוואות ליניאריות המוצגות בצורה וקטורית: formula_4 הוא קיצור ל-formula_5. לדוגמה:
» A = [1 1; -1 1], B = [6 2]'
» A\B
כפל.
הכפל הסטנדרטי ב-MATLAB, האופרטור formula_6, הוא כברירת מחדל כפל מטריצות. אם רוצים לכפול איבר-איבר יש להשתמש באופרטור
formula_7. ראו דוגמאות להלן:
» A = [1 2; 3 6], B = [0 3 ; 2 1]
» P1 = A*B, P2=A.*B
12 15
» V = [1 3], V*V', V.*V
אופרטורים לוגיים.
הקוד שלהלן מציג את אופרטורי ההשוואה העיקריים: שווה (==), לא שווה (=~), קטן שווה (=&gt;) וגדול שווה (=&lt;). הקוד מחזיר 1 לוגי אם התנאי הלוגי נכון ו-0 לוגי אחרת.
% equal, not equal, less or equal, greater than or equal
» Rel = [ 1==1, 1~=1, 1 &lt;= 2, 3 &gt;= 2 ]
1 0 1 1
באמצעות אופרטורים בינאריים אפשר ליצור ביטויים לוגיים מורכבים. הסימון ~ מייצג NOT, הסימון &amp; מייצג AND, הסימון | מייצג OR. ראו דוגמה להלן:
% Logical not, and, or, xor
» BinOps = [ ~(1==0) , (1==1) &amp; (2==2), (0==1) | (0==0) , xor(1&gt;2,2&gt;1) ]
BinOps =
1 1 1 1
ניתן להשתמש באופרטורים &amp;&amp; (וגם) ו- || (או), שיעילים יותר חישובית מ-&amp; ו-|.
% Logical not, and, or, xor
» BinOps = [ ~(1==0) , (1==1) &amp;&amp; (2==2), (0==1) || (0==0) , xor(1&gt;2,2&gt;1) ]
BinOps =
1 1 1 1
נקודה פסיק.
בשפות תכנות רבות אחרות, סימן הנקודה פסיק נדרש על מנת לסיים משפטים. ב־MATLAB סימן זה איננו חובה. אם משפט איננו מסתיים עם סימן זה, אז תוצאתו תוצג. אם משפט זה לא מחזיר במפורש תוצאה, למשל 'clc', אזי לסימן אין השפעה.
גרפיקה.