Izogonális pont (2)

 

Egy geometriai szélsőérték feladat

 

 

Feladat: Adott a síkban n darab pont. Keresendő az a pont, amelyből az adott pontokba húzott szakaszok hosszának az összege – a sík bármely pontjára nézve – a lehető legkisebb.

 

A szakirodalom bővelkedik a feladat n<5 esetének megoldásában. Az első részben (Izogonális pont (1)) ezeket foglaltam össze, illetve kiegészítettem az IMT mértékének kiszámításával az n=3 esetre. Ebben a második részben közelítő módszereket tesztelek. Az n=1 és n=2 esetekre semmiféle közelítő eljárásnak nincs értelme, hiszen a megoldás szinte triviális. Ezért csak n=3 és n=4 esettel foglalkozom. Erre azért van szükség, mert közelítő módszereknek n bármilyen véges érékére és bármilyen pontelrendezésre helyes eredményeket kellene adni. n=3 és n=4 -re viszont tökéletesen ismerjük a megoldást, melyet összevethetünk a közelítő eljárás eredményével, így megítélhetjük a közelítő módszer helyességét. Írtam egy programot Delphi-ben, amellyel három módszer próbálható ki. Lássuk ezeket:

 

Az első közelítő eljárás.

 

Térjünk vissza az első rész azon egyenleteihez, melyek a távolságösszegek és azok deriváltjait tartalmazzák. Emlékeztetőül:

 

A parciális deriváltak:

 

 

Ez utóbbit trigonometrikus egyenleteknek is felfoghatjuk:

 

 és

 

ahol a szögek az I -ből a pontokba mutató helyzetvektorok irányszögeinek tekinthetők. Az egyenletek azt fejezik ki, hogy az I -ből a pontok felé mutató egységvektorok összege 0-vektor. Itt említeném meg, hogy a probléma Pólya György-féle mechanikai megoldásának (szemléltetésének) az alapját is ezek az egyenletek szolgáltatják, ahol egyenlő nagyságú erők egyensúlyával választódik ki a keresett pont. Kíváncsi voltam, hogy ez mennyire adja helyesen az I -t az n=3 különböző eseteire. Nézzük az algoritmust:

 

Az algoritmus:

 

1. Vegyük kiindulási (aktuális) pontnak a három pont súlypontját, illetve az ide mutató (aktuális) helyvektort. (Egyébként ez nem feltétlen kötelező, bármely ponttal illetve helyvektorral kezdhetünk.)

2. Állítsuk elő az aktuális pontból a pontokba mutató egységvektorokat.

3. Adjuk hozzá az aktuális helyvektorokhoz az egységvektorokat, az így kapott helyvektor legyen az új (aktuális) helyvektor.

4. Valamilyen kritériumtól (ez lehet például lépésszám vagy az utolsó egységvektorok összegének a nagysága) függően lépjünk vissza a 2. pontra, vagy fejezzük be az algoritmust, mert elég közel kerültünk az I-hez.

 

Lássunk akkor n=3-ra egy-egy példát:

 

 

A piros körök az egyes lépések helyét (aktuális pontjait) jelölik, a fehér szakaszok a megoldásnak felelnek meg. Az x és y koordináták az „IMT SIN, COS-al” feliratú nyomógomb alatt láthatók. Úgy néz ki, hogy az algoritmus működik. Ebben a példában a háromszögnek minden szöge kisebb-nál. De mi a helyzet, ha ez nem áll fenn? Lássuk:

 

 

Hát ez egészen szomorú. Az algoritmus nem konvergál, sőt a megoldást sem adja (ami a-nál nagyobb szögű csúcs lenne). Nézzünk egy másik példát is erre az esetre:

 

 

Itt viszont jó közelítést kaptunk. (Pontosságát ne firtassuk.) Megváltoztattam az előző példában a két darab y=4 -es esetet. Ezt azért célszerű elkerülni (mármint azt, hogy azonos koordináták legyenek a pontok koordinátái között), mert ekkor a szögfüggvények hirtelen változásokat szenvednek. Ebből arra lehet következtetni, hogy nem mindegy melyik pillanatban ér véget az algoritmus. Az algoritmus ugyanis lépésszám elérésére ér véget. Ha a szükséges lépésszámot véletlen értékre állítjuk, és többször lefuttatjuk az algoritmust ugyanarra az esetre, akkor ez nyilvánvalóvá válik:

 

 

Ahány futtatás, annyiféle végeredmény (fehér szakaszok).

 

Mi a helyzet, ha a három pont egy egyenesre esik:

 

 

Ez sem stimmel. A (4, 2) pontot kellett volna kapnunk. Tehát ennek az algoritmusnak az alkalmazhatóságát még meg kell vizsgálni, eredményeit kritikával kell fogadni.

 

