A "nargin" beépített függvény és különbőző ábrázolási módok

Contents

A "nargin" függvény

Mostanra már tapasztalhattuk, hogy a beépített függvények zömét, sokféleképp meg lehet hívni. A nargin függvény megadja hány paraméterrel hívták meg a függvényünket és így a paraméterek számától fühggően másképp működhet függvényünk.

Első közös feladat

Írjunk egy "bemenet" nevű függvényt amit 1, 2, vagy 3 (a,b,c) számmal hívhatunk meg. Ha egy bemenete (a) van akkor a kimenete legyen a^2, ha két bemenete (a,b) van akkor a kimenet legyen a+b, ha három bemenete van (a,b,c) akkor a kimenet legyen a+b*c.

type('bemenet.m')
function kimenet=bemenet(a,b,c)
    if nargin==1
        kimenet=a^2;
    elseif nargin==2
        kimenet=a+b;
    elseif nargin>2
        kimenet=a+b*c;
    end
end

Első Házi feladat

Írjunk "specAtlag" nevű függvényr, aminek bemenete lehet (v,a,b). Ha egy paramáterrel (v) hívjék meg akkor a kimenet legyen v átlaga, ha két paraméterrel (v,a) akkor legyen a kimenet az "a"-nál nagyobb elemek átlaga, ha három paraméterrel hívják meg akkor a kimenet legyen az "a"-nál nagyobb "b"-nél kisebb elemek átlaga.


function ki=specAtlag(v,a,b)
    if nargin==1
        ki=mean(v);
    elseif nargin==2
        ki=mean(v(v>a));
    else
        ki=mean(v(v>a&v<b));
    end
end

Boxplot

Múlt héten láthattuk a hogyan kell histogrammmot készíteni. Hasonló adatok ábrázolására jó a "boxplot" parancs. a boxplot a megadott értékeket sorbarendezi a középső értéket (mediánt) pirossal rajzolja ki- Kékkel kirajzol egy olyan intervallumot aminek az alja azt jelöli, hogy annál az elemeknek csak a negyede van lejebb és a teteje az intervallumnak azt jelenti, hogy annál csak az elemek egynegyede van feljebb. A fekete "karokat" a kék intervallum másfélszeresénél húzza meg, kivéve ha a minimum/maximum annál nagyobb/kisebb, mert akkor ott.

v=rand(1,100);
boxplot(v);

Ha mátrix a bemenet akkor oszloponként csinál boxplot-ot

M=rand(100,5);
boxplot(M);

A plot parancs

A plot parancsot -ha egy bemenettel hívjuk- akkor e numerikus vektor megjelenítésére lehet használni pl

plot(v)

Vagy ha létrehozunk egy 100 elemú vektort aminek elemei -10 és 10 között vannak egyenletesen

t=linspace(-10,10,100);

akkor ezekre az elemekre alkalmazva egy függvényt a függvényértékeket is megjeleníthetjük.

plot(sin(t))

Látjuk hogy az első elem a szinusz függvény a -10 helyen

sin(-10)
ans =

    0.5440

A második a szinusz függvény a -9.798 helyen (ami a t vektor második eleme) stb. Egy kicsit zavaró, hogy az x tengelyen nem -10-től 10-ig mennek a számok. Ezen könnyen segíthetünk:

plot(t,sin(t))

A plot parancsot 2 vektorral meghívva az első vektort mindig az ábrázolandó pontok x koordinátájának tekinti, a második vektort az y koordinátáknak.

Parametrikus görbék megadása

Így viszont paramterikus görbéket is megadhatunk. (Ezt úgy kell elképzelnünk, hogy egy paramétert, például az időt, véltoztatjuk és minden időpillanatban megmondjuk hol van a ceruza hegyének x és y koordinátája.)

Egy körnek például ez a parametrikus megadása: x=cos(t) y=sin(t). Így kell kirajzoltatni:

plot(cos(t),sin(t))

Ez a kör egy kicsit nyomott a következő paranccsal rendes körré változtathatjuk, úgy hogy az y/x tengelyen azonossá tesszük a távolságokat:

plot(cos(t),sin(t))
axis('equal')

Harmadik paraméterként megadhatjuk hogy milyen módon rajzolja ki a görbénket a következő parancs:

plot(cos(t),sin(t),'r+')

példáult piros (red) plusszokat rak a pontok helyére és nem köti össze őket. A következő:

plot(cos(t),sin(t),'k-.')

pedig fekete (blacK) pont-vonallal köti össze őket. Az összes vonaltípusról a plot parancs helpjének LineSpec része ad részletes útmutatást. A tengelyeknek is adhatunk nevet, és az ábrának is:

plot(cos(t),sin(t),'bo-')
xlabel("x koordinata")
axis('equal')
ylabel("ez a magassag")
title("Ez egy kör")

A hold on paranccsal további görbéket rajzolhatunk ugyanabba az ábrába

hold on
t=linspace(0,2*pi,100);
plot(t.*cos(t)/2,t.*sin(t)/2)
hold off

A text paranccsal feliratikat helyezhetünk el az ábrán.

t=linspace(0,10*pi,1000);
plot(t.*cos(t),t.*sin(t))
axis('equal')
hold on
plot(cos(t),sin(t))
plot(0,0,'b+')
text(0,0,"Ez a kozepe")
hold off

Második házi feladat

Készítsünk ábrát a cikloisról. A ciklois azt mutatja, hogy egy r sugarú keréknek az a pontja ami nullában pont a talajt érinti milyen pályán mozog. A képlete x=r(t-sin(t)) y=r(1-cos(t)). A g0rbe legyen k;k folytonos vonallal megrajzolva. Az x tengelyen legyen az a felirat hogy "Idő", az y tengelyen legyen az a felirat, hogy "Pálya", az Origóba legyen odaírva, hogy "A pálya kezdőpontja". Az elkészült ábrákat mentsltek el és küldéjtek a házi feladatoknak fentartott e-mail címre.

Epiciklois gyakorló feladat

A ciklois egyik általánosítása az epiciklois ahol egy kör egy másikon gurul. Képlete x=r*(k+1)*(cos(t)-cos((k+1)*t)/(k+1)) y=r*(k+1)*(sin(t)-sin((k+1)*t)/(k+1)) ahol k a két kör aránya.

t=linspace(-100,100,3000);
r=3;
k=37/21;
plot(r*(k+1)*(cos(t)-cos((k+1)*t)/(k+1)),r*(k+1)*(sin(t)-sin((k+1)*t)/(k+1)),'m-')
axis('equal')

A hipociklois-nál az egyik kör a másik körnek a belsején gurul képlete x=r*(k+1)*(cos(t)-cos((k+1)*t)/(k+1)) y=r*(k+1)*(sin(t)+sin((k+1)*t)/(k+1))

hold on
r=2;
k=7/3;
plot(r*(k+1)*(cos(t)-cos((k+1)*t)/(k+1)),r*(k+1)*(sin(t)+sin((k+1)*t)/(k+1)),'b-')
hold off
snapnow