Wiskundig handgetekende cirkels beoordelen met Maple!

Pagina: 1
Acties:
  • 1.399 views

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
INLEIDING

Zoals uit de titel al blijkt, wil ik handgetekende cirkels wiskundig beoordelen. Ik had al eerder gepost op het forum over een programma die ik zou kunnen schrijven om getekende cirkels mee te beoordelen en ik ben inmiddels heel wat verder. We hebben nu nog maar een heel klein probleempje in Maple waar we niet uit komen. Voordat ik begin over het probleem zelf, wil ik eerst het onderwerp introduceren. Daarna zal ik ingaan op het probleem.

Begin dit jaar heb ik dit onderwerp gekozen voor wiskunde als praktische opdracht op aanbeveling van mijn leraar. Nu ben ik ermee doorgegaan voor mijn profielwerkstuk. Als je op Youtube zoekt met “freehand circle drawing” zul je zien dat er heel wat mensen zijn die uit de losse pols een hele mooie cirkel kunnen tekenen. Er is zelfs een wedstrijd georganiseerd waarbij een zekere Alexander Overwijk heeft gewonnen. Die wedstrijd was waarschijnlijk niet serieus (er was waarschijnlijk een jury aanwezig die de cirkels subjectief beoordeelde)

Mijn opdracht was dus om een wiskundige methode te verzinnen om deze cirkels te beoordelen. Ik heb vele methoden bedacht met allemaal hun eigen voor- en nadelen, maar uiteindelijk heb ik één methode eruit gepikt: bij de methode wordt er gebruik gemaakt van regressie analyse (in dit geval circulaire regressie analyse). Ik heb besloten om een smartboard te gebruiken voor het tekenen van de cirkels. Elke pixel levert dan 2 coördinaten op. Hiervoor heb ik inmiddels een programma die de coördinaten kan opslaan in een tekst-bestandje. De coördinaten kan ik dan uiteindelijk kopiëren en plakken in Maple. Voor de verdere berekening maak ik namelijk gebruik van een Maple worksheet, die de formule van de best passende cirkel voor mij kan berekenen.

DE MENSEN DIE MEER INFO WILLEN KUNNEN ALTIJD HET NODIGE DEEL VAN MIJN PWS KRIJGEN.

HET PROBLEEM


Zoals ik net al zei kan Maple voor ons de formule van de best passende cirkel berekenen, maar we moeten natuurlijk ook een maat hebben om te bepalen hoe goed de getekende cirkel is. Hierop heb ik het volgende verzonnen. Stel dat Maple voor ons de volgende cirkel berekent:

Cirkel met gegeven middelpunt M(XM,YM) en straal=R. Verder nemen we momenteel alleen één punt en dat zullen we later uitbreiden tot iets algemeens (dus geldig voor alle pixels). We noemen het punt P(XP,YP). Hierbij moet je wel opletten: De formule van de cirkel wordt gegeven in de volgende vorm: x^2+y^2-2*a*x-2*b*y-c = 0. Het middelpunt van deze cirkel is dus (a,b). De cirkel wordt dus niet als volgt gegeven: (X-XM)^2 + (Y-YM)^2 = R^2. Maple berekent wel a, b en r allemaal; het middelpunt en de straal zijn dus wel gegeven!

Als de afstand van het punt P tot het middelpunt gelijk is aan de straal, dan is dat dus perfect. Hoe groter de afwijking van de straal is, hoe slechter we dat vinden. Hiervoor bereken ik door middel van Pythagoras de afstand van het punt P tot het middelpunt M en daarvan trek ik de straal af. Om te zorgen dat bij meer punten negatieve en positieve waarden elkaar niet kunnen compenseren, heb ik besloten om de absolute waarde van het verschil te nemen.

In formulevorm ziet dat er als volgt uit (Dit is alleen voor punt P):

Afwijking van punt P: |Wortel( (YP-YM)^2 + (XP-XM)^2 ) - R |

(R is hierbij de straal zoals ik al eerder had genoemd)

Als we dit nu veralgemeniseren voor alle punten (pixels) dan krijgen we dit:

Afwijking getekende cirkel: (Sigma |Wortel( (YP-YM)^2 + (XP-XM)^2 ) - R | ) / N


Bij deze formule tellen we dus ALLE afwijkingen (verschillen) bij elkaar op en ik deel tenslotte door het aantal pixels om een gemiddelde te krijgen. N is dus hierbij het aantal pixels. Ik heb hier bewust voor een gemiddelde gekozen omdat niet iedere getekende cirkel evenveel pixels zal hebben. De ene cirkel zal namelijk groter zijn dan de ander.

Het probleem is echter dat we dit helemaal niet in Maple hebben kunnen verwerken. De worksheet die wij gebruiken is te vinden op de volgende site: http://www.maplesoft.com/applications/view.aspx?SID=3776. Het is ons helemaal niet gelukt om bovenstaande formule erin te verwerken. Als dat uiteindelijk is gelukt dan is ook het hele project af. Maple-kenners zouden volgens mij precies weten hoe het moet. Vandaar dat ik besloot om het forum deze vraag te stellen.

Zoals ik al had aangegeven hebben we op school een smartboard tot onze beschikking. Het doel is dus uiteindelijk om een wedstrijd te organiseren waarbij meerdere mensen een poging doen om de beste cirkel te tekenen.

Bij voorbaat dank _/-\o_ ,

Fatih C.

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Verwijderd schreef op zaterdag 30 januari 2010 @ 23:31:
Zoals ik net al zei kan Maple voor ons de formule van de best passende cirkel berekenen, maar we moeten natuurlijk ook een maat hebben om te bepalen hoe goed de getekende cirkel is.
Die maat héb je al. Door te bepalen wat 'de best passende cirkel' is maximaliseer je een 'mate van gelijkenis' tussen de cirkel en je punten.

Je kunt natuurlijk met een andere maat gaan werken. Je moet je alleen goed afvragen welk effect het bepalen van je cirkel op de uiteindelijke 'goedheid van de cirkel' heeft.
Afwijking getekende cirkel: (Sigma |Wortel( (YP-YM)^2 + (XP-XM)^2 ) - R | ) / N
Even voor mensen die een leesbare formule willen: Afbeeldingslocatie: http://upload.wikimedia.org/math/6/b/1/6b10bc828d96c12320d3b747807476e8.png
(...)
Het probleem is echter dat we dit helemaal niet in Maple hebben kunnen verwerken.
En we hebben een... SCRRRRRIPTREQUESTESTESTEST. Met een hoop geblaat eromheen, dat wel. Wat heb je al geprobeerd? Lukte het al?

Ik heb het net in een half uur bij elkaar weten te sprokkelen. Even wat guides:
  • Om de waardes uit lsg in een formule te krijgen gebruik je subs:
    code:
    1
    
    subs( lsg, sqrt(c + a^2 + b^2) )
  • Een mogelijke oplossing is met een lusje. Een for-loop in maple kan over een lijst heen loopen en ziet er dan zo uit:
    code:
    1
    2
    3
    
    for item in lijst do
      <code>:
    end for:
  • Commando's sluit je af met een : als je geen output wilt hebben, ; als je dat wel wilt
  • Door in maple '? commando' in te typen krijg je het helpvenster meteen op de goede plaats open.
  • Arrays starten in maple te tellen bij 1, niet bij 0!
  • Om een waarde als decimaal getal te krijgen gebruik je
    code:
    1
    
    evalf(variable)
  • Lengte van een lijst krijg je met
    code:
    1
    
    nops(var)
    . number of operations. Gekke maple toch
Dat waren de punten waar ik net weer even aan herinnerd werd bij het schrijven van de code. Die is 145 tekens, en dan doe ik zelfs nog mn best om het leesbaar te houden...

offtopic:
[quote]Fatih C.[/quote]
Op tweakers groeten we elkaar continu

[quote]De formule van de cirkel wordt gegeven in de volgende vorm: x^2+y^2-2*a*x-2*b*y-c = 0.(...) De cirkel wordt dus niet als volgt gegeven: (X-XM)^2 + (Y-YM)^2 = R^2. [/quote]
Newsflash: (x-a)^2+(y-b)^2-r^2=x^2+y^2-2xa-2yb+a^2+b^2-r^2=x^2+y^2-2xa-2yb-c.

[ Voor 18% gewijzigd door ValHallASW op 31-01-2010 00:49 . Reden: imagefix, herschikken tekst, nops ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:31

Creepy

Tactical Espionage Splatterer

Wat ValHallASW zedgt dus ;) Je geeft net als de vorige keer een hoop tekst en uitleg maar concreet zeg je: "ik heb deze worksheet en deze formnule maar het lukt me niet" zonder verdere informatie over wat je nu al wel hebt geprobeerd en wat daar niet mee lukte. GoT is geen afhaalbalie voor een snelle oplossing, het draait hier om de eigen inzet. Je moet toch al wel iets hebben geprobreerd met die formule om dat in Maple te krijgen?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?
SEA >> PRG

Het gaat hier niet om een denkwijze, model of architectuur maar om het toepassen van concrete zaken.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • epic007
  • Registratie: Februari 2004
  • Laatst online: 25-08 11:27

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Nergens voor nodig. Dit is een klassiek parameterschattingsprobleem.

