You are on page 1of 7

Функције за исцртавање у равни у Octave-у

Увод

У овом поглављу бавимо се визуелизацијом уз  помоћ програмског пакета Octave. Најпре


ћемо се бавити дводимензионом визуелизацијом, односно исцртавањем кривих у равни.
Прво ћемо се бавити једноставним исцртавањем графика функција једне променљиве, а
након тога ћемо прећи на исцртавање произвољних равних кривих. 

Основе исцртавања у равни

За дводимензионо исцртавање (исцртавање у равни) у Octave-у се користи


функција plot(). Основни облик ове функије је:

plot(X,Y)
где су X и Y вектори истих дужина. Вектор X представља x-координате неког низа тачака у
равни, а Y представља y-координате тог низа тачака. Функција plot() ради тако што тачке
редом повеже дужима и исцрта тако добијену изломљену линију. Уколико је број тачака
које су задате довољно велики, тада ће линија изгледати глатко. 

На пример, ако желимо да нацртамо функцију sin(x) на интервалу [0,2π], тада можемо


урадити нешто овако:

X = linspace(0,2*pi, 100);
Y = sin(X);
plot(X,Y) 
Позив функције plot() отвара прозор у коме се приказује координатни систем у равни и
исцртавају се тачке задате векторима X и Y. У оквиру овог прозора могуће је увећавати
или смањивати приказ, укључивати и искључивати мрежу у координатном систему, па чак
и ротирати цртеж (што ће нам бити занимљивије код тродимензионог цртања).

Други облик функције plot() је:

plot(X, Y, '<parametri>')
при чему се ниска '<parametri>' састоји из спецификатора који одређују тип, боју и облик
линије која се исртава, као и евентуалну ознаку која се графику придружује. На пример:
  

plot(X,Y,'--r')
значи да желимо да исцртамо испрекидану линију црвене боје. Дозвољени типови линија
су пуна линија ('-'), испрекидана ('--'), тачкаста (':'), црта-тачка-црта ('-.').  Неке од
дозвољених боја су црвена ('r'), плава ('b'), зелена ('g'), црна ('k'), жута ('y') и сл. Такође се
може задати и тип маркера којим ће бити обележене саме тачке које одређују  исртани
график. Нпр. 'o' значи да се тачке обележавају кружићима, '+' значи да се тачке
обележавају крстићима, и сл. Најзад, ознаку је могуће додати са ';oznaka;'. На пример:
  

plot(X,Y,'--+r;sin(x);');
исртава график испрекиданом линијом црвене боје, све тачке из (X,Y) обележава
крстићима, а уз график стоји ознака 'sin(x)'.

Додатне опције се могу задавати и појединачно, као посебни аргументи функције. На


пример:

plot(X,Y,'r--', 'linewidth', 2);


Додатна два аргумента су име опције ('linewidth') и њена вредност (2). Овом опцијом се
подешава дебљина линије. Слично:

plot(X,Y,"color", [0.8, 0.2, 0.3]);


се опција "color" поставља на конкретну RGB вредност (80% црвене, 20% зелене и 30%
плаве).

Исртавање више графика на истој оси

Уколико желимо да исртамо више графика на истој оси, то можемо урадити на неки од
следећих начина:

1. функцији plot() задајемо више парова вектора (X,Y) за сваки од графика, евентуално уз


посебне параметре који одређују боју и тип линије за сваки од графика:

          plot(X1, Y1, X2, Y2, X3, Y3) % ili


     plot(X1, Y1, '<params1>', X2, Y2, '<params2>', X3, Y3, '<params3>');
           На пример:

          X1 = linspace(0, 2*pi, 100);


X2 = linspace(-pi, pi, 100);
Y1 = sin(X1);
Y2 = cos(X2);
plot(X1, Y1, 'b;sin(X);', X2, Y2, 'r;cos(X);'); 

Добра страна овог приступа је што тачке у којима рачунамо сваку од функција не морају
бити исте. У овом примеру смо функцију sin(x) цртали на интервалу [0,2π], док смо   
функцију cos(x) цртали на интервалу [−π,π].

2. Задајемо јединствен вектор x-координата, као и матрицу чије су врсте


вектори y-координата:

    plot(X, Y)
при чему је Y матрица која се састоји из врста које су исте дужине као и вектор X. Свака од
ових врста се тумачи као вектор вредности различитих функција у тачкама вектора X. На
пример:

   X = linspace(0, 2*pi, 100);


   plot(X, [sin(X); cos(X)]);    
исртава два графика на истој оси: први представља синус, а други косинус у тачкама
вектора X (који садржи равномерно распоређене тачке интервала [0,2π]).

  
3. Трећи начин је да графике цртамо један по један, посебним позивима plot() функције.
Међутим, уобичајено понашање функције plot() је да се приликом поновног позива
тренутни садржај цртежа брише и исцтава се нови. Другим речима, прва функција би се
обрисала, а друга би се након тога нацртала. Да бисмо то променили, користимо
команду hold on: 

plot(X,Y)
hold on
plot(X,Z)
Команда hold on укључује hold опцију (командом hold off се ова опција искључује). Када
је hold опција укључена, тада се следећим plot() позивом само доцртава нови график на
истој слици, без брисања претходног графика.

Подешавање оса и графика

Функција axis() се користи за подешавање оса. На пример:

axis([1 5 2 8])
  
поставља график тако да се приказује сегмент [1,5] на x-оси, а [2,8] на y-оси. Са друге
стране, позив: 

axis("equal")

или краће:

axis equal
подешава осе тако да дужина јединичног интервала на x-оси буде једнака дужини
јединичног интервала на y-оси. Функција axis() се позива након што се plot() функцијом
претходно прикаже график.  

Команда:
grid on
укључује мрежу у координатном систему, што повећава прегледност и олакшава
оријентацију. Мрежа се може искључити командом:

grid off

Функцијом subplot() се омогућава подела слике на више оса, тако да се различити


графици цртају на различитим осама. Њен формат је:
  

 S = subplot(v, k, r);
  
при чему је v број врста, а k број колона на које желимо да поделимо слику. r је редни број
графика у таквој подели (графици се броје редом по врстама). Функција враћа реалан број
који представља идентификатор одговарајућег графика. Наредни позиви plot() функције се
односе управо на одабрани график. На пример:
  

subplot(2,2,1) % inicijalizujemo prvi (gornji levi) grafik na slici koja ima dve vrste i
dve kolone
plot(X,Y) % iscrtavamo funkciju na tom grafiku
axis equal  % podesavamo ose tog grafika
subolot(2,2,2)  % inicijalizujemo drugi (gornji desni) grafik na istoj slici
plot(X, Z);   % iscrtavamo drugu funkciju na tom grafiku
axis([1 5 2 6])  % podesavamo ose tog grafika
% ... itd
Други начин је да се најпре иницијализују сви графици:

S1 = subplot(2,2,1);
S2 = subplot(2,2,2);
S3 = subplot(2,2,3);
S4 = subplot(2,2,4);
а да се затим експлицитно бира на који се подграфик односи која команда:
  

plot(S1, X1, Y1)  % na gornjem levom grafiku iscrtavamo funkciju (X1,Y1)


axis(S1, "equal") % podesavamo ose tog grafika
plot(S4, X4, Y4) % na donjem desnom grafiku iscrtavamo funkciju (X4,Y4)
axis(S4, [1, 5, 2, 6], "equal");  % podesavamo ose tog grafika
hold(S4, "on");  % ukljucujemo hold opciju za donji desni grafik
plot(S4, X, Y)    % preko funkcije (X4,Y4) iscrtava se funkcije (X,Y) na donjem desnom
grafiku
Додатне функције за исцртавање у равни

1. Функција pie() исцртава график удела вредности вектора у укупној суми вектора (познат


и као "торта"). Аргумент ове функције је вектор вредности. За сваку вредност у вектору
исртава се једно "парче" торте чија је величина пропорционална уделу те вредности у
укупној суми свих вредности у вектору. Уколико желимо да свако од "парчета" означимо
неком ознаком, то можемо урадити на следећи начин:

pie([2,5,7], {'prva', 'druga', 'treca'});  

2. Функција bar() исцртава стубичасти дијаграм који описује вредности дате у вектору који


је аргумент функције. На пример:

   bar([1,2,3,4])
ће исцртати стубичасти дијаграм чији су стубци пропорционални бројевима који су
наведени у вектору.  Поред вектора, аргумент може бити и матрица. У том случају свака од
колона матрице се тумачи као посебан вектор вредности које се исцртавају. Вредности
које припадају истој врсти се групишу и цртају једна до друге, осим у случају да се зада
одговарајућа опција којом се подешава стил. На пример:

bar([1,2,3,4; 2, 2, 2, 2], "stacked")


ће вредности које се групишу (вредности из исте врсте матрице) приказати једну на другој,
а не једну поред друге. За додатне опције консултовати документацију.

Примери

Пример 1: Нацртати график функције y=2x2+3x−1на интервалу [−3,2].

   x = linspace(-3, 2, 100);
   y = 2*x.^2+3*x - 1;
 plot(x, y);
Напомена: обратити пажњу на "тачка" операције у горњој команди. Како је x вектор, за
израчунавање вектора y неопходно је операције вршити покоординатно, тј.
елемент-по-елемент.

График се подразумевано боји плавом бојом. Ако смо желели да се график исцрта
црвеном бојом, задали бисмо команду: 

   plot(x, y, "r");
Подразумевани тип линије је пуна (неиспрекидана) линија. Ако смо желели да график буде
исцртан испрекиданом линијом, задали бисмо команду:
 plot(x, y, "--");

Ако бисмо желели да у истом координатном систему нацртамо и график функције y=2x+1,


тада бисмо могли да  урадимо следеће:

x = linspace(-3, 2, 100);
  y = 2*x.^2+3*x - 1;
  z = 2*x + 1;
  plot(x, [y; z]);
или:

  x = linspace(-3, 2, 100);
  y = 2*x.^2+3*x - 1;
z = 2*x + 1;
 plot(x, y, "b");
  hold on
  plot(x, z, "r--");

Пример 2: На истој слици нацртати четири графика (на засебним осама распоређених у
матрицу 2 пута 2):

● sin(x)sin(x) на [0,2π]
● cos(x)cos(x) на [−π,π]
● tg(x)tg(x) на (−π/2π/2)
● ctg(x)ctg(x) на (0,π)

Решење:
 

   x = linspace(0, 2*pi, 100);


   subplot(2, 2, 1);
   plot(x, sin(x), ";sin(x);");
   axis equal;
   grid on;
   x = linspace(-pi, pi, 100);
   subplot(2,2,2);
   plot(x, cos(x), ";cos(x);");
   axis equal;
   grid on;
   x = linspace(-pi/2 + 0.2, pi/2 -0.2, 100);
   subplot(2,2,3);
   plot(x, tan(x), ";tg(x);");
   axis([-pi/2, pi/2, -10, 10], "equal");
   grid on;
   x = linspace(0.2, pi - 0.2, 100);
   subplot(2,2,4);
   plot(x, cot(x), ";ctg(x);");
   axis([0, pi, -10, 10], "equal");
   grid on;
Напомена: приликом исцртавања тангенса и контангенса морали смо мало да "сузимо"
интервале, с обзиром да у крајевима задатих интервала ове функције имају вертикалне
асимптоте, па бисмо добили веома велике вредности и цртеж не би био прегледан.

Пример 3:   Нацртати на истој оси графике логаритамских функција за основе 2, 3, 5, и 10.


Исцртавање извршити у интервалу x∈[0.2,10].

Решење:   

x = linspace(0.2, 10, 100);  


plot(x, log2(x), ";log2(x);", x, log(x)/log(3), ";log3(x);", x, log(x)/log(5),
";log5(x);", x, log10(x), ";log10(x);");
axis equal
grid on

You might also like