Obdelava podatkov (risanje grafov)

Ko tudi učitelj ne more pomagati...
Uporabniški avatar
pilot
Prispevkov: 234
Pridružen: 2.7.2009 20:27

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a pilot »

Ja no to je pa drugo :D
Zgleda da meriš na fmf-ju praktikumska vaja 18.
Tole so moji stari grafi če ti kaj pomagajo.
http://shrani.si/f/8/op/2i8JRqRw/untitled.png

Drugače pa ti polagam na srce da se naučiš z Mathematico delati. Odličen tutorial program, help je neverjetno dober, hkrati pa obstaja močan forum posvečen samo Mathematici kjer ti bodo lahko profesionalci pomagali. http://mathematica.stackexchange.com/

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a Aniviller »

Joj @pilot, tako intenzivne reklame za Mathematico že dolgo nisem videl :) Saj zadeva je res močna in se lahko ogromno stvari na enem mestu naredit, ampak ni pa treba monopola zganjat... slabosti Mathematice so, da je plačljiva, in da je rahlo preveč univerzalna, tako da za enostavno plotanje podatkov imaš včasih za nastavljat več kot bi bilo optimalno (grafi funkcij so super, grafi točkovnih podatkov pa ne toliko). Jaz sem marsikdaj celo ko sem delal v Mathematici, šel v gnuplot potem za grafe dokončat. Ampak seveda, vsakemu svoje, po okusu...

Uporabniški avatar
pilot
Prispevkov: 234
Pridružen: 2.7.2009 20:27

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a pilot »

Hehehe mogoče pa res pretiravam :lol:

derik
Prispevkov: 2044
Pridružen: 6.3.2010 9:04

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a derik »

A bi se dalo s kakšnim programom pretvoriti tabelo podatkov v formulo? Imam tabelo s petimi stolpci. Vrednost v prvem stolpcu je odvisna od vrednosti v preostalih štirih, vendar pa ta odvisnost ni videti posebno enostavna. Podatki so empirični in zaenkrat imam samo pet vrstic.

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a Aniviller »

Odvisno kaj hočeš. V najbolj dobesednem pomenu to itak ni ne izvedljivo ne smiselno. To, kar hočeš, lahko narediš na več pomensko različno načinih:

1) Fitanje modela: v tem primeru moraš imet nekaj znanja ali predpostavk o sistemu, ki stoji za zadevo. S tem dobiš nastavek za izraz, proste parametre pa poiščeš s fitanjem. Če je tvoj model zadovoljivo dober, je to najboljši način. Če tvoj model ni ustrezen, potem imaš seveda tudi krivuljo, ki precej zgreši podatke. Primer tega je recimo fitanje resonančne krivulje na podatke o resonanci (ven dobiš koeficient dušenja, lastno frekvenco, amplitudo...), fitanje sinusa na časovni razvoj nihanja in tako naprej.
2) Fitanje aproksimiranega modela: to je podobno kot prej, ampak če si na ozkem območju, potem marsikdaj niti ne moreš ugibat o celotnem dogajanju izven območja... take lokalne aproksimacije so ponavadi kakšne premice, parabole, potenčne in eksponentne funkcije (in nasploh potenčni razvoji). Za kakšne blage odvisnosti je to ok.
3) Semiempirični in empirični modeli: tukaj ne izhajaš iz fizike (oziroma kakršnegakoli znanega mehanizma) ampak si ogledaš podatke, in glede na obliko, ki jo opisujejo, najdeš funkcijo, ki je še najbolj podobna. Tudi tukaj marsikdaj dobiš premice, parabole, Gaussove funkcije, polinome in podobno, s tem da je funkcija v bistvu izmišljena in jo ne smeš smatrat za fizikalni zakon.
4) Interpolacija: vse prejšnje metode privzamejo, da imajo tvoji podatki neko napako, in ne zahtevajo, da gre krivulja točno skozi vse merske točke, ampak raje izlušči po zdravi pameti obnašanje. Interpolacija je pa "slepa" in pač tvoje točke poveže (odvisno od stopnje in tipa interpolacije so to lahko lomljenke, interpolacijski polinomi, in še kaj). To je zelo redkokdaj upravičeno, in skoraj vedno narobe - če imajo podatki napako, s tem pridelaš kakšno divje obnašanje, ki je čisto mimo realnosti.

Pojdi po vrsti od zgoraj navzdol in izberi prvo možnost, ki je izvedljiva. Če imaš samo 5 merskih točk, potem imaš v bistvu dve možnosti: poznan model, ali pa polinom zelo nizke stopnje (premica, mogoče parabola).

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a Aniviller »

Fitanje seveda najdeš v vsakem spodobnem programu za plotanje (gnuplot ima čisto enostavno, pri Mathematici imaš par možnosti glede na to kaj rabiš - FindFit je bolj splošen).

Uporabniški avatar
pilot
Prispevkov: 234
Pridružen: 2.7.2009 20:27

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a pilot »

A bi se dalo s kakšnim programom pretvoriti tabelo podatkov v formulo? Imam tabelo s petimi stolpci. Vrednost v prvem stolpcu je odvisna od vrednosti v preostalih štirih, vendar pa ta odvisnost ni videti posebno enostavna. Podatki so empirični in zaenkrat imam samo pet vrstic.
Jep spet bom malce promoviral Mathematico :D

