Pomoč - krivulja

Mato

Majstr
3. okt 2007
2.083
393
83
Zdravo.

Ali je na tem forumu kakšen matematik oz. obstaja kakšen forum, kamor bi lahko postavil to vprašanje.
Kako bi matematično lahko izračunal, v kateri točki se zgornja krivulja neha (rdeča črta) in se začne druga krivulja?

Krivulja:
nvyh.png



Točke:
nqf7.png
 
13. jul 2011
2.677
626
113
formulirati moraš obe krivulji, potem pa ju izenačiš, saj v točki stičišča velja, da x1=x2 in y1=y2


nekako takole:

y1=f1(x1)
y2=f2(x2)

za stično točko velja, da sta x in y enaka, torej

f1(x1) = f2(x2) oz., če je x1=x2

f1(x) = f2(x)

potem pa iz tega izračunaš najprej x, nato še y
 
Nazadnje urejeno:

philips

Guru
Osebje foruma
Administrator
17. avg 2007
9.867
693
113
Osnovna težava pri tvojem pristopu je ta, da to sploh ni krivulja, ampak le množica točk.
Lahko greš recimo računati numerični odvod in vidiš kje se signifikantno spremeni.
 

Mato

Majstr
3. okt 2007
2.083
393
83
Mogoče sem dal premalo pojasnil.
Jaz imam na voljo samo točke, ki so na drugi sliki. Sliko krivulje sem dal samo za lažjo predstavo. Točke predstavljajo koordinatni sistem (x-y). Sedaj pa moram na osnovi teh točk ugotoviti, kje je tisti del, kjer se preneha ena "krivulja". Dejansko ne gre za krivulje, ampak obris nekega predmeta.
Nekako bo treba točke primerjat med seboj in na podlagi nekih formul ugotoviti, v kateri točki se zadeva lomi.
 

Mato

Majstr
3. okt 2007
2.083
393
83
Citat:
Uporabnik philips pravi:
Lahko greš recimo računati numerični odvod in vidiš kje se signifikantno spremeni.

Nekaj v tem smislu ja. Z odvodi praviš, da bi to rešil. Bom malo pogledal.
 

Utisevalec

Guru
12. nov 2007
16.132
4.112
113
Je to matematični ali realni problem?

Recimo v računalništvu (programiranje) to lahko rešiš z nekimi pametnimi algoritmi, če so točke dosti skupaj enostavno primerjaš odmike in smeri (odvod) posamezne točke, v stičišču se bo odmik kar naenkrat spremenil in to je to. Če iščeš samo en prelom lahko najprej primerjaš vsa razmerja med zaporednimi točkami in potem vzameš tistega ki je največje.

Matematično bi moral realno najprej množice točk opisat s krivuljami in nato dalje kot so ti že omenili. Spet, če uporabljaš računalnik potem lahko z določenimi programi iz množice točk izpelješ funkcije in potem dalje obdeluješ problem matematično.
 

philips

Guru
Osebje foruma
Administrator
17. avg 2007
9.867
693
113
Ja, čeprav boš moral malo metodo prilagoditi, ker nimaš na voljo funkcije.
Mogoče je najlažje da si točke urediš po X osi (verjetno jih itak že imaš), in potem samo za vsako točko (razen za prvo) izračunaš delta Y. Odšteješ torej Y vrednost trenutne in prejšnje točke. Tam kjer se vrednost delta Y ful spremeni, tam je tisto tvoje "koleno".

Edini problem je, če niso razdalje med X vedno konstantne - takrat moraš še normirati na medsebojno razdaljo. Torej odšteješ Y vrednosti in deliš z razliko X vrednosti. To je v bistvu tudi formula za računanje strmine (k) linearne funkcije. Opisovanje strmine pa je dejansko odvod funkcije.
 

doto

Fizikalc
25. jul 2007
3.175
0
36
V bistvu rabiš dvojni odvod. V točki preloma je maximum drugega odvoda.
 

Mato

Majstr
3. okt 2007
2.083
393
83
Citat:
Uporabnik philips pravi:

Edini problem je, če niso razdalje med X vedno konstantne - takrat moraš še normirati na medsebojno razdaljo. Torej odšteješ Y vrednosti in deliš z razliko X vrednosti. To je v bistvu tudi formula za računanje strmine (k) linearne funkcije. Opisovanje strmine pa je dejansko odvod funkcije.

Niso enaki odmiki. Sem pa ravno o nečem takem razmišljal ja.

Verjetno bom moral na podlagi poizkušanja določit neko vrednost, ki že pomeni prehod, namreč drugi del se lahko še večkrat ponovi in je nepredvidljiv. Zato iskanje max. vrednosti ne pride v poštev. "Okvirno" določena je samo prva krivulja, do preloma, vse naprej je pa lahko zelo različno.

Nekaj takega si ti mislil ne:
a = Yi+1 - Yi / Xi+1 - Xi

Jaz pa moram iz poizkušanja najti vrednost točke a, ki pomeni prehod in prvič, ko presežem to vrednost, to meni predstavlja prehod.
 

philips

Guru
Osebje foruma
Administrator
17. avg 2007
9.867
693
113
Točno tako. Prehod bo v tvojem primeru takšen: "a" bo iz "zelo velike negativne številke" preskočil na "negativno število blizu nič".
Pa seveda temeljito stestiraj za več različnih primerov in grafično preveri ali je našlo pravi prehod.
 

telex

Fizikalc
24. dec 2007
5.832
47
48
Problem lahko rešiš grafično ali analitično z interpolacijo ( http://sl.wikipedia.org/wiki/Interpolacija).
Pri grafični metodi točke narišeš v kartezijev koordinatni sistem in odmeriš x in y vrednost v želeni točki. Pri interpolaciji pa glede na obliko krivulj uporabi kubično interpolacijo. Ker ne več do kod sega ena in druga krivulja vzemi neko število vrednosti iz začetka tabele in izračunaj prvo krivuljo. Nato vzemi neko število vrednosti iz konca krivulje. Krivulji izenačiš in izračunaš točko presečišča.

PS- glede na graf vrednosti si lahko kot merilo za pripadnost točk prvi ali drugi krivulji izbereš neko vrednost razlik Y vrednosti dveh sosednih točk grafa. Če je razlika vrednosti večja od te vrednosti potem točka pripada prvi krivulji drugače pa drugi.
 

Mato

Majstr
3. okt 2007
2.083
393
83
Excel v priponki so točke, če bi se kdo rad pogledal
 

Priponke

  • 1812977-profile.xlsx
    33,4 KB · Ogledi: 261

Utisevalec

Guru
12. nov 2007
16.132
4.112
113
Pa so podatki točni in klapajo vedno ali so kakšni senzorski podatki ki včasih malce nihajo (šum itd.)?

Sam bi se tega lotil takole:
1. glajenje -> odstranit vse točke ki so jasen šum oz. napaka meritve + povprečenje vrednosti na interval v kombinaciji s točko 2.
2. interpolacija točk glede na predviden interval obdelave
3. preverit stanje z ustreznim filtrom/algoritmom (po točki 1 in 2. moraš dobit točke ki so na X-osi v enakem intervalu, in lepo zglajene na Y)
4. računat par razmerji med zaporednimi točkami (recimo DIF Y med dvema točkama, odvod na neki krajši skupini točk (3 točke)) in jih shranit v temp, ...
5. iz temp baze preko nekega algoritma potegnit ustrezne točke kjer se zgodi "prelom" (algoritem odvisi od vzorca podatkov ki ga imaš, načeloma lepši kot so "prelomi" bolj lahko našponaš pogoje in manj bo napak)

Za zgornjo krivuljo mislim da ni problema, dejansko bi problem rešil z računanjem delta Y med dvema točkama in potem ugotavljanjem kje je razlika v preskoku v 3h zaporednih vrednostih višja od XX. Pri kakšnih bolj kompleksnih podatkih bo pač potrebno malce več logike, ni pa nujno če so vse spremebe tako lepe.
 

Mato

Majstr
3. okt 2007
2.083
393
83
Hvala vsem za hiter odziv in pomoč (*).

Če je kdo domač v C++ in bi mi pomagal spisat ta program za proti uslugo v €, pa naj mi pusti zs.