Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
• Grafički prikaz podataka•Neki primjeri
DISLIN – jedna od niza biblioteka za grafički prikaz podatakaAutor: Helmut Michels, MPI für Sonnensystemforschung
http://www.mps.mpg.de/dislin/
Biblioteka za grafički prikaz podataka
DISLIN služi za prikaz podataka na 2D i 3D raznim vrstama grafovaZa programske jezike:Fortran 77, Fortran 90, C, Perl, Python, Java
Treba editirati datoteku .bashrc
>joe .bashrc
export PATH=/opt/dislin/bin/:$PATHexport DISLIN=/opt/dislin/export LD_LIBRARY_PATH=/opt/dislin/:$LD_LIBRARY_PATH
-da bi postalo djelotvorno mora se još jednom startati file .bashrc kadse promijeni>. .bashrc
-prevođenje programa koji koristi DISLIN biblioteku:- treba iskopirati u home directory:>cp /opt/dislin/g95/dislin.f90 .>ifort –c dislin.f90>ifort ime_programa.f90 -o ime_programa.exe -L/opt/dislin -ldislin
Osnovne pretpostavke / Format stranice
• pretpostavljena stranica:DIN A4 Landscape
• Ishodište: Gornji lijevi kut
• Jedinice za crtanje: [cm / 100]• potprogrami:
SETPAG (COPT) PAGE (NXP, NYP)
Formati datoteka
• Vektorski formati: GKSLIN, CGM, PS, EPS, PDF, HPGL, WMF, SVG
• Formati slika: TIFF, GIF, PNG, PPM, BMP
• Ispis na ekran: CONS, XWIN • Potprogrami: METAFL (Format)
SETFIL (Filename)
Struktura nivoa
Nivo 0 : prije DISINI ili poslije DISFINNivo 1: prije DISINI ili poslije ENDGRFNivo 2: poslije GRAF, GRAFMP ili POLARNivo 3: poslije GRAF3 ili GRAF3D
Struktura programa
• Postavljanje formata stranice, formata datoteke i imena datoteke (SETPAG, PAGE, METAFL, SETFIL)
• inicijalizacija (DISINI)• Postavljanje parametara za grafički prikaz• Iscrtavanje osnog sustava (GRAF, POLAR, GRAFMP,
GRAF3, GRAF3D)• Ispis imena (TITLE)• Ispis točaka za grafički prikaz (CURVE, CURVE3, CURV3D,
BARS, PIEGRF, SURFCE, CONTUR)• završetak (DISFIN)
Dogovori za korištenje:
•CJELOBROJNE variable počinju s N ili I, a karakter varijable s C•Ostale su REAL•Nizovi završavaju s stringom ´RAY´
Naredbe za početak i završetak:Početak: CALL DISINI ()• Završetak: CALL DISFIN ()
Neke naredbe za iscrtavanje teksta i brojeva:
• MESSAG (CSTR, NX, NY) iscrtava tekst• NUMBER (X, NDEZ, NX, NY) iscrtava brojeve• SYMBOL (NSYM, NX, NY) iscrtava simbole• HEIGHT (NH) postavlja visinu karaktera• ANGLE (NANG) definira kut karakter• COMPLX, SIMPLX, DUPLX, definira vektorski font
SERIF, HELVE, HELVES • PSFONT (CFNT) definira PostScript font• BMPFNT (CFNT) definira font bitmape• WINFNT (CFNT) definira Windows fontove
Primjer programa koji koristi DISLIN za crtanje sin(x)
PROGRAM SINSINUSE DISLININTEGER, PARAMETER :: N=301REAL, DIMENSION(N) ::XRAY,Y1RAYPI=3.1415926FPI=PI/180.STEP=360./(N-1)
DO I=1,NXRAY(I)=(I-1)*STEPX=XRAY(I)*FPIY1RAY(I)=SIN(X)
END DO
CALL METAFL('PDF') ! Napravit će PDF fileCALL METAFL(‘XWIN’) ! Iscrtan na ekranu
CALL DISINI ! Inicijalizacija bibliotekeCALL PAGERA ! Iscrtava granice stranice
CALL COMPLX ! Postavlja vrstu fontaCALL NAME(‘kut','X') !Ime x-osiCALL NAME(‘sin(x)','Y') !Ime y-osiCALL TITLIN('SIN(X)',3)CALL GRAF(0.,360.,0.,90.,-1.,1.,-1.,0.5) !iscrtava 2D osni sistemCALL COLOR('RED') !boja krivuljeCALL CURVE(XRAY,Y1RAY,N) !crta krivulju
CALL DISFINEND
Neke naredbe za iscrtavanje osnog sustava i naslova:
• GRAF (XA, XE, XOR, XSTP, iscrtava osni sustavYA, YE, YOR, YSTP)
• POLAR (XE, XOR, XSTP, iscrtava polarni osni sustavYOR, YSTP)
• TITLE () iscrtava naslov• AXSPOS (NXA, NYA) definira poziciju osi• AXSLEN (NXL, NYL) definira duljinu osi
Neke naredbe za iscrtavanje krivulja:• CURVE (XRAY, YRAY, N) iscrtava krivulju• INCMRK (NMRK) odabire simbole ili linije• HSYMBL (NH) odabire veličinu simbola• THKCRV (N) odabire debljinu krivulje• LINTYP (N) definira tip linije• COLOR (COPT) postavlja boju
U DISLIN-u postoji grupa podprograma koja omogućuje da sepodaci grafički prikažu uz pomoć samo jedne linije (tj. podprograma).
• QPLOT (XRAY, YRAY, N) krivulja• QPLSCA (XRAY, YRAY, N) ‘scatter’ graf• QPLBAR (XRAY, N) ‘bar’ graf• QPLPIE (XRAY, N) crta ‘pie chart’• QPLCLR (ZMAT, NX, NY) 3-D graf u boji• QPLSUR (ZMAT, N, M) površinski graf• QPLCON (ZMAT, N, M, NLV) kontura graf
PROGRAM EXPOINTEGER, PARAMETER :: N=100REAL, DIMENSION(N) ::XRAY,YRAYREAL :: A,B,STEP,XXPRINT *,'POCETAK I KRAJ INTERVALA?'READ *,A,BSTEP=ABS(B-A)/N
DO I=1,NXRAY(I)=A+(I-1)*STEPXX=XRAY(I)YRAY(I)=EXP(XX)END DOCALL METAFL('PDF') !ili ‘xwin’CALL QPLOT(XRAY,YRAY,100)END PROGRAM
Ispis ovakav za interval od (0.5,2.5)
Primjer 1: Njihalo T2 = 4π2L/g
T – period njihalaL – duljina njihalag – 9.81 m/s2
L (m) | T (s) ---------------0.15 | .780.16 | .800.17 | .83 0.18 | .850.19 | .88 0.20 | .900.21 | .920.22 | .94 0.23 | .96 0.24 | .99
-odstupanja mjerenih podataka od pravca mogu se očekivati zbog nasumičnih grešaka kod mjerenja-velika odstupanja mogu upućivati na to da nam teorija nije dobra (naravno ne u ovom slučaju) ili da imamo sistematske greške-u ovom primjeru ‘fitat’ ćemo rezultate mjerenja na pravac metodom najmanjih kvadrata
Metoda najmanjih kvadrata:imamo set vrijednosti (xi, yi), želimo ih opisati f(x) = a*x+b
Za svaki xi definiramo di = f(xi)-yi
∑|di|2 za svih N točaka mjerenja mora biti minimalna da bi dobili najbolji fit – metoda najmanjih kvadrata
Analitički to možemo izračunati ovako:
a=(N∑xiyi– ∑xi ∑yi)/(N∑xi2– ∑xi ∑xi)
b=(∑xi2 ∑yi– ∑xi ∑xiyi)/(N ∑ xi2 –∑xi ∑xi)
sd = SQRT(∑[(yi-(a*xi+b))**2] / (N-2) ) ! Standardna devijacijada = sd*SQRT(N/(N ∑xi2 – ∑xi ∑xi)) ! Nepouzdanost od adb = sd*SQRT(∑xi2 /(N ∑xi2 – ∑xi ∑xi)) ! Nepouzdanost od b
Fortranski program koji koristi CERN biblioteku:
PROGRAM njihalo!USE DISLINIMPLICIT NONEINTEGER, PARAMETER :: N=10INTEGER :: I,IFAILREAL, DIMENSION (N) :: X,F,F1REAL :: A0,A1,SDDATA X /0.15,0.16,0.17,0.18,0.19,0.20,0.21,0.22,0.23,0.24/DATA F / 0.78,0.80,0.83,0.85,0.88,0.90,0.92,0.94,0.96,0.99/
!F=F*FCALL RLSQP1(N,X,F,A0,A1,SD,IFAIL) !CERN podprogram koji
!fita na pravac metodom najmanjih kvadrataprint *,A0,A1,SD,IFAIL ! –4.000368e-3,4.04756,2.109e.3,0
! Želimo to sve skupa i nacrtati korištenjem DISLIN bibliotekeF1=A0+A1*X!CALL METAFL('pdf')CALL SETPAG('da4p')CALL DISINICALL PAGERA()CALL NAME ('duljina (m)','x')CALL NAME ('vrijeme**2 (s**2)','y')CALL GRAF(0.1,0.3,0.1,0.1,0.5,1.1,0.5,0.1)CALL HSYMBL(18)do i=1,NCALL RLSYMB (5, X(i), F(i))end doCALL CURVE(X,F1,N)CALL DISFINEND PROGRAM
Prevođenje programa:>ifort njihalo.f90 –o njihalo.exe –lmathlib –L/opt/dislin –ldislin>./njihalo.exe ⇒ ‘dislin.pdf’
Ako želimo isctravanje grafa na ekran u Xwin moramo staviti u program
Umjesto CALL METAFL('pdf') CALL METAFL(‘xwin’)
Primjer: Eulerove-Cromerove metode
- mnogi se sistemi mogu napisati preko diferencijalnih jednadžbi prvog ili drugog reda-razvoj sistema u vremenu može se rješavati numerički
Primjer: titranje mase na opruzi
Sila je F=-kx, a gibanje tijela može se opisati diferencijalnom jednadžbom 2. reda:x’’ = -kx/m , gdje je:
k je konstanta opruge (N/m) x je pomak od središta m je masa
Iz ovog imamo 2 dif. jednandžbe 1. reda:dv/dt=-kx/mdx/dt=v
Analitičko rješenje za razvoj sistema s vremenom je:x(t)=x0cos(ω,t), ω =sqrt(k/m)
Numeričko rješenje (Euler-Cromer):-potrebno poznavati početne uvjete:
m=0.1 kg, k=1.0 N/m,x(t=0)=0.1 m v(t=0)=0 m/s mirovanjedt=0.01 st=0
Rješavamo: t(i+1)=t(i)+dt pomak u vremenu, a=-kx/mv(i+1)=v(i)+a*dtx(i+1)=x(i)+v(i+1)*dt
program springuse dislinreal,parameter::m = 0.1,k = 1.0,x0 = 0.1,dt = 0.01real :: x,v,t! Zadati pocetne vrijednostx = x0 v = 0.0 t = 0.0 CALL METAFL('pdf')CALL SETPAG('da4p')CALL DISINICALL PAGERA()CALL NAME ('t (s)','x')CALL NAME ('x (m)','y')CALL GRAF(0.,5.2,0.,1.,-0.1,0.1,-0.1,0.1)CALL HSYMBL(18)
dot = t + dt ! Pomak u vremenua = -k*x/m ! Calculate the accelerationv = v + a*dt ! Pomak u brzinix = x + v*dt ! Pomak u poziciji! Izlaz usporedba numerickog i analitickog rjesenjaCALL COLOR('RED')CALL RLSYMB (5, t, x)CALL COLOR('BLUE')CALL RLSYMB (7,t, x0*COS(SQRT(k/m)*t))IF(t.ge.5.)EXITEND DOCALL DISFIN end program