A második közelítő eljárás

 

         Ez az eljárás gyakorlatilag az ütközésmentesítő algoritmusom lépéseit követi. Mivel minden szóba jövő pontra kiszámolja az IMT mértékét (a távolságösszegeket), ezért a közelítésben igencsak bízhatunk.

 

Az algoritmus:

 

1. Vegyük kiindulási (aktuális) pontnak a három pont súlypontját. (Egyébként ez nem feltétlen kötelező, bármely ponttal kezdhetünk.)

2. Határozzuk meg az aktuális pont IMT mértékét.

3. Válasszunk véletlenül egy új pontot az adott pontok környezetében és határozzuk meg az új pont IMT -jét.

4. Ha az új pont IMT -je nem nagyobb (ugyanis minimumot keresünk) mint az aktuális pont IMT -je, akkor az aktuális pont legyen az új pont.

5. Valamilyen kritériumtól (ez lehet például lépésszám vagy az utolsó két aktuális pont távolsága) függően lépjünk vissza a 3. pontra, vagy fejezzük be az algoritmust, mert elég közel kerültünk az I-hez.

 

Elsőként legyen olyan a három pont, hogy az általuk alkotott háromszögnek minden szöge kisebb -nál.

 

 

Úgy néz ki, hogy működik. Lássuk a két kritikus esetet. (-nál nagyobb szög és egy egyenesen lévő pontok.)

 

 

 

Az algoritmus itt is megfelelőképpen működik.

 

A harmadik közelítő eljárás

 

Ez az algoritmus egyesíti az előző kettő jó tulajdonságait. Határozott konvergenciát mutat, mint az első, de minden pontra számol az IMT -t mint a második, így itt is bízhatunk a közelítés helyességében.

 

Az algoritmus:

 

1. Vegyük kiindulási (aktuális) pontnak a három pont súlypontját. (Egyébként ez nem feltétlen kötelező, bármely ponttal kezdhetünk.)

2. Határozzuk meg az aktuális pont IMT mértékét.

3. Keressük meg az aktuális pont környezetében, tőle meghatározott – de elég kis – távolságra lévő pontok közül a legjobb tulajdonságú pontot és ez legyen az új aktuális pont.

4. Valamilyen kritériumtól (ez lehet például lépésszám vagy az utolsó két aktuális pont távolsága) függően lépjünk vissza a 3. pontra, vagy fejezzük be az algoritmust, mert elég közel kerültünk az I -hez.

 

Az egyszerűség kedvéért a program az elég kis távolságra lévő pontokat a négy koordináta irányban keresi. Nézzük a szokásos esteket. Először hegyesszögű háromszögre:

 

 

A megoldás jónak tűnik. Nézzük -nál nagyobb szögű háromszögre:

 

 

Most is jó ponthoz konvergál. És az utolsó eset, amikor a három pont kollineáris:

 

 

Szintén a jó megoldást szolgáltatta.

 

A második és harmadik közelítő eljárás tehát jól működik, míg az első eredményeit kritikával kell fogadni. A programból nem veszem ki az első eljárást, mert kíváncsi vagyok, hogy háromnál több pont esetén mikor ad helytelen eredményt.

 

         Lássunk egy-egy olyan screenshot-ot amelyeken egymásra van vetítve a három módszer. Hegyesszögű- háromszög esetében nagy a hasonlóság:

 

Legyen a háromszögben -nál nagyobb szög:

 

 

Látható, hogy az első közelítő módszer itt nagyon eltérő eredményt produkált (fehér szakaszok).

 

 

Tehát az első és a harmadik esetben elég közeli értékeket adtak mindhárom eljárásra, a második esetben viszont durva az eltérés az első közelítő eljárásnál (fehér szakaszok).

 

Ezek után térjünk át az n=4 esetre. Mint ahogy azt az első részben is leírtam, négy lehetséges esettel kell számolni. A négy pont kollineáris, csak három pont kollineáris a négy közül, a négy pont konvex négyszöget határoz meg, és a negyedik, amikor konkáv négyszöget.

 

Mindegyikre lássunk példát először az első algoritmust használva.

 

 

 

 

 

Most lássuk mi a helyzet a második algoritmussal.

 

 

 

 

 

És végül a harmadik algoritmussal oldjuk meg az előzőket.

 

 

 

 

 

Négy pontra az algoritmusok ugyanúgy viselkedtek, mint három pontra. Itt is az első a megbízhatatlan, a másik kettő mindig adott megoldást. A második még azt is érzékeltette a keresési pontok által, hogy a négy egy egyenesre eső pontok esetében a középső szakasz bármely pontja megoldás lehet, hiszen itt sűrűsödtek be a keresési pontok.

 

Következő lap: http://gorbem.hu/MT/Izogonalis3.htm