Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Výpočet lineárních rovnic - program?  (Přečteno 2469 krát)

honza95454

Výpočet lineárních rovnic - program?
« kdy: 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
Ubuntu 14.04, Unity

Vojtěch Trefný

  • Příspěvků: 9307
  • Don Quijote
Re:Výpočet lineárních rovnic - program?
« Odpověď #1 kdy: 29 Května 2013, 19:51:24 »
KAlgebra (součást balíku KDEEdu)

Pokročilejší (hodně) Octave nebo Maxima

RNA

  • Stálý člen
  • **
  • Příspěvků: 630
Re:Výpočet lineárních rovnic - program?
« Odpověď #2 kdy: 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?

RNA

  • Stálý člen
  • **
  • Příspěvků: 630
Re:Výpočet lineárních rovnic - program?
« Odpověď #3 kdy: 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.

« Poslední změna: 29 Května 2013, 20:13:10 od RNA »

honza95454

Re:Výpočet lineárních rovnic - program?
« Odpověď #4 kdy: 29 Května 2013, 20:16:21 »
Díky - jdu to vyzkoušet :-)
Ubuntu 14.04, Unity

Martin Šácha

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • ******
  • Příspěvků: 5153
Re:Výpočet lineárních rovnic - program?
« Odpověď #5 kdy: 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í ;)
Mint MATE 64bit / DuckDuckGo.com
Programátoři považují WYSIWYG za špatné u kódu i u žen. Programátor chce "dostat to, co žádá“ – kód tajemný, neodpouštějící, nebezpečný.

RNA

  • Stálý člen
  • **
  • Příspěvků: 630
Re:Výpočet lineárních rovnic - program?
« Odpověď #6 kdy: 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.


Martin Šácha

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • ******
  • Příspěvků: 5153
Re:Výpočet lineárních rovnic - program?
« Odpověď #7 kdy: 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 :)
« Poslední změna: 30 Května 2013, 21:18:39 od Martin Šácha »
Mint MATE 64bit / DuckDuckGo.com
Programátoři považují WYSIWYG za špatné u kódu i u žen. Programátor chce "dostat to, co žádá“ – kód tajemný, neodpouštějící, nebezpečný.

RNA

  • Stálý člen
  • **
  • Příspěvků: 630
Re:Výpočet lineárních rovnic - program?
« Odpověď #8 kdy: 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
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.

Martin Šácha

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • ******
  • Příspěvků: 5153
Re:Výpočet lineárních rovnic - program?
« Odpověď #9 kdy: 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á...
Mint MATE 64bit / DuckDuckGo.com
Programátoři považují WYSIWYG za špatné u kódu i u žen. Programátor chce "dostat to, co žádá“ – kód tajemný, neodpouštějící, nebezpečný.

Vojtěch Trefný

  • Příspěvků: 9307
  • Don Quijote
Re:Výpočet lineárních rovnic - program?
« Odpověď #10 kdy: 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ůř.

Martin Šácha

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • ******
  • Příspěvků: 5153
Re:Výpočet lineárních rovnic - program?
« Odpověď #11 kdy: 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ě ;)
Mint MATE 64bit / DuckDuckGo.com
Programátoři považují WYSIWYG za špatné u kódu i u žen. Programátor chce "dostat to, co žádá“ – kód tajemný, neodpouštějící, nebezpečný.

 

Provoz zaštiťuje spolek OpenAlt.