תכנות נומרי עם Matlab ו-Octave/גרפים



שימו לב:

אם אתה משתמש בOctave על מערכת לינוקס, ייתכן שתצטרך להתקין את gnuplot כדי להשתמש בקוד שבפרק זה. תוכל לעשות זאת על ידי מנהל ההתקנות של הפצת הלינוקס שלך.

גרפים דו-ממדיים

עריכה

הדפסת גרפים נעשית באמצעות וקטורים המכילים מספר רב של איברים. ככל שיש יותר איברים בוקטור הפלט יהיה יותר מדויק אבל מצד שני יקח לתוכנה יותר זמן לחשב.

לדוגמה ניצור וקטור בין 1 ל 20 :

x=1:20;

ולעומת זאת וקטור באותו תחום אבל עם יותר (פי 10 )איברים:

x=1:0.1:20

וכך הלאה..

בד"כ משתמשים בוקטור הראשון (x) לטווח של הפונקציה ואילו הוקטור השני (y) יהיה הפונקציה על הוקטור הראשון. חשוב שאורך הוקטורים יהיה זהה, אחרת נקבל שגיאה.

תזכורת: לביצוע חישובים על וקטורים יש להשתמש בנקודה (.) לפני הפעולה . לדוגמא כפל : *. אחרת נקבל שגיאה .

ניתן גם להדפיס מספרים, וקטורים ומטריצות.

plot היא פונקציה המקבלת קורדינאטות ב x ו y ומחזירה גרף. הגרף יפתח בחלון נפרד. דוגמא 1 :

 
דוגמא 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:

 
דוגמא 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) ואת המקום של הגרף מימין לשמאל ומלמעלה למטה.

Plots a function using θ and r(θ) דוגמא 3:

 
דוגמא 3
t = 0:.01:2*pi;
polar(t,sin(2*t).^2)







 

שימו לב:

כפי שראיתם, השתמשנו בגרפים בוקטורים בעלי רווחים ממש קטנים, זה נועד כדי שהגרף יהיה יותר "חלק". ככל שנקטין את הרווחים (ונגדיל את האיברים בוקטור) נקבל גרף יותר עגול, אבל מצד שני זה מגביר את כמות החישובים והעומס על המערכת.
 
הסומבררו של אוקטב

גרפים תלת-מימדיים

עריכה

גרפים אלו מורכבים מ3 צירים : x,y ו z

גרפים תלת מימדיים ניתן לסובב עם העכבר ולשנות את כיוון המבט.

הפקודה plot3 הפקודה מקבלת 3 משתנים (וקטורים שצריכים להיות זהים במימדיהם ) ויוצרת גרף קווי במרחב תלת- מימדי.

דוגמה:

l=[-98.0556  ; 1187.074];       
f=[ -33.5448 ; -240.402];       
d=[ 1298     ; 1305.5]           
plot3(l,f,d); grid on;




הפונקציה יוצרת גרף תלת מימדי. מקבלת וקטורים x,y ומטריצה z. כאשר x הוא באורך השורות במטריצה, y הוא באורך העמודות והמטריצה z חייבת להיות במימדים התואמים לוקטורים. דוגמא 4:

 
דוגמא 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

הפונקציה מדפיסה גרף דו מימדי של קווי גובה בגרף תלת מימדי. כלומר מקבלת 3 מימדים. דוגמא 5:

 
דוגמא 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' תא


הפרק הקודם:
מטריצה דלילה
גרפים הפרק הבא:
נספחים