Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1

Problém je v matematice nebo v programování? Typický postup je:
1) Ověřit, že existuje jednoznačné řešení
2) Nahradit derivace diferencemi
3) Vygenerovat soustavu síťových rovnic (ta bude lineární)
4) Soustavu vyřešit (a případně zobrazit graf přibližného řešení)
Offline

Potřebujeme tu soustavu zapsat maticově: Ay=b. Sloupcový vektor neznámých y má 19 prvků:
. Z okrajových podmínek známe
a
. Jde tedy o to vygenerovat matici A (19x19) a pravou stranu b (19x1). Určitě by to šlo nějak elegantněji, ale já bych prostě nejdřív definoval
A = zeros(19,19);
a pak tu matici doplňoval. Ona totiž bude třídiagonální a navíc symetrická, takže to nebude tolik práce. Když si do té své obecné rovnice pro n dosadíš několik prvních čísel (n=1,2,3), tak uvidíš, že pod a nad diagonálou jsou všude minus jedničky. Ty tam v Matlabu dodáme nějakým cyklem. Pak se podíváš jak vznikají prvky na diagonále a zase nějakým cyklem od 1 do 19 je tam doplníš. Nakonec vytvoříme tu matici na pravé straně, kde je jen potřeba si dát pozor na to, že první a poslední prvek bude trochu odlišný od zbývajících, což je způsobeno tím, že právě těmito prvky se nám do úlohy dostávají okrajové podmínky.
Offline

Zkusil jsem si to napsat v tom Matlabu. V rozsáhlejších úlohách bychom soustavu řešili jako třídiagonální, ale takhle je to jedno. Navíc Matlab tím příkazem A\b nedělá obyčejnou eliminaci, ale jde na to chytře, takže s tim vystačíme i pro rozsáhlé soustavy. Kód:

Offline
díky moc, ale bohužel zjišťuju že nemám problém jen s programováním ale s celou problematikou metody sítí. snažil jsem se z toho kodu zjistit postup, ale nejspíš vůbec nerozumím algoritmu řešení té úlohy. mohl bys prosím pokud to není moc časově náročné naznačit jak by se počítaly první 2-3 kroky když se dosadí do rovnice (nevím co se za který člen dosazuje) a jak to korespoduje s Tvým řešením v Matlabu? předem děkuji
Offline

↑ tialk:
Promiň, nevšimnul jsem si toho předchozího příspěvku. Máš v podstatě dvě možnosti - pro koeficienty té soustavy (tj. pro jednotlivé prvky matice a pravé strany) existují vzorce, do kterých stačí dosadit. V těchto vzorcích vystupují koeficienty rovnice v tzv. samoadjungovaném tvaru. My to měli ulehčené v tom, že v tomto tvaru už zadání bylo. Ty vzorce najdeš např. tady na str. 12., jen je třeba dohledat, jak se ty jednotlivé koeficienty značí. Druhou (a lepší) možností je pracovat s rovnicí ↑ tialk:, kam prostě dosadíme za n=1,2,3,...kam až uznáš za potřebné, dokud nepoznáš, jak další výraz vzniká. Samozřejmě to není uplně korektní postup, ale dovede tě k těm samým rovnicím jako při použití vzorečků.
Nejdřív tu rovnici trochu upravíme:
Dosadíme n=1:
Tady jsme použili to, že
, to je snad jasné. Dosadíme tam
(levá okrajová podmínka) a máme první rovnici té soustavy (vyčíslení nechám na tobě). Zároveň už je vidět, že u
a u
je pořád stejný koeficient =-1. Zkus se nad tím zamyslet a kdyžtak napiš.
K tomu druhému dotazu - žádný kód pro vykreslení grafu jsem neposílal, je tu jen samotný výpočet. Teď jsem si všimnul, že nemám označené osy...to je ostuda!
Offline
díky moc, už je mi to čím dál tím víc jasnější. Jen pro kontrolu jestli jsem to pochopil správně: z rovnice úpravou dostanu
. Pokud budu za 'n' dosazovat postupně 1,2,3.....získám hledanou matici A?
??? Ty koeficienty -1 jsi získal z
?
Ještě k tomu kódu: 2+(-1+k*h)^2*(h^2) vychází z kde
je (-1+k*h)^2 . b(k)=-1*(1+k*h)*h^2 vychází z
nemělo by být i před tou druhou jedničkou '-' když je to od -1 do 1???? a pak ještě? není mi jasný jak tam funguje ta okrajová podmínka b(19)=b(19)+3 ??? díky moc za odpověď
Offline

Pozor, ta matice A nebude mít na diagonále pořád stejné prvky:
=
Tu první úpravu je dobré udělat pro obecně n-tou rovnici, ty jsi upravoval už pro dosazené n=1. Další problém je na pravé straně - jak jsem už psal výše, tak první a poslední řádek budou odlišné od ostatních. To je způsobeno tím, že
a
nejsou neznámé, jejich hodnoty známe z okrajových podmínek, a tedy v rovnici musejí být napravo ve vektoru pravých stran.
Ty koeficienty -1 jsi získal z...
Přesně tak. Představ si, že jsi na n-tém řádku matice A, kde tedy diagonální prvek násobí neznámou
. V té obecné rovnici máme u
a
minus jedničky, takže musejí být minus jedničky i u těch koeficientů v matici A, které násobí příslušné neznámé. A to jsou právě prvky na stejném n-tém řádku nalevo a napravo od prvku diagonálního. To samozřejmě neplatí pro první a poslední řádek, kde
resp.
nejsou neznámé.
nemělo by být i před tou druhou jedničkou '-' když je to od -1 do 1?
Já myslím, že tam je, jen jsi to špatně přepsal.
...jak tam funguje ta okrajová podmínka b(19)=b(19)+3?
Tak si do svojí obecné rovnice dosaď n=19.
Offline
stejné prvky na diagonále v matici A jsem přehlídl při kopírování vztahů.
nemělo by být i před tou druhou jedničkou '-' když je to od -1 do 1?
Já myslím, že tam je, jen jsi to špatně přepsal.
Pravda při zkoumání kódu když jsem si s tím hrál jsem to změnil a neopravil zpět, omlouvám se
Tak si do svojí obecné rovnice dosaď n=19.
dosadil jsem a dostal tu okrajovou podmínku y(1)=3 dosazuji za y20 nebo y19
To je způsobeno tím, že ...
nejsou neznámé
. já bych to dosadil za y20 protože pak to přesunu na druhou stranu rovnice tzn přičítám k b(19) a dostanu přesně to co máš v kódu.
Offline

Máš pravdu, měl jsem tam překlep,
je neznámá,
je konstanta ( =3). S tvojí poslední rovnicí souhlasím.
Offline
Stránky: 1