תכנות נומרי עם Matlab ו-Octave/גרפים
שימו לב: אם אתה משתמש בOctave על מערכת לינוקס, ייתכן שתצטרך להתקין את gnuplot כדי להשתמש בקוד שבפרק זה. תוכל לעשות זאת על ידי מנהל ההתקנות של הפצת הלינוקס שלך. |
גרפים דו-ממדיים
עריכההדפסת גרפים נעשית באמצעות וקטורים המכילים מספר רב של איברים. ככל שיש יותר איברים בוקטור הפלט יהיה יותר מדויק אבל מצד שני יקח לתוכנה יותר זמן לחשב.
לדוגמה ניצור וקטור בין 1 ל 20 :
x=1:20;
ולעומת זאת וקטור באותו תחום אבל עם יותר (פי 10 )איברים:
x=1:0.1:20
וכך הלאה..
בד"כ משתמשים בוקטור הראשון (x) לטווח של הפונקציה ואילו הוקטור השני (y) יהיה הפונקציה על הוקטור הראשון. חשוב שאורך הוקטורים יהיה זהה, אחרת נקבל שגיאה.
תזכורת: לביצוע חישובים על וקטורים יש להשתמש בנקודה (.) לפני הפעולה . לדוגמא כפל : *. אחרת נקבל שגיאה .
ניתן גם להדפיס מספרים, וקטורים ומטריצות.
Plot
עריכהplot היא פונקציה המקבלת קורדינאטות ב x ו y ומחזירה גרף. הגרף יפתח בחלון נפרד. דוגמא 1 :
x=0:0.1:2; % creates a line vector from 0 to 2
fx=(x+2)./x.^2; % creates fx
plot(x,fx,'-ok'); % plots 2d graphics of the function fx
כדאי לדעת: ניתן לשנות את הגרף וצבעו. בדוגמה הוגדר שהגרף יהיה של נקודה וקו ובצבע שחור. ראו עוד בהמשך |
שימו לב: חייבת להיות התאמת מימדים בין X ל Y , אחרת נקבל שגיאה. Y צריך תמיד להיות פעולה כלשהי על X |
הגדרת צורה וצבע הגרף
עריכהניתן לשנות את צורת הגרף וצבעו.
צבע הגרף | קיצור |
---|---|
שחור | 'k' |
ירוק | 'g' |
כחול | 'b' |
לבן | 'w' |
אדום | 'r' |
ציאן | 'c' |
מג'נטה | 'm' |
צורת הגרף |
---|
'.' 'x' 'o' '+' '*' '-' '^' |
פרמטרים נוספים
עריכההפונקציה plot, ולמעשה כל הפונקציות שיוצרות גרפים יכולות להשתמש בפרמטרים נוספים, פרמטרים אלו יכתבו אחר הפונקציה:
- xlable,ylable,zlable - פרמטרים היוצרים שמות לצירים
- title - כותרת
- grid on - הפעלת קווי grid או רשת
- legent - מקרא. מקבל פרמטרים רבים (כותרת , מקום וכו')
- text -טקסט בכל מקום בגרף. הגדרה של המיקום בעזרת x ו y
מספר גרפים באותו תרשים
עריכהבכדי להדפיס 2 או יותר גרפים באותו תרשים, פשוט מוסיפים x,y נוספים לאחר הראשונים. הגרפים אוטומטית יקבלו צבעים שונים. דוגמא 2:
x1 = [1,2,3,4];
y1 = [1,2,3,4];
y2 = [4,3,2,1];
plot(x1,y1,x1,y2);
ylabel('y-axis');
xlabel('x-axis');
title ('y1 and y2');
legend('y1 ' ,' y2 ',2);
text(2.5,2.5,'y1=y2');
grid on;
הפקודה תדפיס y1 ו y2 על אותם קווי x
שימו לב לשימוש הנרחב בפרמטרים הנוספים: הוספת כותרות , קווי רשת , והערות בתוך הגרף .
מספר גרפים נפרדים
עריכהניתן להדפיס מספר גרפים נפרדים בתרשים ע"י שימוש בפונקציה subplot.
ניצור וקטור x מ1 עד 20 בדילוג של 0.1 ונדפיס 4 גרפים נפרדים ( כאשר 2 בשורה הראשונה ו2 בשורה השניה) של sin, cos, tan ו cot של x: דוגמה:
octave:8> x=1:0.1:20;
octave:9> subplot(2,2,1);
octave:10> plot(x,sin(x));
octave:11> subplot(2,2,2);
octave:12> plot(x,cos(x));
octave:13> subplot(2,2,3);
octave:14> plot(x,tan(x));
octave:15> subplot(2,2,4);
octave:16> plot(x,cot(x));
הפקודה מקבלת את מימדי הפלט (2*2) ואת המקום של הגרף מימין לשמאל ומלמעלה למטה.
Polar
עריכהPlots a function using θ and r(θ) דוגמא 3:
t = 0:.01:2*pi;
polar(t,sin(2*t).^2)
שימו לב: כפי שראיתם, השתמשנו בגרפים בוקטורים בעלי רווחים ממש קטנים, זה נועד כדי שהגרף יהיה יותר "חלק". ככל שנקטין את הרווחים (ונגדיל את האיברים בוקטור) נקבל גרף יותר עגול, אבל מצד שני זה מגביר את כמות החישובים והעומס על המערכת. |
גרפים תלת-מימדיים
עריכהגרפים אלו מורכבים מ3 צירים : x,y ו z
גרפים תלת מימדיים ניתן לסובב עם העכבר ולשנות את כיוון המבט.
plot3
עריכההפקודה plot3 הפקודה מקבלת 3 משתנים (וקטורים שצריכים להיות זהים במימדיהם ) ויוצרת גרף קווי במרחב תלת- מימדי.
דוגמה:
l=[-98.0556 ; 1187.074];
f=[ -33.5448 ; -240.402];
d=[ 1298 ; 1305.5]
plot3(l,f,d); grid on;
Mesh
עריכההפונקציה יוצרת גרף תלת מימדי. מקבלת וקטורים x,y ומטריצה z. כאשר x הוא באורך השורות במטריצה, y הוא באורך העמודות והמטריצה z חייבת להיות במימדים התואמים לוקטורים. דוגמא 4:
x=[0:pi/90:2*pi]';
y=x';
z=sin(x*y);
mesh(x,y,z);
שימו לב לשינוי בצבע. שינוי זה מציין את הגובה (בגרף זה השינויים ב-Z ) הצבעים המוכרים לכולנו ממפות גיאגרפיות.
הריצו את הקוד הבא:
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2)+eps;
Z = sin(R)./R;
mesh(X,Y,Z)
מה קיבלתם?
זהו גרף של הפונקציה sinc במרחב תלת מימדי.
meshgrid
עריכהmeshgrid היא פונקציה היוצרת רשת קווים. הפונקציה מקבלת 2 וקטורים ומחזירה 2 מטריצות , לאחר מכן ניתן להשתמש בהם בפונקציה mesh
octave:5> x=1:4;
octave:6> y=x;
octave:7> [a b]=meshgrid(x,y)
a =
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
b =
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
Contour
עריכההפונקציה מדפיסה גרף דו מימדי של קווי גובה בגרף תלת מימדי. כלומר מקבלת 3 מימדים. דוגמא 5:
x=[0:pi/90:2*pi]';
y=x';
z=sin(x*y);
contour(x,y,z);
פונקציות נוספות בmatlab
עריכה- Contourf-בדומה לפונקציה Contour אבל ממלאת צבע בין הקווים
- Surf
- meshc
- surfc
אינטרפולציה
עריכהלעתים יש צורך לצייר עקום "חלק" המקורב לכל הנקודות שנאספו. לצורך כך מבצעים אינטרפולציה. ישנן שיטות שונות לבצע אינטרפולציה: קו ישר, פולינום מסדר גבוה, משפחת פונקציות טריגונומטריות ועוד. בדוגמה הבאה ניצור וקטור לינארי עם תוספת של הפרעה אקראית ונבצע אינטרפולציה. את התוצאה נשרטט על אותו גרף יחד עם הנקודות המקוריות.
x=[0:10];
y=3.*x + rand(1,11);
plot(x,y,'*');
כעת נמשיך וניצור וקטור x חדש שבקוארדינטות שלו אנו מעוניינים לקבל קירוב של האינטרפולציה:
new_x=[-5:0.1:15];
new_y=interp1(x,y,new_x);
hold on;
plot(new_x,new_y,'g-');
לחילופין, אם אין מעוניינים בקירוב לינארי, אלא דוקא בפולינום מסדר גבוה, יש לכתוב:
new_y=interp1(x,y,new_x,'spline');
במקום המתאים בקוד הנ"ל. להלן כל האפשרויות:
סוג | משמעות |
---|---|
'nearest' | תא |
'linear' | תא |
'spline' | תא |
'pchip' | תא |
'cubic' | תא |
הפרק הקודם: מטריצה דלילה |
גרפים | הפרק הבא: נספחים |