c# Gaussova eliminační metoda

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

c# Gaussova eliminační metoda

Příspěvek od lelekdk »

chtěl bych si napsat program a vlastní řešení (výpočet) bych chtěl řešit pomocí Gaussovo eliminační metody. Programy na to jsou, takže to určitě jde. Spíše jestli to zvládne někdo, kdo se teprve v c# učí.

jako zadání jsem si našel středoškolskou analytiku, kde se měla najít kružnice daná 3 Body (tedy sestaví se 3 rovnice o třech neznámých). Tento příklad mi přijde ideální pro Gaussovo eliminační metodu.

na vstupu programu by se měly vyplnit souřadnice bodů: (celkem 6 hodnot – do txtBoxu)
K (x1 , y1)
L (x2 , y2)
M (x3 , y3)
Hodnoty X a Y se vyplní do 6 txtBoxu
následně se sestaví 3 rovnice o 3 neznámých
x2 + y2 + Ax + By + C = 0 (vzor obecné rovnice kružnice, z které budeme vycházet)
X a Y známe - z Bodů
A, B, C - neznámé, které hledáme

tyto neznámé bych chtěl vypsat do labelu

cvičné zadání
K (10,2), L(0,4), M(-2,-6)
x2 + y2 si převedeme na druhou stranu rovnice (takže nám zůstanou neznámé A B C na jedné straně = hodnota (číslo) na druhé straně)
pro ukázku zadání a výpočtu přikládám screen:
Obrázek
C = -32
B = 4
A = -8
Obecná rovnice pak vypadá takto:
x2 + y2 -8x + 4y -32 = 0
zdroj obráku:
http://maths.cz/clanky/gaussova-eliminacni-metoda.html
určitě to nebude moc náročné, spíše nemám jen potřebné znalosti.
Následně dopočítat souřadnice středu, poloměr atd. to už pak bude easy pokud budu znát A B C.

Ošetření podmínky, že body nesmí tvořit přímku, tak to beru jako samozřejmost.

díky za rady případně za postup/návod
c# Kozel zahradníkem
Maranov
Mírně pokročilý
Mírně pokročilý
Uživatelský avatar
Registrován: 21. črc 2006

Re: c# Gaussova eliminační metoda

Příspěvek od Maranov »

Krásný sloh, nejsem si jistý, na co se vlastně ptáš.

Gaussova eliminace na PC? Numerické řešení soustavy lineárních rovnic bych radši prováděl iteracemi. Třeba Gauss-Seidelovou metodou - aproximuješ výsledek, dokud nedosáhneš potřebné přesnosti.

Nevím, kde vidíš problém, prostě musíš k řádkům přičítat vhodné násobky jiných řádků, dokud nedostaneš trojúhelníkový tvar (i.e. musíš přičítat tak, aby jsi ho dostal), problém je, nemusí to vždy mít řešení. Měl bych pěkné skripta, ale nemůžu je šířit, možná menší citaci. Přijde ti to těžké, protože to je těžké. Není to vůbec vhodné pro PC.

Postupoval bych prostě jak "na papíře", odshora, vhodně přičteš 1 rovnici k druhé, druhou k třetí... až k poslední a pak v další iteraci znovu. Do toho vždy kontroluj, zda jsi nezískal nekonečně mnoho či žádné řešení, stejně jako potřebný trojúhelníkový tvar - jedno existující řešení.

Nebo možná vzít první rovnici a použít ji k eliminaci té dané neznámé ve všech řádcích níže. Stejně tak vzít druhou a použít ji k eliminaci všech neznámých č.2 níže. To by snad šlo udělat efektivně v jednom cyklu - dobrý postup, řekl bych. Tak to dělá i ten skript.
DESKTOP: C2D E8200 (pasivně); ATI HD 3870 (AC S1, 120 fan@5V); 4GB RAM; OCZ Vertex2 SSD 64GB; 320+320+250GB JBOD (odhlučněno); 2x FSC P19-2 (2056x1024)
MOBILE: Lenovo Thinkpad T420 4177 CTR, Crucial M4 SSD 128GB, 6GB RAM; FSC P19-2; Logitech G400
POCKET: Nokia Hulmia 800; Hitachi 500GB@Scythe Kamazo 2 (eSATA); Creative EP-630
AUDIO: Sennheiser HD 555 (foam mod), NuForce Icon µDAC, FLAC, ReplayGain, f2k

"A Man's mortality is a compass that points his way in life."
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

Re: c# Gaussova eliminační metoda

Příspěvek od lelekdk »

ono spíše moc nevím jak to napsat v c#, protože na papíře udělám některé úkony mnohem snáze než to napsat obecně v c#, tedy říct aplikaci vezmi tohle a udělej s tím tohle.

nad srovnávací metodou jsem přemýšlel, protože v konečném zadání budu mít pouze 3 rovnice o třech neznámých (gaussova metoda s úpravou na trojúhelníkový tvar by pak měla fungovat na x rovnic což zase akutně nepotřebuji - jen mi to příjde jako jednoduší, protože ji používám poměrně často na podobné problemy). Ta srovnávací metoda je asi něco jiného než jsi asi myslel ty. to co popisuješ, to bys mi mohl poradit jak by vypadal ten cyklus?
c# Kozel zahradníkem
Maranov
Mírně pokročilý
Mírně pokročilý
Uživatelský avatar
Registrován: 21. črc 2006

Re: c# Gaussova eliminační metoda

Příspěvek od Maranov »

Co je dobré na papíře, nemusí být dobré v počítači. Většinou je to naopak.

Jestli budeš mít jen 3 rovnice, tak se na to normálně vykašli a použij Sarrusovo pravidlo. Získáš relativně jednoduchý výraz a vypočítáš determinant nerozšířené matice (bez pravých stran).

Pak aplikuješ Cramerovo pravidlo - zjistíš vždy determinant matice s nahrazeným jistým sloupcem sloupcem pravých stran a dopočítáš neznámou.

Napadá mě řešit to třeba vytvořením funkce, která z matice (double[][]) navrátí determinant (double ZískejDeterminant(double[][] matice)), pomocí Sarrusova pravidla, ignorujíc sloupec navíc (pravé strany). Můžeš pak prohodit sloupec s neznámou a sloupec pravých stran a zase zavolat funkci a získat tak onen "det Ai", následně to vrátit zpět a prohodit další. Vydělením původním determinantem, bez prohozených sloupců získáš vždy potřebnou neznámou.
DESKTOP: C2D E8200 (pasivně); ATI HD 3870 (AC S1, 120 fan@5V); 4GB RAM; OCZ Vertex2 SSD 64GB; 320+320+250GB JBOD (odhlučněno); 2x FSC P19-2 (2056x1024)
MOBILE: Lenovo Thinkpad T420 4177 CTR, Crucial M4 SSD 128GB, 6GB RAM; FSC P19-2; Logitech G400
POCKET: Nokia Hulmia 800; Hitachi 500GB@Scythe Kamazo 2 (eSATA); Creative EP-630
AUDIO: Sennheiser HD 555 (foam mod), NuForce Icon µDAC, FLAC, ReplayGain, f2k

"A Man's mortality is a compass that points his way in life."
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

Re: c# Gaussova eliminační metoda

Příspěvek od lelekdk »

díky za pomoc, už mi to počítá tak jak to má počítat. Následný zápis byl pak poměrně jednoduchý.
c# Kozel zahradníkem
Odpovědět

Zpět na „Programování a web“