Neko osnovno obliko funkcijske vrednosti moraš poznati, to obliko ponavadi na grobo izspelješ. Mathematica pa ti potem izbere najbolše parametre glede na tvoje podatke.

DEMO:
Slika

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a Aniviller »

fit log(a+b*x**2) 'fajl.txt' via a,b
plot 'fajl.txt', log(a+b*x*x)
Po prvem koraku sta a in b definirana, lahko ju tudi izpišeš s print a,b če pozabiš koliko prideta.

skrat
Prispevkov: 381
Pridružen: 15.11.2011 15:32

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a skrat »

Kako je pa kaj z risanjem grafov v Origin, pozna kdo to?

brko
Prispevkov: 35
Pridružen: 8.5.2013 14:52

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a brko »

Koda: Izberi vse

RAWdata = 
  ReadList["C:\\Users\\Documents\\praktikum\\odyiv.dat", 
   Number];
x = {};
y = {};
z = {};
For[i = 1, i < Lenght[RAWdata], i = i + 3,
 {AppendTo[x, RAWdata[[i]]],
  AppendTo[y, RAWdata[[y + 1]]],
  AppendTo[z, RAWdata[[y + 2]]]
  }
 ]
Graf = Transpose[{z, y}];
ListPlot[Graf,
 PlotStyle -> {Red},
 PlotMarkers -> {"+", 20}]
Potem napiše ListPlot::argx: ListPlot called with 0 arguments; 1 argument is expected.

-.- Na koncu z živci.

Uporabniški avatar
pilot
Prispevkov: 234
Pridružen: 2.7.2009 20:27

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a pilot »

Jao vidim da si samo prepisal iz moje slike ki sem jo prilepil. Še enkrat si poglej argumente v RAWdata xD.

Koda: Izberi vse

  AppendTo[y, RAWdata[[y + 1]]],
  AppendTo[z, RAWdata[[y + 2]]]
:arrow:

Koda: Izberi vse

  AppendTo[y, RAWdata[[i + 1]]],
  AppendTo[z, RAWdata[[i + 2]]]
Potem napiše ListPlot::argx: ListPlot called with 0 arguments; 1 argument is expected.

-.- Na koncu z živci.
:D Hej, hej mirno poba, dokler imaš kvarkadabro se ti ni treba nič sekirat. :P
Zadnjič spremenil pilot, dne 15.10.2013 19:09, skupaj popravljeno 1 krat.

brko
Prispevkov: 35
Pridružen: 8.5.2013 14:52

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a brko »

Ja malo (VSE) sem res. :D

A boš jezen če ti povem, da kljub temu ne dela? (z isto napako)

Uporabniški avatar
pilot
Prispevkov: 234
Pridružen: 2.7.2009 20:27

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a pilot »

Meni tole dela, glede na čisto začetne podatke (3 stolpci).

Koda: Izberi vse

RAWdata = ReadList["C:\\Users\\Documents\\praktikum\\odyiv.dat", Number]

x = {};
y = {};
z = {};
For[i = 1, i < Length[RAWdata], i = i + 3,
 {
  AppendTo[x, RAWdata[[i]]],
  AppendTo[y, RAWdata[[i + 1]]],
  AppendTo[z, RAWdata[[i + 2]]]
  }]

Graf = Transpose[{z, y}];
ListPlot[Graf, PlotStyle -> {Red}, PlotMarkers -> {"+", 20}]
odyiv.dat
3.04000000000000E+0002 7.13878080415045E-0001 4.92832463979968E-0001
3.04000000000000E+0002 7.03166247043565E-0001 4.87088172517197E-0001
3.04000000000000E+0002 6.96131837949187E-0001 4.83455818111759E-0001
3.04000000000000E+0002 6.85755703059434E-0001 4.76121608022871E-0001
3.04000000000000E+0002 6.72816052491035E-0001 4.67265848275377E-0001
3.04000000000000E+0002 6.59739070725566E-0001 4.58159043221159E-0001
3.04000000000000E+0002 6.39642938887617E-0001 4.42983824914401E-0001
3.04000000000000E+0002 6.28000305180438E-0001 4.37154001477332E-0001
3.04000000000000E+0002 6.13946746013581E-0001 4.27269709487776E-0001
3.04000000000000E+0002 5.72274357213703E-0001 3.95392244871768E-0001
3.04000000000000E+0002 5.47676813916228E-0001 3.79008298087249E-0001
3.04000000000000E+0002 5.20042725261311E-0001 3.60724498148182E-0001

Uporabniški avatar
pilot
Prispevkov: 234
Pridružen: 2.7.2009 20:27

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a pilot »

Mislim da si narobe napisal naslov datoteke. C:\\Users\\???\\Documents\\praktikum\\odyiv.dat

Uporabniški avatar
pilot
Prispevkov: 234
Pridružen: 2.7.2009 20:27

Re: Obdelava podatkov (risanje grafov)

Odgovor Napisal/-a pilot »

Probaj se naučiti branja error msg.
ListPlot::argx: ListPlot called with 0 arguments; 1 argument is expected.

Pomeni da v funkciji ListPlot brez argumentov, zahteva da vneseš 1 argument. Se pravi da je Graf prazen. Ko to ugotoviš probaš iti po programu nazaj in ugotoviti kje se ti zatakne pomagaj si z Print[]. Mathematica zna delati z praznimi stvarmi samo plotat ne zna praznih stvari. Ker je moja koda pravilna sem predvideval da je nekaj narobe z tvojim shranjevanjem podatkov.

Odgovori