Het is verstandig om weer eens terug te denken aan hoe dat gaat met een lijn y = ax+b. De standaard methode is daar "kleinste kwadraten" Je definieert daar een fout Fi(a,b) = (yi-axi-b)[sup2[/] en je minimaliseert vervolgens ΣFi.

TS heeft hier een vergelijkbare aanpak. De foutformule is iets anders, maar nog steeds redelijk (0 voor perfecte cirkels, >0 bij alle andere vormen). Het probleem is alleen dat hij niet met Maple om kan gaan, vandaar de "scriptrequest!!!" reactie.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi iedereen,

Ik heb het volgende ingevoerd in Maple:

evalf(sum(abs(sqrt((Py[i]-b)^2+(Px[i]-a)^2)-R),i=1..N)/N)

Maar ik blijf de volgende error houden (onwillekeurig van het aantal ingevoerde punten): "Error, (in sqrfree) too many levels of recursion"

Het eerste waar ik dus aan dacht was dat voor het programma "N" niet duidelijk is, maar dit kan niet het probleem zijn als ik naar de foutmelding kijk. Toen ik Too many had gelezen probeerde wat minder punten in te voeren, maar ook dat heeft niks uitgehaald. De foutmelding bleef bestaan.

Bovendien even terugkomend op wat MSalters zei:

Het programma past eigenlijk geen circulaire regressie toe, maar lineaire regressie op een stelsel van vergelijkingen. Alle coördinaten die ik ingeef worden ingevoerd in de standaardformule van een cirkel waardoor je een aantal vergelijkingen overhoudt. Het aantal vergelijkingen is gelijk aan het aantal punten.

Zou jouw gedachte in dat geval dan nog steeds werken of wordt het hier anders? Als het inderdaad de kleinste kwadraten methode was voor cirkels dan klopt het helemaal wat je zei. De cirkel wordt namelijk zó gekozen dat de afwijking minimaal is. Hier is echter sprake van lineaire regressie toegepast op een stelsel.

[ Voor 38% gewijzigd door Verwijderd op 02-02-2010 22:15 ]


Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Het eerste waar ik dus aan dacht was dat voor het programma "N" niet duidelijk is, maar dit kan niet het probleem zijn als ik naar de foutmelding kijk.
Eigenlijk...

Tip 1: Tips bij debuggen
Tip 2: Lees de hele foutmelding
Tip 3: ? sqrfree
Tip 4: Wat de fuck zijn Py, Px, a, b, R en N?
Tip 5: Post de code die je gebruikt, want dat is blijkbaar niet dezelfde code als die in je gelinkte sheet
Tip 6: Je hebt neem ik aan ook een docent. Raadpleeg die voor de grap eens.
Tip 7: http://www.maplesoft.com/...ProgrammingGuide/Contents

Herhalingstip 1: Om de waardes uit lsg in een formule te krijgen gebruik je subs: subs( lsg, sqrt(c + a^2 + b^2) )
Herhalingstip 2: Lengte van een lijst krijg je met nops(var)

Bonustip 1: R != r

[ Voor 40% gewijzigd door ValHallASW op 02-02-2010 22:55 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik kom er nu achter dat er volgens mij nog iets mist aan de formule; je moet bij mijn formule eigenlijk ook nog eens delen door de straal. De afwijking bij een grotere cirkel zal namelijk groter zijn dan bij een normale cirkel (niet uitgeprobeerd in praktijk). Hierdoor is het een eerlijke compensatie om te delen door de straal.

Mocht ik een denkfout maken dan hoor ik het graag.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nu heb ik het volgende:

evalf( subs( lsg, sum(abs(sqrt((Py[i]-b)^2+(Px[i]-a)^2)-r),i=1..nops(Punkte))/nops(Punkte))/r

Maar momenteel krijg ik nog altijd een foutmelding: Error, unable to match delimiters

Bovendien heb ik mijn docent al geraadpleegd, meerdere docenten zelfs. Maar geen van hen heeft vroeger met Maple gewerkt. Mijn leraar wel, maar dat was heel kort zei hij zelf en hij wist dus ook totaal niet wat er aan de hand was.

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
De foutmelding die je eerst kreeg was een beetje een quirk van maple (namelijk: niet gewoon melden dat 'ie het niet analytisch kan oplossen maar een recursiefoutmelding geven), maar checken of je variabelen wel gedeclareerd zijn is een redelijke standaardvaardigheid. Die je nog steeds maar half hebt gebruikt...

Verder: 'have you tried googling that'? http://www.google.nl/sear...ers%22+site:maplesoft.com

[ Voor 5% gewijzigd door ValHallASW op 02-02-2010 23:21 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 02 februari 2010 @ 23:13:
Nu heb ik het volgende:

evalf( subs( lsg, sum(abs(sqrt((Py[i]-b)^2+(Px[i]-a)^2)-r),i=1..nops(Punkte))/nops(Punkte))/r

Maar momenteel krijg ik nog altijd een foutmelding: Error, unable to match delimiters

Bovendien heb ik mijn docent al geraadpleegd, meerdere docenten zelfs. Maar geen van hen heeft vroeger met Maple gewerkt. Mijn leraar wel, maar dat was heel kort zei hij zelf en hij wist dus ook totaal niet wat er aan de hand was.
unable to match delimiters = de haakjes komen niet mooi uit (er zijn niet evenveel "(" als ")" )
beetje basic maple kennis dit....

probeer gewoon op het einde wat extra haakjes te plaatsen, ik denk dat eentje extra al genoeg zal zijn.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:31

Creepy

Tactical Espionage Splatterer

K, gewoon syntax controleren, foutmeldingen leren begrijpen en je wat beter verdiepen in Maple dus. Dat is iets wat je toch echt in eerste instantie zelf zal moeten doen. Die basiskennis moet je prima zelf onder de knie kunnen krijgen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.