Obdelava podatkov (risanje grafov)
Re: Obdelava podatkov (risanje grafov)
Ja no to je pa drugo
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/
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/
Re: Obdelava podatkov (risanje grafov)
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...
Re: Obdelava podatkov (risanje grafov)
Hehehe mogoče pa res pretiravam
Re: Obdelava podatkov (risanje grafov)
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.
Re: Obdelava podatkov (risanje grafov)
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).
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).
Re: Obdelava podatkov (risanje grafov)
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).
Re: Obdelava podatkov (risanje grafov)
Jep spet bom malce promoviral MathematicoA 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.
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:
Re: Obdelava podatkov (risanje grafov)
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.
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.
Re: Obdelava podatkov (risanje grafov)
Kako je pa kaj z risanjem grafov v Origin, pozna kdo to?
Re: Obdelava podatkov (risanje grafov)
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}]
-.- Na koncu z živci.
Re: Obdelava podatkov (risanje grafov)
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]]]
Koda: Izberi vse
AppendTo[y, RAWdata[[i + 1]]],
AppendTo[z, RAWdata[[i + 2]]]
Hej, hej mirno poba, dokler imaš kvarkadabro se ti ni treba nič sekirat.Potem napiše ListPlot::argx: ListPlot called with 0 arguments; 1 argument is expected.
-.- Na koncu z živci.
Zadnjič spremenil pilot, dne 15.10.2013 19:09, skupaj popravljeno 1 krat.
Re: Obdelava podatkov (risanje grafov)
Ja malo (VSE) sem res.
A boš jezen če ti povem, da kljub temu ne dela? (z isto napako)
A boš jezen če ti povem, da kljub temu ne dela? (z isto napako)
Re: Obdelava podatkov (risanje grafov)
Meni tole dela, glede na čisto začetne podatke (3 stolpci).
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
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}]
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
Re: Obdelava podatkov (risanje grafov)
Mislim da si narobe napisal naslov datoteke. C:\\Users\\???\\Documents\\praktikum\\odyiv.dat
Re: Obdelava podatkov (risanje grafov)
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.
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.