bilinearis egyenletrendszer

Fórumok

Haliho,

a kovetkezo" egyenletrendszert kene megoldani (x es y ismeretlenek, tobbi adott valos sza'm):


 4A = A_00 + A_10*x + A_01*y + A_11*x*y
 4B = B_00 + B_10*x + B_01*y + B_11*x*y

tobbszor mar felmerult a problema, de valahogy mindig sikerult kikerulni, most mar nem nagyon akarom :]
Szoval erre kene vmi jo megoldas. A gond az, hogy lehet hogy a megoldas nem is egyedi, merthogy ez egy kvadratikus egyenletrendszer. Tovabbi egyszerusites lehet talan, hogy csak a [-1,1]x[-1,1] intervallumokban levo megoldas erdekel, ha van megoldas, de ezen kivul esik, akkor az nem erdekel.

Gyk az alapproblema marha egyszeru", adott egy f:R^2->R^2 fv, de csak egy szabalyos racson, a racspontok koze (bi)linearisan lehet interpolalni, es ezt az f fv-t kene invertalni.

Otlet?

Koszi, A.

Hozzászólások

Hi!

Ha nem programba kell, akkor talan a Matlab megoldja. Bar ahogy latom, nem ez a helyzet.

By(t)e
TBS::Antiemes

Nem, sajnos C kodba kene, elegge masszivan (igy is elegge lassan fut le, most fel lesz ezzel vhogy tuningolva, nem az igazi...:/).

Vmi geometriai megoldasa is lehet a dolognak, elvegre a ket egyenlet egy-egy kupszeletet (azonbelulis hiperbolat) ir le, kerdes, hogy ezek hol metszik egymast. Akar 4 metszespont is lehet...

Szamolj vegig egy altalanos esetet kezzel!

4A = A_00 + A_10*x + A_01*y + A_11*x*y
4B = B_00 + B_10*x + B_01*y + B_11*x*y

Szorozzuk vegig ugy, hogy az xy-os tag kiessen, ha kivonjuk egymasbol.
Marad valami C_1=C_2*x+C_3*y alaku, ami visszahelyettesitheto az egyikbe, marad egy masodfoku egyenlet, amit megoldasz a keplettel.
Amikor utana lekodolod, nyilvan le kell kezelni, ha valami 0 (0-val osztas), ha valami kiesne, es emiatt nem oszthatsz le vele, ha A_11 es B_11 is 0, stb.. de ez mar annyit nem bonyolit a dolgon. A kezi parameteres megoldas alapjan nem tunik lehetetlennek lekodolni.

----
-FLOSSzine: Ha 48 óráig Theo lehetnél, mire fordítanád a rendelkezésedre álló időt?
-Nagy Róbert: Úgy viselkednék Theo-val ahogy ő szokott, csak hogy átérezze :)
honlapkészítés

Remélem, jól értem a kérdést. Az A, B, A_ij, B_ij (i, j {0,1}-ben) mind paraméter, ugye?

1. Tegyük fel, A_11 = 0. Akkor az első egyenletből kapsz x és y között egy lineáris összefüggést, amit beteszel a másodikba, és azt megoldod másodfokú egyenletként. (Természetesen mindenhol figyelve, hogy amivel osztanál vagy szoroznál, az nem nulla. Igazából ezt az 1-es pontot is csak azért veszem külön, mert majd A_11-gyel akarok szorozni.)

2. Most inkább azt tegyük fel, hogy B_11 = 0. Ez az 1-es ponttal szimmetrikus.

3. Most azt tegyük fel, hogy A_11 != 0 és B_11 != 0. Ekkor az első egyenletet szorozd meg B_11-gyel, a másodikat pedig A_11-gyel. Így mindkettő végén A_11 * B_11 * x * y fog állni. Az egyikből vond ki a másikat, és kapsz eegy lineáris összefüggést x és y között, amit az eredeti két egyenlet akármelyikébe behelyettesíthetsz, és egy egyváltozós másodfokú egyenletet kapsz.

Figyelj arra, hogy ne ossz nullával, ne szorozz nullával, és hogy a másodfokú egyenletnek lehet 0, 1, 2 (valós) megoldása. Szerintem jó sok külön eseted lesz.

Ha matematikailag megvan a levezetés, akkor elkezdhetsz azon gondolkozni, hogy lebegőpontos ábrázolással milyen sorrendben számolj, hogy a 0-kat "jól" zárd ki, és egyáltalán, meg tudd becsülni és minimalizálni tudd a hibát. (Ne felejtsük el, hogy lebegőpontos ábrázolásnál általában véve nem érvényes az az asszociativitás és disztributivitás, amit a matematikában az alapműveleteknél "megszoktunk".)

A lebegőpontos aritmetikát numerikus analízisben alkalmazott közelítésekre találták ki. Ezért épeszű C programozó addig nem nyúl a lebegőpontos típusokhoz és függvényekhez, amíg nem abszolút elkerülhetetlen.

http://hal.archives-ouvertes.fr/hal-00128124
http://www.lahey.com/float.htm
http://docs.sun.com/source/806-3568/ncg_goldberg.html
http://en.wikipedia.org/wiki/Floating_point

Igen, lebegőpontos műveleteknél figyelni kell a pontosság(haha) adta hibákra. Meg egyenlőségvizsgálatnál az epszilon eltérést is bele kéne venni. Sok, emiatt megbukott numerikus matematika házit láttam már :)

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

Koszi, vegul egy ehhez tok hasonlo valamit csinaltam; csak annak a 90%-a esetszetvalasztas lett. A gond az, hogy a bemeneti adathalmaz elegge nagymennyiesegu es "valtozatos", szemleletesen nehezen tudom elkepzelni hogy milyen, igy muszaj volt minden esetre felkeszulni es/vagy a szamitasok meggyorsitasa vegett az interpolacio szempontjabol trivialis eseteket gyorsan kizarni..

A.