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 27. 05. 2011 20:23 — Editoval meron (02. 06. 2011 19:46)

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Maple - iterace

dobrý den, potřeboval bych do tohoto programu (Gauss-seidelova iterační metoda) zabudovat podmínku, aby se výpočet iterací ukončil, pokud již iterace spňují zadanou přesnost např. 0,0001. Jde o zápočtový projekt a neumím s tou přesností už týden pohnout. Vypadá to jednoduše, ale nedaří se mi tam tu podmínku zabudovat

http://forum.matweb.cz/upload3/img/2011-06/36775_gs002.jpg

Offline

 

#2 02. 06. 2011 19:48

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Re: Maple - iterace

původně jsem tady měl jen část kódu, ale asi to nestačilo, tak jsem tu dal celý program, tak jestli někdo pomůže...

Offline

 

#3 02. 06. 2011 20:12

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 920
Reputace:   63 
 

Re: Maple - iterace

Nemáš tam podmínku while nutnou k předčasnému  ukončení:
for proměnná in struktura while podmínka do příkazy end do
nebo si můžeš vybrat tuto:
for proměnná from odkud by krok to kam while podmínka do příkazy end do

Možná, že máš jinou variantu, ale while by tam mělo být.


LibreOffice Verze: 25.8.4.2, Maxima 5.49.0 (SBCL)

Offline

 

#4 02. 06. 2011 23:45 — Editoval meron (02. 06. 2011 23:46)

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Re: Maple - iterace

Moc jsem toho s tou podmínkou nevymyslel, ačkoliv se mi honí hlavou hodně myšlenek. Napadlo mě něco ve smyslu tohoto (viz rámeček v obrázku)-samozřejmě, že jen takhle to fungovat nebude. Prostě nevím jak odečíst složky dvou vektorů a následně je porovnat s tou přesností, ačkoliv jsem ten návod pro Maple ( na http://www.stud.fme.vutbr.cz) celý prošel (ne jenom dneska) tak nevím jak dál. Nečekám, že to za mě někdo naprogramuje, ale za jakýkoliv další krok kupředu budu rád.
Takže k té mojí základní myšlence:
http://forum.matweb.cz/upload3/img/2011-06/51103_gs003.jpg
nebo na to jdu úplně špatně?

Offline

 

#5 03. 06. 2011 00:56

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 920
Reputace:   63 
 

Re: Maple - iterace

Jdeš na to dobře, ale musíš myslet na to, že máš dvě smyčky v sobě vnořené.
Takže pokud není vnitřní smyčka ukončená, tak se vnější nedostane ke slovu, ale myslím, že to není tvůj případ (ta musí proběhnout kompletně).

Ještě je důležité porovnávat s absolutní hodnotou, to znamená, že

hodn:= abs( ... nějaký výpočet ... )

jinak by se mohlo stát, že výpočet by se mohl ukončit dříve, než bylo zamýšleno (hodn pokud by byla záporná, by byla menší než presnost).

Pokud vektor má 3 rozměry [x,y,z], pak jejich odchylku budeš porovnávat tak, že odečteš od sebe jednotlivé směry a jejich absolutní hodnoty sečteš. Tím zajistíš jejich shodu ve všech směrech.

vektor1: [x1,y1,z1]
vektor2: [x2,y2,z2]

Takže asi takto:

hodn:= abs(x1 - x2) + abs(y1 - y2) + abs(z1 - z2)

Maple neznám, takže se s tím budeš muset poprat sám. Ale takhle by to mělo fungovat.


LibreOffice Verze: 25.8.4.2, Maxima 5.49.0 (SBCL)

Offline

 

#6 03. 06. 2011 02:57

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Re: Maple - iterace

jenže potřebuju porovnat se zadanou přesností rozdíly po jednotlivých složkách (tedy abslotutní hodnoty rozdílu) takže nemělo by to vypadat asi takto? :

for prom1 from 1 by 1 to maxIt while presnost<hodn1 and presnost<hodn2 and presnost < hodn3 do

hodn1:= abs(x1 - x2);
hodn2:=abs(y1 - y2) ;
hodn3:=abs(z1 - z2);

    for prom2 ...do
    end do;

end do;

problém je, že taky nějak špičkově maple neovládám a začínám se do toho zamotávat

Offline

 

#7 03. 06. 2011 08:54

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 920
Reputace:   63 
 

Re: Maple - iterace

Přesně takto, ale s podmínkou or.
Kdyby si dal and, pak by se cyklus ukončí když jedna z podmínek přestane platit (splní nastavenou přesnost).
Ty potřebuješ, aby všechny 3 podmínky splnily zadání.

Ještě, jak na to koukám, by byl výhodnější cyklus until, než while, ale to asi Maple neumí.
Podmínka While se testuje nejdřív (před tělem cyklu), until se testuje až po provedení těla cyklu což by bylo výhodnější.
Ale můžeme to nechat jak si to napsal.
Jenom bych pro jistotu nastavil jednu z proměnných hodn (třeba hodn1), na hodnotu mimo nastavenou přesnost, aby se nestalo, že by se vnější cyklus ukončil dřív než nastane.


hodn1:=1;
for prom1 from 1 by 1 to maxIt while presnost<hodn1 or presnost<hodn2 or presnost < hodn3 do

hodn1:=abs(x1 - x2);
hodn2:=abs(y1 - y2);
hodn3:=abs(z1 - z2);

    for prom2 ...do
    end do;

end do;

Jinak obecně platí, pokud je krok 1 (by 1), tak se nemusí zadávat. Pak by to mohlo být takto:

for prom1 from 1 to maxIt while presnost<hodn1 or presnost<hodn2 or presnost < hodn3 do

ale raději to vyzkoušej, zda nebude Maple hlásit chybu. Jinak s tím by 1 je to asi jednoznačnější.


LibreOffice Verze: 25.8.4.2, Maxima 5.49.0 (SBCL)

Offline

 

#8 03. 06. 2011 15:14

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Re: Maple - iterace

zatím díky za cenné rady, uvidím, co s tím v Maplu vyvedu

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson