Matematické Fórum

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

#1 19. 05. 2011 11:35

tialk
Zelenáč
Příspěvky: 10
Reputace:   
 

Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

Zdravím, potřeboval bych poradit jak naprogramovat v Matlabu metodu sítí pro rovnici http://www.sdilej.eu/pics/1c5ee77e4c81ba386ba35b93e9daef03.JPG krok h= 0,1 na intervalu <-1;1> s okrajovými podmínkami y(-1)=0 a y(1)=3

Offline

  • (téma jako vyřešené označil(a) tialk)

#2 19. 05. 2011 12:03

FliegenderZirkus
Příspěvky: 544
Škola: RWTH Aachen
Reputace:   25 
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

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

 

#3 19. 05. 2011 14:53

tialk
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

Problém je v programování. Nahrazení derivací diferencemi podle mě vypadá takto http://www.sdilej.eu/pics/522a5601d075b6ef955fa440721bb4b4.JPG ale jak to dostat do Matlabu aby mi to vyřešilo ty rovnice nevím

Offline

 

#4 19. 05. 2011 15:50

FliegenderZirkus
Příspěvky: 544
Škola: RWTH Aachen
Reputace:   25 
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

Potřebujeme tu soustavu zapsat maticově: Ay=b. Sloupcový vektor neznámých y má 19 prvků: $y_1,y_2,\ldots,y_{19}$. Z okrajových podmínek známe $y_0=0$ a $y_{20}=3$. 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

Code:

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

 

#5 19. 05. 2011 17:09 — Editoval FliegenderZirkus (23. 05. 2011 20:44)

FliegenderZirkus
Příspěvky: 544
Škola: RWTH Aachen
Reputace:   25 
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

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:


Matice y je (19x1) a obsahuje řešení. Cykly for jsem psal pro přehlednost zvlášť. Levá okrajová podmínka je nula, a protože je v součtu, není ji potřeba ošetřovat. Pravá tam být musí. Tady je obrázek:
http://www.sdilej.eu/pics/04e81914b4c4540cc28188528f31b304.png
EDIT: Osa x směruje doprava, osa y nahoru.

Offline

 

#6 21. 05. 2011 14:14 — Editoval tialk (21. 05. 2011 14:43)

tialk
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

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

 

#7 23. 05. 2011 09:30

tialk
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

mám ještě jeden dotaz. proč mi Matlab nevykreslí stejný graf když použiju výše napsaný kód?

Offline

 

#8 23. 05. 2011 10:02

FliegenderZirkus
Příspěvky: 544
Škola: RWTH Aachen
Reputace:   25 
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

↑ 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:
$-y_{n+1}+\left( 2+x_n^2 h^2 \right) y_n -y_{n-1}=-x_n h^2$
Dosadíme n=1:
$-y_2 + (2+(-0,9)^2 \cdot 0,1^2)y_1 - y_0 = -(-0,9) \cdot 0,1^2$
Tady jsme použili to, že $x_n = -1+hn$, to je snad jasné. Dosadíme tam $y_0=0$ (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 $y_{n-1}$ a u $y_{n+1}$ 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

 

#9 23. 05. 2011 19:43

tialk
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

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 http://www.sdilej.eu/pics/e1603d8616c5ed5088ceefa913b6b7e3.JPG úpravou dostanu http://www.sdilej.eu/pics/cbd74877dbb228f82b58911e2cf8fe0b.JPG . Pokud budu za 'n' dosazovat postupně 1,2,3.....získám hledanou matici A? http://www.sdilej.eu/pics/be225b574815f3f52c5698e7e1cc437d.JPG ??? Ty koeficienty -1 jsi získal z http://www.sdilej.eu/pics/3e6bef7d8e208b6c7468719306e3ea3d.JPG ?

Ještě k tomu kódu: 2+(-1+k*h)^2*(h^2) vychází z http://www.sdilej.eu/pics/1868e664b04191e8eb993bd5824d46b7.JPG kde http://www.sdilej.eu/pics/e5f96a6441464a57ce790ea2eec15472.JPG je (-1+k*h)^2 . b(k)=-1*(1+k*h)*h^2 vychází z http://www.sdilej.eu/pics/7862ec72181f6d4e7f47906cdf33ab64.JPG 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

 

#10 23. 05. 2011 20:42 — Editoval FliegenderZirkus (23. 05. 2011 23:11)

FliegenderZirkus
Příspěvky: 544
Škola: RWTH Aachen
Reputace:   25 
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

Pozor, ta matice A nebude mít na diagonále pořád stejné prvky:

$\begin{bmatrix}
 2+x_1^2h^2 & -1& 0 & 0 &\cdots \\
 -1& 2+x_2^2 h^2& -1& 0 &  \\
 0 & -1 & 2+x_3^2 h^2 & -1 \\
\vdots & & & & \ddots
\end{bmatrix}$
=
$\begin{bmatrix}
 2+(-1+1\cdot 0,1)^2\cdot (0,1)^2 & -1& 0 & 0 &\cdots \\
 -1& 2+(-1+2\cdot 0,1)^2 \cdot (0,1)^2& -1& 0 &  \\
 0 & -1 & 2+(-1+3\cdot 0,1)^2 \cdot (0,1)^2 & -1 \\
\vdots & & & & \ddots
\end{bmatrix}$

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 $y_0$ a $y_{20}$ 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 $y_n$. V té obecné rovnici máme u $y_{n-1}$ a $y_{n+1}$ 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 $y_{n-1}$ resp. $y_{n+1}$ 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

 

#11 23. 05. 2011 23:04

tialk
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

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 http://www.sdilej.eu/pics/062ea56f3206e87104188ed4dbfcefa0.JPG tu okrajovou podmínku y(1)=3 dosazuji za y20 nebo y19

To je způsobeno tím, že ... $y_{19}$ 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) http://www.sdilej.eu/pics/4772e97036bd9670033ca662002840f3.JPG a dostanu přesně to co máš v kódu.

Offline

 

#12 23. 05. 2011 23:14

FliegenderZirkus
Příspěvky: 544
Škola: RWTH Aachen
Reputace:   25 
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

Máš pravdu, měl jsem tam překlep, $y_{19}$ je neznámá, $y_{20}$ je konstanta ( =3). S tvojí poslední rovnicí souhlasím.

Offline

 

#13 25. 05. 2011 10:34

tialk
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Okrajová úloha pro obyčejné dif. rovnice-metoda sítí

děkuji za pomoc s tímto tématem

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson