24
Grafički prikaz podataka Neki primjeri

Grafički prikaz podataka Neki primjerigrdelin.pmf.unizg.hr/~ivo/Nastava/Numericke_metode/vjezbe/Vjezbe11.… · Naredbe za početak i završetak: Početak: CALL DISINI • Završetak:

  • 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