Soustava lineárních rovnic

mcer

  • *
  • 21
  • Co dělám špatně?
    • Zobrazit profil
    • E-mail
Soustava lineárních rovnic
« kdy: 13. 06. 2021, 17:27:44 »
Zdravím Vás,

jak bych si prosím mohl spočíst soustavu 2 lineárních rovnic o 2 neznámých v písmenkách, ne v číslech? Ručně je to zdlouhavé a hlavně chybové.

Dělám trochu v C, chci se podívat taky na alespoň základy Pascalu, čeká mě možná Matlab, či oktáva, ...

Díky


Re:Soustava lineárních rovnic
« Odpověď #1 kdy: 13. 06. 2021, 17:55:15 »
Nevím, co má přesně znamenat "v písmenkách, ne v číslech", ale soustava lineárních rovnic se dá řešit maticovým počtem a Cramerovým pravidlem obecně -- ty determinanty se dají vyjádřit vzorcem, pokud je to potřeba, případně pokud jsou hodnoty známy, tak to kdejaký program spočte (ten Matlab nebo Octave má na to dokonce knihovní funkce).

Viz třeba (zdroj: vyhledávač): http://artemis.osu.cz/mmmat/txt/la/mrs.htm

bmn

Re:Soustava lineárních rovnic
« Odpověď #2 kdy: 13. 06. 2021, 17:58:43 »
Soustava 2 lineárních rovnic o 2 neznámých není zdlouhavá. A pokud ručně chybová, tak jste na špatné škole.

Ale jinak https://www.wolframalpha.com/calculators/system-equation-calculator

mcer

  • *
  • 21
  • Co dělám špatně?
    • Zobrazit profil
    • E-mail
Soustava lineárních rovnic
« Odpověď #3 kdy: 13. 06. 2021, 18:37:24 »
Pravda, úplně jsem zapomněl na možnost eliminovat prvky v rovnicích pomocí matice. A to mi to ve škole šlo. Na ten determinant se taky podívám.
Díky, vrhnu se na to.

Jedna rovnice je třeba takováhle:
(x1 - x2)(y2 - y1)x + (y1 - y2)(y1 - y2)y + (x2 - x1)(x2 - x1)x1 + (y1 - y2)y1 = 0

a já chci vzorce pro výpočet x a y.

Mějte se.

Re:Soustava lineárních rovnic
« Odpověď #4 kdy: 13. 06. 2021, 19:05:44 »
Citace
jak bych si prosím mohl spočíst soustavu 2 lineárních rovnic o 2 neznámých v písmenkách

A jak soustavu počítáš teď? Běžně se u lineárních rovnic rozlišuje mezi soustavou s pravou soustavou a tzv. homogenní soustavou. Obecně se nepíše řešení lineárních soustav moc obratně. Skutečnost, že je soustava malá, na té neobratnosti nic nemění.

Příklad 1:
x + y = 0,
2x + 2y = 0.
To je legitimní soustava dvou rovnic. Jenže nejlepší řešení, jaké jsme s to napsat, je y = -x. Tedy geometricky dostaneme přímku.

Příklad 2:

x + 0y = 2,
x + 0y = 3.

Opět máme řešit soustavu dvou lineárních rovnic. Ale tentokrát dostaneme podmínku: y je libovolné a x musí být zároveň 2 a 3. Takže soustava nemá řešení.

Hodně záleží, kam bys chtěl studiem lineárních soustav o dvou rovnicích dospět. Pokud jde o geometrickou intuici, můžeš se na jednotlivé rovnice dívat jako na předpisy přímek (obecně tzv. nadrovin). S přibývajícím počtem rovnic musí platit, že na geometrický objekt představující řešení soustavy klademe více požadavků. To se efektivně přepíše jako průnik jednotlivých řešení. Pro soustavu dvou rovnic hledáme průsečík dvou přímek. Pro soustavu tří rovnic průsečík rovin atp. Pokud má rovnice nulovou pravou stranu, prochází přímka počátkem, v opačném případě je posunutá. V prvním příkladu jsme napsalo dvakrát rovnici téže přímky. Proto průsečík obou řešení dává opět přímku. Ve druhém případě naopak hledáme průsečík rovnoběžek, které nemají žádný společný bod.

Z pohledu (lineární) algebry je řešení soustavy lineárních rovnic dobře prozkoumáno. Samozřejmě se může stát, že máme řešit obrovskou soustavu, o niž mnoho nevíme. Pak je úloha težká. Ale teoretickou stránku charakterizovat umíme dobře. V prvním případě máme problém s hodností matice soustavy (to jsou dva pojmy). Hodnost matice se dá definovat například jako počet lineárně nezávislých řádků matice. Alternativně se dá definovat podle sloupců nebo třeba pomocí minorů. O řešitelnosti soustavy lineárních rovnic a tvaru řešení mluví tzv. Frobeniova věta. Pokud tě zajímá řešení soustav s nenulovou pravou stranou, dá se předchozí věta formulovat i tak, že determinant matice soustavy není nulový. Takže ve vlastní implementaci řešiče by bylo fajn před samotným výpočtem řešení zkontrolovat řešitelnost. Jenom poznamenám, že pokud by naopak měla pravá strana být nulová, bude muset být determinant matice soustavy nulový. Pořád se ale může stát, že řešením bude přímka (třeba jako v příkladu 1).

Dost dobře se v úvodu hodí pochopit Gaussovu eliminaci a operace, které můžeme na soustavě rovnic provádět, aniž bychom změnili její řešení. Takovým úpravám říkáme ekvivalentní a při ručním zápisu úprav na maticích používáme ~ (vlnku). Ekvivalenci doopravdy chápeme ve smyslu, že matice nalevo a napravo od vlnky představují matice soustav s týmž řešením. Postup řešení se v praxi docela často odvíjí ještě od dalších požadavků. Někdy se vyplatí zpracovat soustavu tak, že snadno nalezneme řešení pro nové pravé strany. V tom případě se může hodit znalost explicitní inverzní matice. Obecně je úloha hledání inverzí netriviální, ale pro matice 2x2 jsme s to napsat inverzi explicitně https://www.mathcentre.ac.uk/resources/uploaded/sigma-matrices7-2009-1.pdf. Tvar oné inverze docela přímočaře plyne z tvaru a vlastností tzv adjungované matice.

Někdy naopak chceme spočítat řešení pro více pravých stran naráz, ale jen jednou. Na počítači také u větších soustav často přecházíme k numerickému řešení. To je celá dost široká kapitola. Samozřejmě se do jednoho příspěvku nevejde celá teorie, ale snažil jsem se aspoň zmínit některé důležité pojmy. Pro hlubší pochopení by bylo potřeba projít nějaký ucelený text nebo kurs.

PS: Snad jsem nic zásadního nepřehlédl.


Re:Soustava lineárních rovnic
« Odpověď #5 kdy: 13. 06. 2021, 21:24:37 »
Třeba v Pythonu takovéhle věci zvládne solve_poly_system z knihovny sympy
https://docs.sympy.org/latest/modules/polys/basics.html#solving-equations

mcer

  • *
  • 21
  • Co dělám špatně?
    • Zobrazit profil
    • E-mail
Soustava lineárních rovnic
« Odpověď #6 kdy: 13. 06. 2021, 22:38:02 »
Ten python vypadá dobře. Vše vyzkouším, hned jak budu mít čas, tak pozítří.

Díky

Re:Soustava lineárních rovnic
« Odpověď #7 kdy: 13. 06. 2021, 22:46:58 »
Jedna rovnice je třeba takováhle:
(x1 - x2)(y2 - y1)x + (y1 - y2)(y1 - y2)y + (x2 - x1)(x2 - x1)x1 + (y1 - y2)y1 = 0
a já chci vzorce pro výpočet x a y.

tohle je ale jen jedna rovnice se dvema neznamymi x,y. predpokladam, ze x1, x2, y1, y2 jsou jen koeficienty,
takze jde vlastne o jednu rovnici

a*x + b*y = c

a = (x1 - x2)(y2 - y1)
b = (y1 - y2)(y1 - y2)
-c = (x2 - x1)(x2 - x1)x1 + (y1 - y2)y1


aby slo o soustavu dvou rovnic o dvou neznamych x,y tak je potreba jeste dalsi rovnice v soustave,
obecne takto: d*x + e*y = f

Re:Soustava lineárních rovnic
« Odpověď #8 kdy: 13. 06. 2021, 23:08:08 »
Pardon, začal jsem psát příspěvek dříve, než zazněl příklad. Přesně o situaci, kdy řešíme:
a*x + b*y = c,
d*x + e*y = f
jsem se snažil napsat. Patrně už z oněch dvou příkladů je znát, jak se kvalitativně může řešení lišit: jednou nevyjde nic, jednou můžeme dostat krásnou dvojici (x, y) a někdy dostaneme přímku nebo rovinu. Sympy bohužel nebude s to rozhodnou jen na základě parametrů a až f, jak řešení konstruovat. Pokud mu zadáte, třeba podmínku na nenulový determinant, mohl by s tím pohnout. Na druhou stranu je podobný případ dost jednoduchý, aby se s ním dalo vypořádat v ruce. Řešíme soustavu Ax = b, kde tučně píši vektory. Představme si b jako sloupeček obsahující (c, f) a x jako sloupeček se složkami (x, y). Když předpokládáme existenci právě jednoho řešení, můžeme se opřít o formulku: x = A^(-1)b, kde exponent "na mínus první" označuje maticovou inverzi. Návod na výpočet inverze jsem poslal (https://www.mathcentre.ac.uk/resources/uploaded/sigma-matrices7-2009-1.pdf), jde o rovnici z přílohy. Shodou okolností bychom mohli narazit na dělení nulou. Jenže ve jmenovateli je právě determinant matice soustavy (výše jsem psal A). Proto se dá nejprve ověřit nenulovost determinantu a pak dosadit do vzorce pro inverzi. Když náhodou vyjde determinant nulový, můžeme pořád za jistých podmínek najít řešení. Jen bude mít "písmenkově" jiný tvar.

Mají ony rovnice nějaký zajímavý původ? Možná by se daly nějak šikovně poskládat. Zkuste nám třeba poslat pár příkladů.

Re:Soustava lineárních rovnic
« Odpověď #9 kdy: 14. 06. 2021, 00:15:51 »
jeste se mi libi metoda SVD, ktera vede k cili, kdyz se neda spocitat inverzni matice, s SVD se muze povest ziskat pseudoinverzi.

Re:Soustava lineárních rovnic
« Odpověď #10 kdy: 14. 06. 2021, 00:48:46 »
Použití SVD už je docela specifické. Určitě se najdou místa, kde se SVD (nebo jiná faktorizace) velmi dobře hodí. Trochu potíž je počítat faktorizace analyticky (tak jsem interpretoval "písmenkově" ze zadání). Ono se totiž může docela snadno přihodit, že ta faktorizace nám proti obyčejné Gaussově eliminaci vytvoří složitější úkol.

Je ale možné, že tazateli stačí nějaké řešení. Pokud by stačilo nalézt aspoň jedno řešení, dá se postupovat různě. Třeba pomocí metody nejmenších čtverců dostaneme buď přímo řešení, nebo aspoň jeho dobrou aproximaci. Rozlišit, zda je řešení jen přibližné, nebo přesné už není těžké. Ale to doopravdy záleží na účelu. 

Re:Soustava lineárních rovnic
« Odpověď #11 kdy: 14. 06. 2021, 12:11:30 »
Vidím problém naprosto odlišně. Tak jak byl příklad definován(zadán) není řešitelný protože počet rovnic neodpovídá počtu proměnných.

x    proměnná 1
x1  proměnná 2
x2  proměnná 3
y    proměnná 4
y1  proměnná 5
y2  proměnná 6

není možné aplikovat dosazovací metodu ze základní školy pro triviální postupy či případně maticové numerické metody ( GEM, LUrozklad, inverzka, Choleskeho, atd.. )

Re:Soustava lineárních rovnic
« Odpověď #12 kdy: 14. 06. 2021, 13:11:34 »
Citace
Vidím problém naprosto odlišně.

V zadání docela explicitně zaznělo, že máme řešit soustavu lineárních rovnic a v dalších odpovědích jsme se dokonce dostali k jedné z rovnic k řešení. Ta je doopravdy lineární v x a y. Koeficienty sice závisí na nějakých parametrech (x1, ..., y2), ale to není problém. Parametrické soustavy se řešívají běžně. Pokud bychom měli nalézt obecné řešení té nelineární soustavy, šlo by o diametrálně jinou (a obecně o dost složitější) úlohu.

Kdybychom se dozvěděli něco bližšího o samotných rovnicích, dovedli bychom třeba přijít s konkrétnější odpovědí.

Re:Soustava lineárních rovnic
« Odpověď #13 kdy: 15. 06. 2021, 08:15:40 »

V zadání docela explicitně zaznělo, že máme řešit soustavu lineárních rovnic a v dalších odpovědích jsme se dokonce dostali k jedné z rovnic k řešení. Ta je doopravdy lineární v x a y. Koeficienty sice závisí na nějakých parametrech (x1, ..., y2), ale to není problém. Parametrické soustavy se řešívají běžně. Pokud bychom měli nalézt obecné řešení té nelineární soustavy, šlo by o diametrálně jinou (a obecně o dost složitější) úlohu.


Jestli se jedná o linearní/nelineární příp. vyšší řády, atd.. soustavu rovnic není podstatné. Podstatné je, že aby soustava byla triviálně řešitelná musí počet proměnných být rovno počtu rovnic. A o netriviálních řešeních pro jisté případy, kdy tato podmínka neplatí je zde ztráta času to probírat a navíc se nepovažuji už za kompetentního(před 15 lety jo, ale těď jsem těžce out).

Ať to zkrátíme, pokud tvrdíš že to je řešitelné tak jednotlivé proměnné vyjádři, příp. zveřejni postup řešení. Já tvrdím, že ne a tím to pro mě hasne.

Re:Soustava lineárních rovnic
« Odpověď #14 kdy: 15. 06. 2021, 09:25:55 »
Citace
Ať to zkrátíme, pokud tvrdíš že to je řešitelné tak jednotlivé proměnné vyjádři.
A jak chápeme proměnné? Podle zadání se zdá, že proměnné jsou x, y a x1, ..., y2 jsou parametry. Píše to sám autor:
(...)
Jedna rovnice je třeba takováhle:
(x1 - x2)(y2 - y1)x + (y1 - y2)(y1 - y2)y + (x2 - x1)(x2 - x1)x1 + (y1 - y2)y1 = 0
a já chci vzorce pro výpočet x a y.
Když si označíš koeficienty u x a y po řadě jako a, b, dostaneš se postupně ke tvaru řešení, o nemž píší. Asi jsem měl napsat přímočařeji, že a = (x1 - x2)(y2 - y1), b = (y1 - y2)(y1 - y2) atp. Každopádně řešení pak na těchto parametrech bude záviset a podle nastavení parametrů se může kvalitativně docela lišit. Proto jsem psal ty příklady.

Citace
Jestli se jedná o linearní/nelineární příp. vyšší řády, atd.. soustavu rovnic není podstatné.
Tento aspekt je velmi podstatný. Chápu správně, že uvažuješ "triviální = má jedno řešení"? Běžně se o triviálním řešení mluví, pokud je v nějakém smyslu celé nulové; obecně nás zajímají netriviální řešení. Třeba pro každou matici A o rozměrech n na m platí, že když jí vynásobíš sloupeček m nul, dostaneš zase sloupeček nul. Matici A můžeme chápat jako matici soustavy lineárních rovnic (to mapování se dá doopravdy provést jedna k jedné). Pak ale každou soustavu lineárních rovnic s nulovou pravou stranou řeší nulový vektor. Takové řešení obecně není moc zajímavé, a tak mu říkáme triviální, máme ho vždy a bez snažení. Autor spíš hledá nějaké netriviální řešení. To je ale jen terminologie.

Pokud se podíváme na počty řešení pro banální polynomiální rovnice, dostaneme se docela snadno k chování, které u lineárních rovnic nepozorujeme.

Uvažuj třeba rovnice:
x^2 = 1,
x^4 = 1.

Když si x vybereme jenom reálné, stejně máme vždy dvě řešení, a sice +/-1. Přitom máme jednu proměnnou a řešíme soustavu "dvou různých" rovnic. Když bude x komplexní, máme pořád dvě řešení. Tím se dotýkáme:
Citace
(...) aby soustava byla triviálně řešitelná musí počet proměnných být rovno počtu rovnic.


Nebo si představ reálnou rovnici: x^2 = -1. Ta řešení nemá. Kdybychom teď měli napsat parametrickou alternativu, dostali bychom:
x^2 = p. Taková rovnice bude mít reálné řešení jenom tehdy, bude-li p nezáporné. Když náhodou bude p kladné, dostaneme řešení rovnou dvě. A pro nulu máme samozřejmě jen jedno řešení. Výměna tělesa ("čísel") za komplexní dvojakost řešení nezachrání. Jen nám umožní odstranit podmínku na p.

A teď si představ rovnice:
sin(x) = 1/2 nebo x^5 + 2x^4 + 3x^3 + 4x^2 + x + 6 = 0. První rovnice má spočetně řešení a druhá 5. Paradoxně je ale analyticky "těžší" najít řešení té druhé. Obecně nelze najít pěkné analytické řešení pro polynomy stupňů 5 a vyšších.

V souhrnu: pokud řešíme parametrickou soustavu lineárních rovnic symbolicky, doopravdy symboly nepovažujeme za hledané proměnné, ale za parametry, na nichž řešení závisí. A nelineární soustavy jsou z povahy komplikovanější než ty lineární.