[ALG] Vector dataset probleem

Pagina: 1
Acties:

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 17:17
Uiteenzetting van het probleem:

Ik heb meerdere datasets van enkele 10000'en records. Deze datasets beschrijven een 3 dimensionele vector, door de uiteenzetting van deze vector op de drie assen van het stelsel. Het probleem is echter dat alle de metingen van de drie assen over een onbekend stuk verschoven zijn. Hierdoor klopt de richting van de vector niet meer met wat het moet zijn.

Ik weet niet goed (behalve met de hand enkele waardes proberen), hoe ik dit probleem op kan lossen. Ik ben dus op zoek naar een manier om de verschuiving van de drie assen te bepalen, zodat ik weer een goede richtingsvector heb om mee te werken. Met de hand is mogelijk, maar dat bestaat vooral uit het in het wilde weg drie offsets invullen, kijken wat het resultaat is en itereren tot het klopt. Ook is Excel niet echt een ster in het rekeken met zo veel records. Bijkomend probleem: per dataset kunnen deze waardes anders zijn en de waarde van de veldsterkte (lengte van de vector) is niet bekend. Wie-o-wie?

Vragenuurtje: :)

Q: Wat bedoel je met verschoven?
A: Iedere as heeft, over de volledige dataset, een verschuiving. Dus als het middenpunt normaal 0 is, ligt dat punt er nu naast. Door dan de vector weer te construeren uit de drie metingen, krijg ik een foutief resultaat.

Q: Waardoor is dit veroorzaakt?
A: Sensorcallibratie en temperatuursinvloed op de sensor waardoor de callibratie verkeerd is opgezet. De metingen kunnen niet overnieuw gedaan worden. Maar dit terzijde, is verder niet interessant.

Q: Is dat voor alle vectoren gelijk of verschilt het per vector?
A: Verschillend, mogelijk ook verschillend per dataset, hoewel er wel correlatie tussen is.

Q: Waar kun je aan zien of een vector goed is of nog verschoven moet worden?
A: De grootste hint is het feit dat bij een complete dataset de vector even lang moet zijn. Nu is dat niet het geval. Ook is duidelijk te zien aan het resultaat van de vector wat wel en niet goed is. Voorbeeld: een bepaalde meting laat een continue rotatie zien op 1 vlak. Als de verschuiving niet opgelost is, krijg je een soort sinusoide te zien ipv een rotatie.

Q: Eigen vraag: Kun je niet gewoon de maximale waarden nemen en het gemiddelde daartussen als nieuw middelpunt nemen?
A: Nee, de datasets bestrijken niet het volledige bereik van de drie assen.

[ Voor 42% gewijzigd door DaCoTa op 19-12-2002 15:20 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:51

Janoz

Moderator Devschuur®

!litemod

Wat bedoel je met verschoven? Waardoor is dit veroorzaakt? Is dat voor alle vectoren gelijk of verschilt het per vector? Waar kun je aan zien of een vector goed is of nog verschoven moet worden?

maw, ietsje meer info ;)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:51

Janoz

Moderator Devschuur®

!litemod

Kom ik met meer vragen :)

Die dataset, zijn dat gewoon 1000-en 3d vectoren trouwens? En wat is de relatie ertussen? Is het een soort verschuiving (positie op t=1 is v1, positie op t=2 is v1+v2 oid)?

Zijn er verschillende metingen die dezelfde uitkomst zouden moeten hebben maar ze niet hebben?

Het probleem is id dit geval meer dat het heel moeilijk automatisch te repareren is waneer je zelf moeilijk kunt formuleren waneer iets goed is. Die rotatie waar je het over had is op zich simpel te reconstrueren. De verschuiving is redelijk te bepalen en door deze omgekeerd weer toe te passen heb je je orginele data terug.


[stuurman aan wal achteraf mode]
Was het niet handig om tijdens de metingen een calibratie vector op te nemen zodat je bij elke meting de verschuiving af kon lezen? ;)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 17:17
Kom ik met meer vragen :)
Q: Die dataset, zijn dat gewoon 1000-en 3d vectoren trouwens? En wat is de relatie ertussen? Is het een soort verschuiving (positie op t=1 is v1, positie op t=2 is v1+v2 oid)?
A: Het zijn idd allemaal 3d vectoren, maar geen verschuiving maar een absolute richtingsvector. Aangezien de metingen in de echte wereld zijn gedaan, zitten opeenvolgende metingen dicht bij elkaar, maar over een hele dataset zijn er wel redelijk wat verschillende metingen te vinden.

Q: Zijn er verschillende metingen die dezelfde uitkomst zouden moeten hebben maar ze niet hebben?
A: Volgens mij niet, het is een constant (voor een dataset) probleem. Dus als een meting aan het begin fout is, is die aan het eind even fout (meetruis daargelaten natuurlijk :) ).

Q: Het probleem is id dit geval meer dat het heel moeilijk automatisch te repareren is waneer je zelf moeilijk kunt formuleren waneer iets goed is. Die rotatie waar je het over had is op zich simpel te reconstrueren. De verschuiving is redelijk te bepalen en door deze omgekeerd weer toe te passen heb je je orginele data terug.
A: Dat is inderdaad het idee en het is me nu met 1 dataset handmatig redelijk goed gelukt, omdat ik een goed idee had van wat dat voor moest stellen. Maar van de andere datasets is dat veel minder het geval. De belangrijkste houvast is dat de lengte van alle vectoren gelijk moet zijn.

Q: [stuurman aan wal achteraf mode] Was het niet handig om tijdens de metingen een calibratie vector op te nemen zodat je bij elke meting de verschuiving af kon lezen? ;)
A: De calibratie is gewoon verkeerd opgezet. Iets heeft ervoor gezorgd dat de metingen zijn verschoven, wat is nog onbekend.

Mijn idee tot nu toe:
1. een selectie uit de datasets nemen ivm rekensnelheid.
2. brute force in grote stappen verschillende offsets toepassen en het gemiddelde/afwijking/mediaan/andere statistische gegevens van de vectorlengte bepalen.
3. Bijhouden welke offsets de beste score hadden.

Ik ben alleen bang dat dit ongeloofelijk lang gaat duren... En ik vermoed dat er een elegantere oplossing voor bestaat in de trend van functieoplossing oid, maar ik kan mijn hoofd er niet omheen krijgen...

Maar dit vragenuurtje maakt het op zich ook al een stuk inzichtelijker omdat ik het eerst voor mezelf inzichtelijk moet maken voor ik alle vragen kan beantwoorden :)

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 17:17
Voorbeeld van drie verschillende metingen:

X Y Z
-32,5 -274 311,5
48,5 -337 -45,5
-22,5 -532 -192,5

Als je van deze drie metingen de vectorlengte berekend, komen daar de volgende waardes uit: 416,1; 343,5; 566,2. Dit zijn duidelijk drie verschillende lengtes. Door nu de drie assen te verschuiven, moeten de lengtes hetzelfde worden. Aangezien er genoeg metingen zijn, zou dat toch moeten lukken.

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 10:34

Knutselsmurf

LED's make things better

Dus als ik het goed begrijp, wil je een vector (Dx,Dy,Dz) vinden, zodat de lengte van alle vectoren (x+Dx,y+Dy,z+Dz) gelijk wordt?
Of in ieder geval, omdat we het over meetresultaten hebben, dat via bijvoorbeeld een kleinste-kwadraten-methode de lengtes zo gelijk mogelijk worden. Klopt dat?

- This line is intentionally left blank -


  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 17:17
Yep. Nou heb ik wel een vermoeden dat, naast brute force, er ook wel slimmere (lees: snellere) methoden zijn, maar op dat punt schiet mijn wiskunde te kort... :(
edit:
Hoei, dat is wel een erg boze smiley :)

[ Voor 15% gewijzigd door DaCoTa op 19-12-2002 17:59 ]


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 10:34

Knutselsmurf

LED's make things better

Ik ben even lief geweest, en heb een 1-dimensionaal geval uitgewerkt.

Stel, we hebben een reeks getallen (x1..xn). Daarvan willen we een x bepalen, zodanig dat Som(i=1..n) (xi-x)2 minimaal is. Dit betekent dat als de afgeleide naar x 0 is, dat dan de functie minimaal is.

Omdat de som en de afgeleide beide lineaire operaties zijn, mogen we ze omdraaien, zodat we mogen zeggen dat Som(i=1..n) d/dx ((xi-x)2)=0.

d/dx ((xi-x)2) is d/dx (xi2-2xxi+x2) is -2xi+2x

Dus Som(i=1..n) (-2xi+2x)=0
Som(i=1..n) (-2xi+2x) = Som(i=1..n) (-2xi)+Som(i=1..n) (2x) = Som(i=1..n) (-2xi)+2nx = 0 => nx=Som(i=1..n) (xi) => x = Som(i=1..n) (xi) /n.

En die laatste kennen we als het gemiddelde :)

Waarom deze omweg dan? Omdat volgens mij op soortgelijke manier jouw probleem opgelost kan worden.

- This line is intentionally left blank -

Pagina: 1