Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: honza95454 29 Května 2013, 19:22:22

Název: Výpočet lineárních rovnic - program?
Přispěvatel: honza95454 29 Května 2013, 19:22:22
Zdravím, sháním jakýsi program, který by dokázal vypočítat lineární rovnice, nevíte o něčem?

P.S. nevím, zda dotaz posílám do správné sekce, ale nic jiného mě nenapadlo.


Díky, Honza
Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: Vojtěch Trefný 29 Května 2013, 19:51:24
KAlgebra (součást balíku KDEEdu)

Pokročilejší (hodně) Octave (http://wiki.ubuntu.cz/programy/v%C4%9Bda_a_vzd%C4%9Bl%C3%A1n%C3%AD/octave) nebo Maxima (http://wiki.ubuntu.cz/programy/v%C4%9Bda_a_vzd%C4%9Bl%C3%A1n%C3%AD/maxima)
Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: RNA 29 Května 2013, 19:55:04
Můžu Vám zaslat podprogram (jazyk C), který řeší soustavu lineárních rovnic pomocí elementární matice rotací. Tato metoda sice vyžaduje  čtyřikrát více početních operací než Gaussova eliminace, dokonce obsahuje i výpočet odmocniny, ale naproti tomu je velmi přesná a je velmi odolná proti nízkým hodnotám determinantů vedlejších matic a zachovává přesnost i když je celá soustava špatně podmíněná tj. matice koeficientů má determinant blízký nule.

Mám to ale na noťasu v práci, takže teď se jdu připojit přes VPN, počkám půl věčnosti, až tam kdesi za horama naběhnou Wokna a pak si to stáhnu domů. OK?
Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: RNA 29 Května 2013, 20:09:09
Tak tady to je:
parametr a je obdélníková matice, tvořená čtvercovou maticí koeficientů a přidaný pravý sloupec jsou pravé strany.
Po proběhnutí výpočtu jsou kořeny v tom pravém sloupci.


Kód: [Vybrat]
void elmat (int n,real a[20][21])
 {
 int n1,i,j,k,ik,j1;
 real p,c,s,f1,f2;
 n1 = n--;
 for (i=0,j=0;(j-n)<0;++i,++j,k=0)
     for (k=0;(k+i-n)<=0;++k)
         {
         ik = i+k;
         f1 = a[i][j]; f2 = a[ik][j];
         if ((f1 * f2)!=0)
            {
            p = ((f1*f1) + (f2*f2));
            p = sqrt ((double)p);
            c = f1 / p; s = -f2 / p;
            }
         else
            {
            c = 1.0; s = 0.0;
            }
         for (j1=0;j1<=n1;++j1)
             {
             p = (c * a[i][j1]) - (a[ik][j1]);
             a[ik][j1] = (s * a[i][j1]) + (c * a[ik][j1]);
             a[i][j1] = p;
             }
         }

 for (i=n;i>=0;--i)
     {
     a[i][n1] = a[i][n1] / a[i][i];
     for (k=i-1;k>=0;--k)
         {
         a[k][n1] = a[k][n1] - (a[k][i] * a[i][n1]);
         }
     }
 }

Změňte si typ real na něco jako double.

Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: honza95454 29 Května 2013, 20:16:21
Díky - jdu to vyzkoušet :-)
Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: Martin Šácha 30 Května 2013, 14:36:13
Můžu Vám zaslat podprogram (jazyk C), který řeší soustavu lineárních rovnic pomocí elementární matice rotací. Tato metoda sice vyžaduje  čtyřikrát více početních operací než Gaussova eliminace, dokonce obsahuje i výpočet odmocniny, ale naproti tomu je velmi přesná a je velmi odolná proti nízkým hodnotám determinantů vedlejších matic a zachovává přesnost i když je celá soustava špatně podmíněná tj. matice koeficientů má determinant blízký nule.

Mám to ale na noťasu v práci, takže teď se jdu připojit přes VPN, počkám půl věčnosti, až tam kdesi za horama naběhnou Wokna a pak si to stáhnu domů. OK?

Gaussova eliminace je přece bezztrátová nezávisle na determinantech... a říct o numerické metodě že "je velmí přesná, ikdyž obsahuje výpočet odmocniny" je zajímavé tvrzení ;)
Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: RNA 30 Května 2013, 20:42:36
No, to jsme sice mimo téma, nicméně trvám na tom. U špatně podmíněných matic dochází k výpočtům, kde se odčítají dvě blízká čísla. (případně sčítají dvě poměrově rozdílná) To zhoršuje výslednou přesnost. Moje profesorka na numerickou matematiku by se mnou jistě souhlasila, koneckonců opsal jsem to před lety z její knížky - a přepsal z Fortranu do C.
Odmocnina přece není problém, ta se dá spočítat stejně přesně jako elementární operace.
Koneckonců zkuste si to někam zaimplementovat - já to používám v programu, který počítá aproximaci naměřené závislosti polynomem - a to produkuje dost ošklivé soustavy rovnic.
Nechci vést spor na vědecké bázi - jen jsem si ověřil, co tvrdili mí učitelé matematiky a podobně exaktních věd.  Na rozdíl od učitelů dějepisu a občanské nauky (o marxismu-leninismu nemluvě) mi totiž nelhali.
Ale to už jsem hodně odbočil, sorry.

Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: Martin Šácha 30 Května 2013, 21:15:37
Já myslím že jsme stále v tématu - zejména v maticích s parametrem bych si nikdy nedovolil odmocnovat... Diky lineárnimu výpočtu můžeš dopočitat podminky stability řešení (a tím elegantně získat všechna řešení), což s jakoukoliv nelinearitou ztratíš.

Ale nechci se hádat :)
Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: RNA 30 Května 2013, 22:15:13
Rozhodně bych to nenazval hádkou.
Mám to ocuď: http://books.google.cz/books/about/Praktick%C3%A9_pou%C5%BEit%C3%AD_Fortranu.html?id=E6T_tgAACAAJ (http://books.google.cz/books/about/Praktick%C3%A9_pou%C5%BEit%C3%AD_Fortranu.html?id=E6T_tgAACAAJ)
U obou těch pánů jsem skládal zkoušky z programování a podobných předmětů. Na té knížce spolupracovala paní Drozdová (zapomněl jsem titul), u které jsem dělal zkoušku z numerické matematiky.
Věřím, že měli důvody nepoužít Gaussovku a nebát se odmocniny. Už jen proto, že jsem ten program mnoho let s úspěchem používal v praxi. Jejich zdůvodnění mi připadá logické a nedělal jsem testy v extrémních podmínkách.

P.S.  Myslím, že původní tazatel je už z naší debaty koloušek.
Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: Martin Šácha 30 Května 2013, 23:53:35
Díky za tip na knížku, ten důkaz legálnosti (od)mocnění mě zajímá :) Abych nedlužil citaci: Jiří Pytlíček: Lineární algebra a geometrie...

Asi to uzavřem s tím, že každá metoda je na něco dobrá...
Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: Vojtěch Trefný 31 Května 2013, 09:57:15
Ono jakmile se do něčeho vloží desetinná čísla, tak to bude vždycky nepřesné a pak už je jen otázka, která metoda je na tom hůř.
Název: Re:Výpočet lineárních rovnic - program?
Přispěvatel: Martin Šácha 31 Května 2013, 14:37:46
Ono jakmile se do něčeho vloží desetinná čísla, tak to bude vždycky nepřesné a pak už je jen otázka, která metoda je na tom hůř.
Dokud to jsou čísla v Q, tak jsme v pohodě ;)