Diskuze: Pythagorova Věta: pochopení odmocniny předpony C
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


DarkCoder:14.1.2024 17:30
Máš v tom trochu zmatek.
- Jedná se o Pythagorovu větu
- Žádná předpona ale přepona
- Kratší strany se nazývají odvěsny
- Žádné match nepotřebuješ
- Pro výpočet délky přepony nepotřebuješ počítat obsah
- Obsah pravoúhlého trojúhelníku by se počítal (a*b)/2
- Pythagorova věta zni: Obsah čtverců nad přeponou pravouhleho trojúhelníku se rovná součtu obsahu čtverců nad oběma odvesnami. Tedy c2 = a2 + b2
- Pochybuji, že by se tato formulace nikde na stránkách s výukou matematiky nevyskytovala.
- Pochybuji, že výpočet odmocniny by učitelé řešili odhadem
- Pythagorova věta je natolik praktická věc že je dobré ji umět i dlouho že školy.
Z bodu číslo 7 si odvoď jak se vypočítá přepona c.
Helwa Surinen:14.1.2024 18:46
Asi jsem to napsal moc krkolomě. Pythagorova věta obsah ale potřebuje, na něm je to postavený. Zajímá mě jak by matematicky měl vypadat vzorec pro výpočet druhé odmocniny. A to Ti pedagogové neřeší. Nemyslím ten zvláštní znak pro odmocninu, ale - napíšu blbost: a + b = c. Takovej vzor myslím. Tento je špatně, samozřejmě. Jinak vím, že vzorec c2 = a2 + b2 je pythagorova věta, ale na to se neptám. Obsah pravouhleho trojuhelníku, tady Tě nechápu, to s tím vůbec nesouvisí. Já počítám obsah čtverce a z něho odmocninu pro uhlopříčku, jak to říká pyth. věta. Jinak jsem ze školy opravdu dlouho asi 35 let, tak se nemohu pamatovat všechno.
Krásnej článek, jak vypočítat odmocninu ručně je tady: Jak vypočítat odmocninu bez kalkulačky . I si to částečně pamatuji ze školy. Ale pořád mi to neodpovídá na otázku. Jak programátoři různých jazyků vytvořili metodu, v tomto případě Match.sqrt. Jinými slovy, jak přišli na nějaký vzorec, podle kterého to počítají. Ať už v javě, nebo i v jiných jazycích?
DarkCoder:14.1.2024 19:04
Ano, z definice Pythagorovy věty se používají obsahy které vzniknou nad přeponou a odvěsnami. Je mezi nimi vztah který jsem popsal v bodě 7. Jinak obsahy nemají žádný praktický význam.
Odmocňování v matematice je částečně inverzní operací k umocňování. **Druhá odmocnina z čísla x je takové nezáporné číslo a, pro které platí a2 = x.
Počítat obsah čtverce nad přeponou pravoúhlého trojúhelníku vůbec nemusíš, nemá to praktický význam. Jediný smysl kdy to má je pokud chceš zjistit délku jedné odvěsny, pokud znáš délku druhé odvěsny a délku přepony.
DarkCoder:14.1.2024 19:08
Jak vypočítat druhou odmocninu pomocí metody opakovaného půlení
intervalu jsem psal v diskuzi zde (psáno v C):
Druhá
odmocnina
(a + b) / 2.0? To nemůže přece platit?
DarkCoder:14.1.2024 19:21
Vytváření funkcí pro výpočet odmocnin, jako je Math.sqrt v jazyce Java, obvykle vychází z matematických principů, jako je například Newtonova metoda pro výpočet odhadu odmocniny. Newtonova metoda je iterativní numerická metoda, která konverguje k řešení rovnice. Obecně se algoritmy pro výpočet odmocniny snaží aproximovat hodnotu odmocniny pomocí opakovaných kroků, které postupně konvergují k přesnějším odhadům.
Zde je příklad jednoduché implementace v Javě:
public class Main {
public static void main(String[] args) {
double x = 16.0;
double epsilon = 0.0001;
double result = squareRoot(x, epsilon);
System.out.println("Odmocnina z " + x + " je přibližně: " + result);
}
public static double squareRoot(double x, double epsilon) {
double guess = x / 2;
while (Math.abs(guess * guess - x) > epsilon) {
guess = (guess + x / guess) / 2;
}
return guess;
}
}
DarkCoder:14.1.2024 19:26
(a + b) / 2.0? To nemůže přece platit?
Však to také není konečný výsledek ale počáteční nastavení středu intervalu.. A v cyklu se pak mění krajní meze a i nastavuje nová pozice středu.
Dneska to vzdávám. PS: už mi to nemyslí, jsem od půlčtvrtý na nohou. Napřed projdu nějakou výuku, a pak se k tomuto tématu vrátím. Já Ti vůbec nerozumím, co píšeš. jen bych řekl, ta metoda přibližného odhadu, kterou jsi poskytl je na mě už složitej skript, i když ji nějak intuitivně chápu. Ale nedokáži si z ní odvodit laicky, jak bych na papíru vypočítal odmocninu. Potřebuji si zopakovat matematiku, scriptem mi to nemůžeš vysvětlit. Ale bylo to fajn diskuse. usmívá se Zjistil jsem, i když to tak nevypadá, nejsem zas tak blbej po těch letech.
DarkCoder:14.1.2024 19:42
Analyzuj si na papíru metodu opakovaného půlení intervalu. Z té pochopíš jak to funguje..
Usínal jsem s odmocňováním v hlavě usmál se. Ale no posuď sám, viz komenty ve Tvém příkladu:
public class NewtonovaMetoda {
public static void main(String[] args) {
double x = 10.0; // číslo, které odmocňujeme
double epsilon = 0.0001; // koeficient odchylky, nula by měla dát přesný výsledek
// ale ne u čísel, kde není jasný celý výsledek. Např. 9 ano, 10 ne. Proto se domnívám
// koeficient epsilon musí mít nějakou hodnotu, aby vznikl přibližný výsledek
double result = squareRoot(x, epsilon);
System.out.println("Odmocnina z " + x + " je přibližně: " + result);
}
public static double squareRoot(double x, double epsilon) {
double guess = x / 2; // guess -> z angl. odhad vydělíme dvěma
while (Math.abs(guess * guess - x) > epsilon) { // opakovací cyklus
// Metoda abs() vrátí absolutní hodnotu čísla
guess = (guess + x / guess) / 2; //
}
return guess;
}
}
Tak, vyzkoušel jsem si tři různé způsoby odmocnění čísla 10. První
tímto Newtonovým půlením a výsledek je při koeficientu epsilon 0.0001:
3.1622776604441363.
Druhý pomocí metody Match.sqrt: 3.1622776601683795.
A třetí pomocí windows kalkulačky, což je: 3,162277660168379
Všimněme si jemných rozdílů. Každý způsob domnívám se, používá
pro výpočet malinko jiný koeficient epsilon. A tím mi to vlastně též
odpovídá na můj původní dotaz. I když bys řekl, že to není použití
odhadu, přesto se ten odhad při půlení intervalu v podstatě používá.
Jinými slovy, nikdy nedocílíme u všech různých čísel přesnou odmocninu.
U jasných čísel typu 9 ano, pokud dosadím do epsilon nulu. Ale u čísel
typu 10 to už nebude fungovat. Proto tam musí být nějaký koeficient epsilon
s nějakou minimální hodnotou. Je to tak DarkCodere? Ale zajímavé je, když
použiji číslo 9, odmocniny se změní. Match.sqrt a kalkulačka vyhodí
výsledek 3 a Tvůj skript přibližný výsledek 3.000015360039322. Což mě
vedek myšlence, že Match.sqrt a windows kalkulačka mají v sobě varianty pro
čísla násobilky, která se dají dobře odmocnit (nevím, jak je pojmenovat
ajťácky).
Pak jsi na začátku psal, v bodě 4., že žádný Match nepotřebuji. Jak jsi
to myslel? Jde o to, nějak mám za ty roky v hlavě zakodováno, čím kratší
zápis skriptu, tím optimálnější a šetrnější pro chod počítače.
Když nepoužiji Match, tím bude script delší, obsáhlejší a zabere více
paměti. Přemýšlím správně?
V každém případě jsi mi velmi pomohl, půlení intervalem jsem asi pochopil
a celou otázku odmocnin asi také. Ale hlavně jsi mi ukázal jeden krásný
příklad, jak učit lidi. Sám jsem takto učil grafiku. Nedávat odpověď
přímo s výsledkem, ale studente, musíš se snažit a učit se a hlavně
hledat. To se mi líbí DarkCodere, dobrej přístup a palec nahoru.
DarkCoder:15.1.2024 12:36
Co si před spaním přečteš, to v hlavě zůstane.😀
Ano, že každý způsob používá odlišnou odchylku (epsilon), je jisté. Stanovení odchylky udává přesnost a čas potřebný k dosažení dané přesnosti. Někdy je třeba preciznost, někdy rychlost. Programátor si pak může zvolit to co uzná za vhodné. Určitý odhad se používá. Když zvolíš vhodný interval, bude výpočet trvat kratší dobu, ale také se nemusíš dopídit výsledku. Je tedy důležité jaký způsob se zvolí. Newtonova metoda konverguje rychleji ale může selhat. Naproti tomu bisekční metoda je robustnější, ale konerguje k výsledku pomaleji. Nikdy se nenastavuje epsilon na 0 neboť by pak výpočet nefungoval napříč pozitivními reálnými čísly.
Přistroje mají nějakou přesnost, třeba to že se tam vejde 12 cifer. Proto epsilon je nastaven tak aby se to počítalo pro tuto šíři. Pokud je odlišnost až za velikostí displeje, může se zobrazit jako celé číslo, ikdyž tomu tak ve skutečnosti není.
Bod 4, tím jsem měl na mysli že není match ale Math. Nejspíš u tebe došlo k automatické korekci textu. Jinak integrované matematické funkce můžeš určitě používat, jsou optimalizované.
To mě těší že jsem Ti pomohl a porozuměl si jak to asi tak funguje. Klidně pak označ příspěvek jako řešení tvého dotazu. On celý proces vysvětlení je samozřejmě o dost složitější. To proč si tomu porozuměl bylo dáno i tvým zájmem. V úvodním dotazu jsem jen opravil správné formulace a nasměřoval správným směrem. Ale to nejdůležitější bylo drobné pojednání o problému a poté ukázkové příklady. Tedy rovnou řešení. Pokud chceme po někom, abychom viděli co se naučil, je třeba to dotyčnému správně předat a ujistit se že to chápe. Ne ho v tom nechat plavat ať si na to přijde sám. Proč ztrácet čas. Ne nadarmo mám dodatek o poučkách u svých příspěvků. Vím co je důležité aby to druhý pochopil a jak to podat. Věř tomu, že nejvíc Ti pomohl ty dva ukázkové příklady na odmocniny, kde pak na jeden jsem tě odkázal s papírovou analýzou. Bisekční metoda je velmi snadno pochopitelná a je na ni vidět to jak to funguje, jak výsledek konverguje víc a víc k požadované hodnotě. Díky za ocenění!
+20 Zkušeností
+2,50 Kč

Děkuji Ti. A dodám. Už včera večer jsem googlil podle Tvých rad témata newtonova metoda a opakované půlení intervalu. To co mi vyšlo by se dalo říct je asi vysokoškolské učivo matematiky. A také se to schodovalo částečně s výukou rozkladu odmocněného čísla středoškolské matematiky. Co mě vlastně pomohlo nejvíc je, že jsem se na to vyspal a pak nalezená učiva na tato témata (Ale vysvětlena neprogramátorsky, více laicky), které jsem vygooglil. Ano, nasměroval si mě správným směrem.
Také mi celá naše konverzace ukázala ještě jeden poznatek. Je dobrý si po sobě přečíst, co píšu, aby nedocházelo k omylu. Viz například překlepy predpona/prepona, match/Math a tak dále. A také slovník, jakým se zde mluví. Já jsem se snaži psát jako laik, což byl záměr. A Ty jsi zvolil odpovědi jako programátor. To je dobré vnímat. A dobré se tak učit rovnou myslet. Díky.
DarkCoder:15.1.2024 14:35
Máš zápal pro věc, snahu řešit a pochopit. To he dobře. Ano, na střední škole pro tohle není prostor, tam se učí jak to používat. Pokud se ale chceme posouvat, je třeba dané věci chápat více do hloubky. Únava a pocity dělají své, spánek může skutečně nakopnout.
Nejsem příznivcem matematických zápisů. Preferuji lidské vysvětlení do maximálního detailu a programátorské pro finální podobu. Jinak i já píšu překlepy a ne vždy si to co napíšu zpětně projdu. Tomu co jsi psal jsem porozuměl, přesto jsem napsal to aby si příliš neodbočil od toho čeho si chtěl dosáhnout.
Když něco tvořím, rovnou si představuji postupy a kód v hlavě. Detaily samozřejmě ladím průběžně.
A nyní trochu motivace. Pochopení jak funguje výpočet odmocniny dává možnost optimalizaci. Představ si v grafice výpočet vzdáleností mezi body. Bodu máme obrovské množství. Jak užitečné může být napsat si vlastní funkci s menší přesností, která postačuje, než použít vestavěnou funkci která je sice skvělá, ale pro nás je prioritou čas nikoli extrémní přesnost. Šance že ušetříme několik FPS je velká a takovéto ušetření procesoroveho času může být pro aplikaci zásadní.
Ano v blenderu, nebo illustratoru takovej plugin hodne pomuze 😀
Zobrazeno 16 zpráv z 16.