MIRK 2000
PRAKTICNI DEL - ZGLEDI

Opozorilo: vse datoteke omenjene v zgledih lahko snamete kar v paketu  primeri.tgz.

Opis namisljenega poizkusa (enakomerno pospeseno gibanje):
Klado polozimo na vodoravno podlago in jo povezemo z lahko vrvico preko lahkega klescka s klado, ki prosto visi. Sistemu klade in utezi bomo kar rekli telo in njegovo maso oznacili z m.  Na tak sistem deluje ob zanemarljivih uporih  (lepenje, trenje, zracni upor) rezultanta sil, ki je kar enaka sili teze klade. Oznacili jo bomo kar s F in rekli, da je to konstantna rezultanta sil na nas sistem - telo. Iz teh dveh podatkov dolocimo pospesek a. Signale belezimo recimo s pomocjo fotocelice in rez na kolescku. Iz premera kolescka d lahko dolocimo obseg in s pomocjo stevila  rez r potem premik kolescka in s tem tudi telesa ds. Rabimo se stevilo meritev n.

Pravo meritev nadomestimo z enostavno simulacijo, ki nam poda datoteko 'meritev'. Kratek program  v C-ju (simulacija.c)  prevedemo s pomocjo prevajalnika gcc:

 
# gcc -lm -o simulacija simulacija.c
ali pa kar snamemo ze prevedeno kodo za LINUX  simulacija, katera nam nadomesti meritve namisljenega poizkusa.

Primer poizkusa:

 
# ./simulacija 

         simulacija - MIRK 2000 
    (c) 2000 Renato@s-gms.ms.edus.si 

Masa telesa m je [g]: 100
Rezultanta zunanjih sil na telo je [N]: 0.1
Telo ima pospesek  1.000 m/s^2.
Stevilo rez je: 100 
Premer kolescka je [mm]: 20
Premik kolescka med dvema zaporednima signaloma je  0.628 mm.
Stevilo meritev je: 200
Ime datoteke je: 1.dat

Simulacija v teku.
 

Simulirani podatki so zapisani v datoteko 1.dat.
#

Tako dobimo datoteko 1.dat.   Generirajmo se stiri poizkuse z enakimi podatki, spreminjajmo le rezultanto zunanjih sil in ime datoteke. V praksi to delamo tako, da premescamo del mase med utezjo in klado. Za drugi primer dajmo rezultanto sil 0.15 N in ime datoteke 2.dat,  za tretji primer 0.2 N in 3.dat, za cetrti 0.25 N in 4.dat ter peti 0.3 N in 5.dat. V vsaki datoteki je najprej 12 vrstic uvodnega besedila, nato 7 vrstic vhodnih podatkov, temu sledi prosta vrstica, nato meritve - vsaka meritev v eno vrstico, v nasem primeru 200 vrstic. Na koncu sta prosta vrstica in zakljucna vrstica z besedilom "Konec datoteke.".   Same meritve so simulirane kot da bi merili cas med posameznimi signali, katere zazna fotocelica s pomocjo rez: na zacetku sistem miruje, ko pride prvi signal, sta se obod kolescka in vrvica, ob upostevanju nepodrsavanja, premaknila za znano razdaljo (v nasem primeru ds=0.628 mm).  Tako i-temu signalu pripada pot s=i*ds. Imamo opravka z enokomerno pospesenim gibanjem z znanim pospeskom a brez zacetne hitrosti, zato izracunamo simulirani cas i-te meritve kot ti=sqrt(2*si/a).  Da bo simulacija realnejsa, je izracunanemu casu dodan sum (10%).  Izracunamo lahko tudi trenutno hitrost v=sqrt(2*a*s). Prava meritev bi nam posredovala le zaporedje casov obremnjenih z merilno napako. Vsakemu casu bi lahko dodali pripadajoco pot in hitrost.  Nasa simulacija zapise za vsako meritev (ena vrstica) naslednje podatke:
  1. zaporedna stevilka meritve (i)
  2. cas (t)
  3. pot (s)
  4. hitrost (v)
  5. pospesek (a)
Poudarimo  se enkrat, da bi bila edina merjena kolicina v realnem poizkusu cas, zato je v nasem primeru ta kolicina obremenjena s sumom. O tem, ce je simulirani sum ravno pravsnji za ta primer ne bomo zdaj razpravljali. Nizu evt. casov bi lahko dodali izracunane kolicine kot jih posreduje nasa simulacija. Naj bo dovolj fizike za zdaj.

Ko imamo niz datotek, potem jih lahko preglejujemo z more, less in cat.  Ce iscemo dolocen niz v datotekah, je zelo koristen grep. Recimo, da iscemo v vseh datotekah s koncnico .dat niz "Rezultanta":

 
# grep Rezultanta *.dat
1.dat:Rezultanta zunanjih sil na telo je  0.10000 N.
2.dat:Rezultanta zunanjih sil na telo je  0.15000 N.
3.dat:Rezultanta zunanjih sil na telo je  0.20000 N.
4.dat:Rezultanta zunanjih sil na telo je  0.25000 N.
5.dat:Rezultanta zunanjih sil na telo je  0.30000 N.
#
Na ta nacin lahko pridemo tudi seznama datotek, ki vsebujejo iskani niz. S pomocjo head in tail dobimo zacetek, oz. konec datoteke. Zelo koristna sta skriptni jezik awk in urejevalnik sed. Pokazimo za vsakega po en primer uporabe. Ce zelimo iz datoteke 1.dat izlusciti samo meritve, potem rabimo samo vrstice od 21 do 220. To dosezemo z:
 
# awk 'NR==21,NR==220'  1.dat
   1     0.0319     0.0006     0.0354     1.0000
   2     0.0451     0.0013     0.0501     1.0000
   3     0.0558     0.0019     0.0614     1.0000
  .  .   .   . 
Ce zelimo v datoteki 1.dat menjati niz "simulacija" s "Simulacija", potem to lahko storimo tako:
 
# sed -e "s/simulacija/Simulacija/g" 1.dat

         Simulacija - MIRK 2000 
    (c) 2000 Renato@s-gms.ms.edus.si 
 .  .  .  . 

V obeh primerih dobimo rezultat na standardni izhod (ekran) in ga lahko preusmerimo z > ali >> v datoteko.  Grafe bomo izdelali, zato bo koristno nase 'rezultate' meritev pripraviti v primerno obliko. Delo si lahko olajsamo s skripto pripravi.sh:
 
echo "(c) 2000  Renato@s-gms.ms.edus.si"
echo "Uporaba: ./pripravi.sh vzorec    Na primer: ./pripravi.sh *.dat"
echo "Ciljna datoteka: "
read fname 
rm -f $fname
touch $fname
for dname in $*
do
  echo "Datoteka $dname v obdelavi"
  awk 'NR==21,NR==220' $dname > $dname"x"
  awk 'NR==21,NR==220' $dname >> $fname
  echo " " >> $fname
done
echo  "Koncano :-)"
Najprej preberemo ime ciljne datoteke, potem pa za vse datoteke, ki ustrezajo podanemu vzorcu naredimo datoteko s podobnim imenom, le da je imenu dodana crka "x" s prepisom vrstic od 21 do 220. Hkrati naredimo podobno kopijo v ciljno datoteko in dodamo se prosto vrstico.  Primer z vzorcem ?.dat in ciljno datoteko meritve.dat:
 
 # ./pripravi.sh ?.dat
(c) 2000  Renato@s-gms.ms.edus.si
Uporaba: ./pripravi.sh vzorec    Na primer: ./pripravi.sh *.dat
Ciljna datoteka: 
meritve.dat
Datoteka 1.dat v obdelavi
Datoteka 2.dat v obdelavi
Datoteka 3.dat v obdelavi
Datoteka 4.dat v obdelavi
Datoteka 5.dat v obdelavi
Koncano :-)
#
Pripravili smo podatke za izdelavo grafov s pomocjo gnuplot. V datotekah s koncnico .datx so samo meritve, v datoteki meritve.dat pa je zaporedoma nanizanih vseh pet meritev s po eno prazno vrstico vmes. Z gnuplot lahko risemo interaktivno ali pa s pomocjo skript. Oglejmo si na kratko oba nacina. Najprej narisimo nekaj grafov interaktivno:
  1. odvisnost casa od zaporedne stevilke meritve za prvo meritev
  2. dorisimo na isti graf  podobno odvisnost za drugo meritev
  3. narisimo odvisnost poti od casa (stolpca 2,3), posamezne tocke povezi s crto
  4. narisimo odvisnost hitrosti od casa (stolpca 2,4)
  5. narisimo odvisnost hitrosti od poti (stolpca 3,4)
  6. narisimo 3D  graf: odvisnost hitrosti (z os - stolpec 4)  od casa (x os - stolpec 2) za razlicne pospeske (y os - stolpec 5)
 
#  gnuplot
        G N U P L O T
        Linux version 3.7
        patchlevel 1
        last modified Fri Oct 22 18:00:00 BST 1999
        .  .  .  .
gnuplot> plot "1.datx" 
gnuplot> replot "2.datx" 
gnuplot> plot "3.datx" using 2:3  with lines
gnuplot> plot "4.datx" using 2:4 
gnuplot> plot "5.datx" using 3:4 
gnuplot> set contour
gnuplot> splot "meritve.dat" u 2:5:4
Tako interaktivno delo je zelo dobrodoslo v razvojni fazi obdelave, ko pa enkrat ze imamo izdelano shemo za obdelavo, pa so bolj prirocne skripte. Skripta graf.gn nam z zagonom izdela graf odvisnost casa od zaporedne stevilke meritve za prvo meritev in nam rezultat shrani v graf.gif. Tako smo prisli do uporabnega grafa. Skico poizkusa lahko narisemo z orodjem xfig, ki uporablja vektorsko grafiko. V skica.fig  je moja zelo groba skica nasega poskusa. Orodje nam omogoca izvoz v razne formate, lahko pa se posluzimo  programa convert iz paketa ImageMagick in spremenimo prejsnji ozdelek v sliko formata gif, recimo v skica.gif:
 
#  convert skica.fig skica.gif
Za samo obdelavo slik je poleg omenjenga paketa zelo dobrodosel xv.  Poskusimo:
 
#  xv skica.gif 
Za nezahtevno risanje je koristen xpaint, bolj zahteven uporabnik pa bo posegel po gimp-u.

Za koncno izdelavo izdelka rabimo urejevalnik. Na voljo nam je niz pisarniskih paketov, za pristase LaTeX-a pa seveda obstaja skupina orodij, ki zagotavlja brezhibno delo (latex, ispell, xdvi, dvips, gs, gv), vendar to vec ni predmet tega prispevka.