<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <id>https://www.yunseo.kim/cs/</id><title>Yunseo Kim's Study Notes</title><subtitle>Yunseo Kim's personal blog on mathematics, physics, and engineering, now expanding to business, AI agent ecosystems, software supply chains, and digital trust.</subtitle> <updated>2026-04-11T20:15:29+09:00</updated> <author> <name>Yunseo Kim</name> <uri>https://www.yunseo.kim/cs/</uri> </author><link rel="self" type="application/atom+xml" href="https://www.yunseo.kim/cs/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://www.yunseo.kim/" /><link rel="alternate" type="text/html" hreflang="ko" href="https://www.yunseo.kim/ko/" /><link rel="alternate" type="text/html" hreflang="ja" href="https://www.yunseo.kim/ja/" /><link rel="alternate" type="text/html" hreflang="zh-TW" href="https://www.yunseo.kim/zh-TW/" /><link rel="alternate" type="text/html" hreflang="es" href="https://www.yunseo.kim/es/" /><link rel="alternate" type="text/html" hreflang="pt-BR" href="https://www.yunseo.kim/pt-BR/" /><link rel="alternate" type="text/html" hreflang="fr" href="https://www.yunseo.kim/fr/" /><link rel="alternate" type="text/html" hreflang="de" href="https://www.yunseo.kim/de/" /><link rel="alternate" type="text/html" hreflang="pl" href="https://www.yunseo.kim/pl/" /><link rel="alternate" type="text/html" hreflang="cs" href="https://www.yunseo.kim/cs/" /><link rel="alternate" type="text/html" hreflang="sw" href="https://www.yunseo.kim/sw/" /><link rel="alternate" type="text/html" hreflang="am" href="https://www.yunseo.kim/am/" /> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 Yunseo Kim </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title xml:lang="cs">Poznámky ke korejskému překladu Kodexu chování Contributor Covenant 3.0</title><link href="https://www.yunseo.kim/cs/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/" rel="alternate" type="text/html" hreflang="am" /><published>2026-03-20T00:00:00+09:00</published> <updated>2026-03-22T23:34:27+09:00</updated> <id>https://www.yunseo.kim/cs/posts/notes-on-the-korean-translation-of-the-contributor-covenant-3.0-code-of-conduct/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Dev Culture" /> <summary xml:lang="cs">Při práci na korejském překladu Contributor Covenant 3.0, zveřejněného v červenci 12025, si zde zaznamenávám překladatelská rozhodnutí, důvody některých voleb i osobní dojmy.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Při práci na korejském překladu Contributor Covenant 3.0, zveřejněného v červenci 12025, si zde zaznamenávám překladatelská rozhodnutí, důvody některých voleb i osobní dojmy.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><blockquote class="prompt-info"><p>PR přidávající oficiální korejský překlad Kodexu chování Contributor Covenant 3.0: <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">feat(i18n): add Korean translation for Contributor Covenant 3.0 (#1590)</a></p></blockquote><h2 id="contributor-covenant">Contributor Covenant</h2><p><a href="https://www.contributor-covenant.org/">Contributor Covenant</a> poprvé sepsala a zveřejnila v roce 12014 <strong>Coraline Ada Ehmke</strong> a od roku 12021 jej spravuje a dále rozvíjí <strong>OES (Organization for Ethical Source)</strong> spolu se svými přispěvateli. Dnes jde o nejpoužívanější kodex chování pro digitální komunity na světě. Jeho cílem je výslovně pojmenovat implicitní hodnoty, které mohou komunity sdílet, a vytvářet tak komunitní kulturu, v níž se každý může cítit vítaný a v bezpečí.</p><p>V minulosti bylo ve vývojářských komunitách běžné, že se pod záminkou meritokracie přehlíželo hrubé chování či diskriminační výroky. Contributor Covenant sehrál důležitou roli v tom, že se vývojářské komunity začaly proměňovat směrem k lidštější kultuře, která je inkluzivní, staví na vzájemném respektu a klade důraz na konstruktivní zpětnou vazbu. Dnes tento závazek přijaly statisíce open-source projektů po celém světě, včetně Creative Commons, Linuxu, Applu, Mastodonu, Microsoftu, WordPressu či IBM.</p><h2 id="co-se-změnilo-ve-verzi-30-contributor-covenant">Co se změnilo ve verzi 3.0 Contributor Covenant</h2><p>OES zahájila práce v roce 12024 u příležitosti 10. výročí Contributor Covenant a po přibližně roce práce v červenci 12025 zveřejnila verzi 3.0. Oproti předchozí verzi 2.1 přináší zejména tyto změny.</p><ul><li>Referenční materiály:<ul><li><a href="https://ethicalsource.dev/blog/contributor-covenant-3/">https://ethicalsource.dev/blog/contributor-covenant-3/</a><li><a href="https://www.contributor-covenant.org/faq/">https://www.contributor-covenant.org/faq/</a></ul></ul><h3 id="rozšířená-flexibilita">Rozšířená flexibilita</h3><ul><li>Oproti předchozí verzi, která byla optimalizována hlavně pro open-source komunity, je nová verze navržena tak, aby byla použitelná i pro různé online i offline komunity mimo oblast softwarového vývoje.<ul><li>např. místo <strong>„správci projektu (Project Maintainers)”</strong> používá neutrálnější a inkluzivnější výraz <strong>„moderátoři komunity (Community Moderators)”</strong></ul><li>Odstraňuje idiomy zaměřené na americké prostředí a nahrazuje je jasnějšími formulacemi, kterým lépe porozumějí i mluvčí z jiných kulturních okruhů a které se snáze překládají.</ul><h3 id="posun-paradigmatu-od-retributivní-spravedlnosti-k-restorativní-spravedlnosti">Posun paradigmatu od retributivní spravedlnosti k restorativní spravedlnosti</h3><p>Jednou z největších změn ve verzi 3.0 Contributor Covenant je posun paradigmatu od <strong>retributivní spravedlnosti (Retributive Justice)</strong> k <strong>restorativní spravedlnosti (Restorative Justice)</strong>. Oddíl <strong>pokyny pro prosazování (enforcement guidelines)</strong>, který se dříve soustředil na kritéria postupného uplatňování sankcí, byl přepracován na oddíl <strong>řešení a náprava újmy (Addressing and Repairing Harm)</strong>.</p><ul><li>byly přejmenovány některé stupně reakce<li>vedle dosavadních položek týkajících se následků (Consequence) byly nově doplněny i pokyny k nápravě (Repair), takže text už nekončí u prvotní sankce vůči škůdci, ale zabývá se i tím, jak následně obnovit narušené vztahy mezi zúčastněnými, uzavřít konflikt a napravit pochybení<li>místo jednostranného důrazu na zásah a potrestání třetí stranou se text více posouvá směrem, který tam, kde je to možné, podporuje dobrovolnou sebereflexi, smíření a zlepšení a přemýšlí o tom, jak po incidentu znovu uzdravit komunitu</ul><h3 id="jasnější-pravidla">Jasnější pravidla</h3><ul><li>Oddíl <strong>standardy (Our Standards)</strong> byl přehledně rozdělen na dva oddíly: <strong>doporučované chování (Encouraged Behaviors)</strong> a <strong>omezované chování (Restricted Behaviors)</strong>, čímž se zlepšila čitelnost.<li>Zejména v oddílu <strong>omezované chování (Restricted Behaviors)</strong> se výslovně omezuje nejen samotné vykonání škodlivého jednání, ale i vyhrožování takovým jednáním či jeho podporování, což posiluje preventivní účinek.<blockquote><p>We agree to restrict the following behaviors in our community. Instances, threats, and promotion of these behaviors are violations of this Code of Conduct.</p></blockquote><li>Nově byl také zaveden pododdíl <strong>další omezení (Other Restrictions)</strong> pod oddílem <strong>omezované chování (Restricted Behaviors)</strong>, který doplňuje pravidla pro oblasti, jež dříve nebyly výslovně dostatečně upraveny: zavádějící identita (Misleading identity), neuvádění zdrojů (Failing to credit sources), propagační materiály (Promotional materials) a nezodpovědná komunikace (Irresponsible communication).<li>Na základě odpovědí z průzkumu mezi lidmi, kteří Contributor Covenant v komunitách skutečně přijali a provozují, bylo také výslovně zdůrazněno, že stupňovitý rámec prosazování (enforcement ladder) je jen základní vodítko a neomezuje právo správců komunity rozhodovat podle vlastního uvážení.<blockquote><p>This enforcement ladder is intended as a guideline. It does not limit the ability of Community Managers to use their discretion and judgment, in keeping with the best interests of our community.</p></blockquote></ul><h3 id="posílení-ustanovení-o-rovnosti-a-zákazu-diskriminace">Posílení ustanovení o rovnosti a zákazu diskriminace</h3><p>V úvodním oddílu <strong>závazek (Our Pledge)</strong> byla posílena ustanovení týkající se rovnosti a zákazu diskriminace: některé výrazy byly nahrazeny inkluzivnějšími formulacemi a výslovně byly doplněny i některé moderní hodnoty související s diverzitou.</p><ul><li>výrazy „tělesná velikost (body size)“ a „osobní vzhled (personal appearance)“ byly nahrazeny širším výrazem „fyzické charakteristiky (physical characteristics)“<li>„náboženství (religion)“ bylo nahrazeno širším výrazem „filozofie nebo náboženství (philosophy or religion)“<li>„národnost (nationality)“ byla nahrazena širším výrazem „národní nebo sociální původ (national or social origin)“<li>nově je výslovně uvedena „neurodiverzita (neurodiversity)“<li>nově je výslovně uveden i „jazyk (language)“, což více zohledňuje mluvčí, pro něž angličtina není mateřským jazykem<li>v celé pasáži byly upraveny formulace týkající se rovnosti pohlaví a genderové diverzity<blockquote><p><strong>v2.1</strong><br /> sex characteristics, gender identity and expression, or sexual identity and orientation</p><p><strong>v3.0</strong><br /> sex or gender, gender identity or expression, sexual orientation</p></blockquote></ul><h2 id="co-jsem-zvažoval-při-tomto-korejském-překladu">Co jsem zvažoval při tomto korejském překladu</h2><h3 id="obecné-překladatelské-úvahy">Obecné překladatelské úvahy</h3><h4 id="použití-zdvořilého-stylu">Použití zdvořilého stylu</h4><p>Při psaní závazku a kodexu chování v korejštině závisí volba mezi zdvořilým a prostým stylem na tom, jaké směřování text sleduje, jaká je kultura organizace a jaký postoj chce text vyjadřovat. Dříve převažoval prostý styl, který zdůrazňuje autoritu a pravidla, ale v poslední době se častěji objevuje i zdvořilý styl, aby vynikl horizontální a respektující charakter komunity.</p><table><thead><tr><th>Styl<th>Zdvořilý styl(~합니다, ~하겠습니다)<th>Prostý styl(~한다)<tbody><tr><td>Vyznění<td>vzájemný respekt,<br /> dobrovolný závazek, doporučení<td>rozhodnost, právní účinnost,<br /> objektivní pravidlo<tr><td>Organizační kultura<td>pružnější a horizontálnější kultura<td>relativně přísnější kultura<tr><td>Typické použití<td>kodex chování, etická deklarace<td>bezpečnostní závazek,<br /> pracovní smlouva,<br /> pravidla právních sankcí<tr><td>Psychologický účinek<td>„dodržujeme to společně“<br /> (dobrovolný souhlas)<td>„musí se to dodržovat“<br /> (silnější důraz na závaznost)</table><p>Z <a href="https://github.com/EthicalSource/contributor_covenant/pull/895#pullrequestreview-563210153">dřívější diskuse</a> je vidět, že už při překladu verze 2.0 do korejštiny se původně zvažoval zdvořilý styl, ale text byl nakonec <a href="https://github.com/EthicalSource/contributor_covenant/commit/3971299d81149b3fc0ce603a5dd26400509f090f">přepsán do prostého stylu</a>. Tuto dřívější debatu i její závěr respektuji, přesto jsem se tentokrát znovu rozhodl pro zdvořilý styl z těchto důvodů.</p><p>Kultura dnešních open-source komunit má v zásadě poměrně daleko k vynucování, tvrdosti a silně závaznému výkonu pravidel; spíše směřuje k vzájemnému respektu, dobrovolné účasti a přispívání. <a href="#posun-paradigmatu-od-retributivni-spravedlnosti-k-restorativni-spravedlnosti">Ve verzi Contributor Covenant 3.0 se tato filozofie obzvlášť silně odráží v celém textu</a>. S ohledem na klíčové hodnoty a filozofii, které chtěl originál v této aktualizaci vyjádřit, i na kulturu a trendy komunit jsem usoudil, že při převodu do korejštiny je vhodnější zdvořilý styl. Jako referenci jsem si vzal i příklady, jako jsou <a href="https://rust-kr.org/pages/code-of-conduct/">Korean Rust User Group</a>, <a href="https://pythonkr.github.io/pycon-code-of-conduct/ko/coc/a_intent_and_purpose.html">PyCon KR CoC</a> a <a href="https://kubernetes.io/ko/community/code-of-conduct/">korejská verze kodexu chování komunity Kubernetes</a>, které zdvořilý styl rovněž používají.</p><h4 id="vyhýbání-se-zbytečným-pasivním-formulacím">Vyhýbání se zbytečným pasivním formulacím</h4><p>Na rozdíl od angličtiny, která často používá trpný rod, korejština obecně dává přednost aktivním formulacím před pasivními. Pokud se pasivum z anglického originálu mechanicky převede i do korejštiny, vzniká text, který působí nepřirozeně „překladově“ a může být nevhodný i po gramatické stránce.</p><p>Ani v korejštině se pasivním formulacím nelze vyhnout úplně, ale pokud to nezkresluje význam, snažil jsem se i tam, kde je originál v pasivu, použít v korejském překladu pokud možno aktivní vyjádření.</p><p><strong>např.</strong></p><ul><li>“Encouraged Behaviors”: “장려<strong>되는</strong> 행동”(X), “장려<strong>하는</strong> 행동”(O)<li>“enforcement actions are carried out in private”: “집행 조치는 비공개로 진행<strong>된다</strong>“(X), “집행 조치는 비공개로 진행<strong>한다</strong>“(O)<li>“its own established enforcement process”: “자체적으로 확립<strong>된</strong> 집행 절차”(X), “자체적으로 확립<strong>한</strong> 집행 절차”(O)<li>“the following enforcement ladder may be used”: “다음의 단계적 집행 기준<strong>이 사용될</strong> 수 있습니다”(X), “다음의 단계적 집행 기준<strong>을 사용할</strong> 수 있습니다”(O)<li>“are provided at”: “에서 제공<strong>됩니다</strong>“(X), “에서 제공<strong>합니다</strong>“(O)</ul><h4 id="spíše-než-slovníkový-a-mechanický-překlad-slov-zohlednit-kontext-jejich-užití-v-textu">Spíše než slovníkový a mechanický překlad slov zohlednit kontext jejich užití v textu</h4><p>Protože jsou si angličtina a korejština jazykově poměrně vzdálené, samozřejmě mezi nimi neexistuje přesné přiřazení slova ke slovu v poměru jedna ku jedné. To platí i tehdy, když slovník uvádí „stejný význam“.</p><p>Například v následující pasáži bylo “intimate” podle kontextu použito ne ve významu “친밀한”, ale ve významu “성적인”.</p><blockquote><p><strong>Sexualization.</strong> Behaving in a way that would generally be considered inappropriately <u>intimate</u> in the context or purpose of the community.</p></blockquote><p>Také v následujícím příkladu by slovníkový překlad “process” jako “처리할” působil neobratně. V kontextu textu bylo vhodnější převést jej jako “추스를”.</p><blockquote><p>… give the community members involved time to <u>process</u> the incident.</p></blockquote><blockquote class="prompt-tip"><p>(<a href="https://stdict.korean.go.kr/">표준국어대사전</a> 표제어 중)</p><p><strong>추스르다「3」</strong>: 일이나 생각 따위를 수습하여 처리하다.</p></blockquote><p>Na druhé straně existují i přejatá slova, pro která není snadné najít odpovídající domácí výraz. Například v případě “community” by bylo možné použít domácí korejský výraz “공동체”, ale usoudil jsem, že mezi významovým odstínem slova “community” v angličtině a odstínem slova “공동체” v korejštině je poměrně znatelný rozdíl. Pokud to bylo možné, snažil jsem se přejatá slova převádět do domácí slovní zásoby, ale tam, kde hrozilo větší zkreslení významu či tónu originálu, jsem ponechal výraz jako “커뮤니티”.</p><p>S ohledem na tyto okolnosti jsem nechtěl dělat jen slovníkovou a mechanickou záměnu jednotlivých slov, ale vybírat takové korejské formulace, které jsou nejblíže významu a kontextu originálu.</p><h4 id="dodržování-dalších-korejských-jazykových-norem">Dodržování dalších korejských jazykových norem</h4><p>Snažil jsem se co nejpřesněji dodržovat korejské jazykové normy, jako jsou korejský pravopis a pravidla standardního jazyka.</p><h3 id="oddíl-서약our-pledge">Oddíl “서약(Our Pledge)”</h3><h4 id="podnadpis">Podnadpis</h4><p>Pokud bychom “Our Pledge” přeložili doslova, vzniklo by “우리의 맹세”, ale protože <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">stávající korejský překlad</a> už použil podobu “서약” a z hlediska přirozenosti textu je to podle mě plně přijatelné, ponechal jsem i tentokrát “서약”.</p><h4 id="překlad-termínu-caste">Překlad termínu “caste”</h4><p>Ve <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">stávajícím korejském překladu verze 2.1</a> bylo toto slovo přeloženo přímo jako “카스트 제도”. Protože slovo caste může v odborném významu označovat i <u>obecné, silně zafixované systémy stavovského pořádku v různých částech světa</u>, nejde nutně o vyloženě chybný překlad. Pokud však takové podrobné pozadí není čtenáři dáno, většina Korejců si pod výrazem “카스트 제도” v běžném jazyce představí především „hinduistický stavovský systém v Indii odvozovaný například z Manuova zákoníku“. S ohledem na kontext originálu jsem jej proto přeložil jako “계급”. Domnívám se, že zde je rozumné chápat “caste” nikoli jako pojem omezený na konkrétní stát (Indii) nebo náboženství (hinduismus), ale jako označení všech typů a forem stavovského uspořádání a tříd, které z něj vyplývají.</p><h4 id="použití-výrazu-성-místo-성별">Použití výrazu “성” místo “성별”</h4><blockquote><p>We are committed to fostering an environment that respects and promotes the dignity, rights, and contributions of all individuals, regardless of … sex or gender, gender identity or expression, sexual orientation … or other status.</p></blockquote><p>Když vezmeme v úvahu hodnoty a kontext, které originál chce vyjádřit, pak “sex”, “gender” a “sexual orientation” zde zjevně nemají znamenat rozlišování podle binárního dělení na muže a ženy. Proto jsem namísto výrazu “성별”, který tento binární význam nenápadně implikuje, použil slovo “성” a snažil se co nejvíce zachovat rozdíly, které v humanitních a společenských vědách nesou pojmy sex, gender a sexuality, a přeložil jsem je takto:</p><blockquote><p>… 생물학적 또는 사회적 성, 성 정체성 또는 성 표현, 성적 지향…</p></blockquote><h3 id="oddíly-장려하는-행동encouraged-behaviors-a-제한하는-행동restricted-behaviors">Oddíly “장려하는 행동(Encouraged Behaviors)” a “제한하는 행동(Restricted Behaviors)”</h3><h4 id="odstranění-dvojtečky-">Odstranění dvojtečky (<code class="language-plaintext highlighter-rouge">:</code>)</h4><blockquote><p>With these considerations in mind, we agree to behave mindfully toward each other and act in ways that center our shared values, including:</p><ol><li>Respecting the <strong>purpose of our community</strong>, our activities, and our ways of gathering.<li>Engaging <strong>kindly and honestly</strong> with others. …</ol></blockquote><p>V angličtině je běžné, že se po jedné uzavřené větě použije dvojtečka a následuje výčet příkladů, ale v současné korejské normě se dvojtečka používá hlavně v heslovitých strukturách, například po nadpisu před výčtem položek nebo před vysvětlením. Pokud tedy text není od začátku psán v heslovitém stylu, působí následující podoba velmi nepřirozeně a snadno budí dojem, že jde o hrubý strojový překlad nebo překlad narychlo udělaný pomocí LLM. Osobně to byla i jedna z věcí, která mi u <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">korejského překladu verze 2.1</a> dost vadila.</p><blockquote><p>이러한 점을 유념하며, 우리는 서로를 사려 깊게 대하고 우리가 공유하는 다음 가치를 중심으로 행동할 것에 동의합니다:</p><ol><li>우리 <strong>공동체의 목적</strong>, 활동 및 모임 방식을 존중합니다.<li><strong>친절하고 정직하게</strong> 다른 사람들과 소통합니다. …</ol></blockquote><p>Proto jsem místo mechanického převedení dvojtečky z originálu nahradil tato místa tečkou (<code class="language-plaintext highlighter-rouge">.</code>), aby text odpovídal korejskému úzu a působil přirozeněji.</p><h4 id="překlad-výrazu-that-would-generally-be-considered-inappropriately">Překlad výrazu “that would generally be considered inappropriately”</h4><p>Zde jsem “generally” nepřeložil doslovně jako “일반적으로”, ale s ohledem na kontext přirozeněji jako “대부분의 사람들에게”.</p><blockquote><p>…<u>대부분의 사람들이</u> 부적절하다고 간주할 만한…</p></blockquote><h3 id="překlad-výrazu-act-on">Překlad výrazu “act on”</h3><p>Zpočátku jsem zvažoval, zda “act on” jednoduše nepřeložit jako “이용하다”, ale v kontextu tato pasáž spíše zakazuje <u>veškeré jednání založené na osobních nebo soukromých údajích druhé osoby, bez ohledu na úmysl</u>. Překlad jako “이용하다” mi proto připadal významově příliš úzký, a zvolil jsem následující podobu:</p><blockquote><p><strong>비밀 침해.</strong> 타인의 신상 관련 정보 또는 개인적인 정보를 당사자의 허락 없이 공유하거나, 그 정보<u>를 바탕으로 행하는</u> 모든 행위.</p></blockquote><h3 id="oddíl-문제-신고reporting-an-issue">Oddíl “문제 신고(Reporting an Issue)”</h3><ul><li>“this Code of Conduct <strong>reinforces</strong> encouraged behaviors and norms that …”: přeloženo jako “본 행동 강령은 …는 권장 행동 방식과 규범을 <strong>증진합니다</strong>”<li>“in a timely manner”: přeloženo jako “적시에”<li>“while prioritizing safety and confidentiality”: přeloženo jako “안전과 비밀 유지를 우선시한다는 전제 하에”<li>“In order to <strong>honor</strong> these values”: přeloženo jako “이들 가치를 <strong>지키기</strong> 위해”<blockquote class="prompt-tip"><p>(<a href="https://www.oxfordlearnersdictionaries.com/">Oxford Learner’s Dictionaries</a> 표제어 중)</p><p><a href="https://www.oxfordlearnersdictionaries.com/definition/english/honor_2"><strong>honor</strong></a> <em>verb</em><br /> <u>keep promise</u> 3. <strong>honor something</strong> <em>(formal)</em> to do what you have agreed or promised to do</p></blockquote></ul><h3 id="oddíl-피해-대응-및-교정addressing-and-repairing-harm">Oddíl “피해 대응 및 교정(Addressing and Repairing Harm)”</h3><ul><li>“Addressing”: přeloženo jako “대응”<li>“Repairing”: přeloženo jako “교정”</ul><h4 id="překlad-event-consequence-repair">Překlad <code class="language-plaintext highlighter-rouge">Event:</code>, <code class="language-plaintext highlighter-rouge">Consequence:</code>, <code class="language-plaintext highlighter-rouge">Repair:</code></h4><p>Tohle byla část, nad níž jsem hodně váhal, protože do korejštiny se převáděla dost nešikovně. Kdyby se přeložily doslova jako “사건”, “결과”, “교정”, text by působil dost nepřirozeně.</p><p>Aby text zněl přirozeně a zároveň co nejvěrněji předal <a href="#posun-paradigmatu-od-retributivni-spravedlnosti-k-restorativni-spravedlnosti">filozofii originálu</a>, nakonec jsem po zralé úvaze zvolil následující řešení.</p><ul><li>“Event”: přeloženo jako “적용 상황”<li>“Consequence”: přeloženo jako “대응 조치”<li>“Repair”: zpočátku jsem zvažoval “회복 조치”, ale výraz “조치” v korejštině nese spíše tón zásahu prováděného druhou stranou než dobrovolné sebereflexe a zlepšení účastníka, a proto jsem jej zavrhl. Nakonec jsem zvolil “교정 노력”</ul><h4 id="překlad-výrazu-seeking-clarification-on-expectations">Překlad výrazu “seeking clarification on expectations”</h4><p>“expectations” by bylo možné doslovně přeložit jako “기대 사항” a význam by byl stále srozumitelný, ale pro plynulejší text jsem zvolil “준수 사항”.</p><blockquote class="prompt-tip"><p>(<a href="https://www.oxfordlearnersdictionaries.com/">Oxford Learner’s Dictionaries</a> 표제어 중)</p><p><a href="https://www.oxfordlearnersdictionaries.com/definition/english/expectation"><strong>expectation</strong></a> <em>noun</em><br /> 3. [countable, usually plural] a strong belief about the way something should happen or how somebody should behave</p></blockquote><p>Také “seeking clarification” by bylo možné převést jako “해명(clarification) 요구(seeking)”, ale v kontextu položek Repair se zde popisuje žádoucí následné chování člověka, který problém způsobil. Kdyby se tedy clarification a seeking přeložily zvlášť jako “해명” a “요구”, význam by vyzněl podivně. Zde jsem za nejvhodnější považoval výklad, podle něhož jde o <u>úsilí</u> (seeking) o <u>jasné ověření a pochopení</u> (clarification) <u>toho, co je třeba dodržovat</u> (expectations), aby člověk reflektoval své chování a stejnou chybu neopakoval.</p><blockquote class="prompt-tip"><p>(<a href="https://www.oxfordlearnersdictionaries.com/">Oxford Learner’s Dictionaries</a> 표제어 중)</p><p><a href="https://www.oxfordlearnersdictionaries.com/definition/english/seek"><strong>seek</strong></a> <em>verb</em><br /> 2. [transitive] to ask somebody for something; to try to obtain or achieve something</p><p><a href="https://www.oxfordlearnersdictionaries.com/definition/english/clarification"><strong>clarification</strong></a> <em>noun</em><br /> [uncountable, countable] (formal)<br /> the act or process of making something clearer or easier to understand</p><ul><li><em>I am <strong>seeking clarification of</strong> the regulations.</em></ul></blockquote><h4 id="překlad-výrazu-cooldown">Překlad výrazu “cooldown”</h4><p>Slovníkově může znamenat ochlazení, zklidnění po cvičení nebo uklidnění a zde byl podle kontextu nejblíže význam „uklidnit se“. Nejvíc odpovídá korejskému významu slova ve smyslu „머리 좀 식혀라.“</p><p>Kdyby se ale “time-limited cooldown period” přeložilo jako “한시적 진정 기간”, znělo by to trochu kostrbatě, a proto jsem v korejském překladu použil pro “cooldown period” výraz “자숙 기간”.</p><h4 id="překlad-výrazu-time-to-process-the-incident">Překlad výrazu “time to process the incident”</h4><p><a href="#spise-nez-slovnikovy-a-mechanicky-preklad-slov-zohlednit-kontext-jejich-uziti-v-textu">Jak už bylo uvedeno výše</a>, přeložil jsem jej jako “해당 일을 추스를 시간”.</p><h4 id="překlad-výrazů-suspension-a-ban">Překlad výrazů “suspension” a “ban”</h4><p>Ve <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">stávajícím korejském překladu verze 2.1</a> bylo “ban” přeloženo jako “제재”, ale “제재” je nadřazený pojem zahrnující všechna opatření, která lze vůči porušení přijmout, včetně nižších stupňů jako varování nebo dočasné omezení činnosti, takže jeho význam zůstává nejasný. Anglické “ban” má přitom poměrně jednoznačný význam zákazu či zastavení a výraz „trvalé zablokování (např. účtu)“ je v korejštině také zcela běžný a přirozený, takže jsem neviděl důvod se mu za každou cenu vyhýbat nějakým volnějším opisem.</p><p>Totéž platí pro “suspension”, které také jasně znamená „pozastavení“ či „dočasné zastavení“ a není nutné je zbytečně parafrázovat.</p><p>Proto jsem “Temporary Suspension” a “Permanent Ban” přeložil jako “일시적 정지” a “영구 정지”.</p><h4 id="překlad-věty-this-enforcement-ladder-is-intended-as-a-guideline">Překlad věty “This enforcement ladder is intended as a guideline.”</h4><p>Výraz “enforcement ladder” jsem přeložil jako “단계적 집행 기준”. Tato věta je navíc použita v kontextu, kde se zdůrazňuje, že výše popsaný stupňovitý rámec prosazování je pouze jednou z možných opor a že zůstává zachováno právo komunitních správců rozhodovat podle vlastního uvážení. Proto jsem neurčitý člen “a” promítl do korejštiny jako “하나의”. Ve výsledku jsem tuto část formuloval takto:</p><blockquote><p><u>이 단계적 집행 기준은 하나의 기준선으로 마련한 것입니다.</u> 이는 커뮤니티의 최선의 이익에 부합하는 커뮤니티 관리자의 재량권과 판단 권한을 제한하지 않습니다.</p></blockquote><h2 id="závěrem">Závěrem</h2><p>Mnoho dokumentů a projektů veřejně prospěšné povahy se překládá do různých jazyků díky dobrovolníkům a přispěvatelům. Bohužel v případě korejštiny jsem nejednou zažil, že překlad buď vůbec neexistoval, protože se nenašel žádný přispěvatel, anebo sice existoval, ale působil tak mechanicky a nepřirozeně, že jsem si i jako Korejec řekl: „To si raději přečtu anglicky,“ a přepnul se na anglickou verzi stránky.</p><p>Když jsem se tentokrát rozhodl přispět korejským překladem, chtěl jsem, aby výsledný text působil natolik přirozeně a kvalitně, že by čtenář neměl pocit cizorodosti ani tehdy, kdyby si myslel, že jej korejský autor napsal od začátku korejsky. Snažil jsem se pochopit a přenést filozofii a jemné kontextové odstíny originálu, zvlášť to, co se ve verzi 3.0 oproti 2.1 změnilo a z jakých důvodů se autoři rozhodli právě pro takové formulace.</p><p>Povaha přirozeného jazyka je taková, že překlad nefunguje jako nějaká matematická funkce, která by ze stejného vstupu vždy dávala tentýž výstup. Různí překladatelé vytvoří mírně odlišné překlady, a to není jen otázka jejich schopností, ale i důsledek toho, že překlad — a tím spíš psaní — z podstaty nemá jedinou pevně danou správnou odpověď. V poslední době používám AI jako pomocníka téměř u všeho a i tento blogový příspěvek je napojený na LLM API, přes které se automaticky překládá a publikuje do více jazyků. Ale právě tuto práci jsem chtěl udělat opravdu poctivě a v nejlepší možné kvalitě, jaké jsem schopen. Opakovaně jsem ručně procházel každou formulaci a přemýšlel, jaké znění dokáže co nejméně zkresleně, a přitom přirozeně, zachytit význam originálu. Výsledek tak odráží můj subjektivní, ale maximálně promyšlený úsudek a interpretaci. V době, kdy AI používá každý, věřím, že alespoň u překladů tak důležitých dokumentů, jako jsou závazky a kodexy chování, musí mít překlad hodnotu právě tím, že nabídne něco navíc oproti výstupu, který vznikne pouhým hozením originálu do AI s pokynem „přelož to“. Alespoň k aktuálnímu stavu v březnu 12026 jsem přesvědčen, že v <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">tomto překladu</a> se podařilo plně zachovat jemné odstíny a kontext originálu, které strojový překlad ani LLM nedokážou zcela postihnout.</p><p>K datu 20. března 12026 existuje pro verzi 3.0 Contributor Covenant kromě anglického originálu a mnou odevzdaného korejského překladu dokončený překlad pouze do tří jazyků: bengálštiny, němčiny a pevninské čínštiny, a při pohledu na <a href="https://github.com/EthicalSource/contributor_covenant/pulls">seznam otevřených PR</a> je vidět, že existuje i mnoho jazyků, jejichž návrhy překladu už byly odeslány jako PR, ale kvůli nedostatku reviewerů zatím nebyly finálně schváleny. U řady jazyků navíc ještě není přeložena ani verze 3.0 a zůstávají teprve u verze 1.4. Pokud tento text z jakéhokoli důvodu čte někdo, jehož jazykem není korejština, rád bych jej povzbudil: <a href="https://github.com/EthicalSource/contributor_covenant?tab=contributing-ov-file#translators-and-native-speakers">způsob, jak přispět, není nijak složitý</a>, takže pokud si o víkendu nebo jindy najdete třeba jen jeden den, může to být pro OES i pro mluvčí daného jazyka velká pomoc. I pro mě to byla první zkušenost s přispěním na podobném překladu i s tím, že jsem si celý kodex chování přečetl opravdu důkladně, a myslím, že to za těch několik hodin rozhodně stálo. Korea patří k zemím, kde je vzhledem k celkové populaci poměrně vysoký počet vývojářů aktivních v open-source komunitách, například na GitHubu. O to víc bych si přál, aby se na <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">korejském překladu</a> Kodexu chování Contributor Covenant 3.0, který jsem tentokrát přeložil a odeslal, podílelo na review i více dalších Korejců a aby byl pokud možno široce a užitečně přijímán a používán na různých místech.</p><p>Jak říká <strong>profesor Nathan Schneider</strong> v <a href="https://ethicalsource.dev/blog/contributor-covenant-3/">článku na blogu OES</a>, Contributor Covenant funguje jako nezbytný základ pro budování odpovědných a transparentních komunit a ve skutečnosti přispívá k řešení konfliktů. Na GitHubu a jinde bývá zvykem prostě kliknout na tlačítko „Add a code of conduct“ a vložit předpřipravenou šablonu, jenže automaticky nabízená šablona na GitHubu z nějakého důvodu zůstala u verze 2.0 a dál se neaktualizuje. Verze 3.0 oproti starším verzím 2.0 a 2.1 přinesla velké změny a zlepšení, a tak bych doporučil zvážit přijetí nejnovější verze raději přes <a href="https://www.contributor-covenant.org/adopt/">oficiální stránku</a>. Samotný text ostatně není nijak dlouhý, takže by podle mě bylo ještě smysluplnější si jej při tom procesu aspoň jednou celý pozorně přečíst. Doufám, že Contributor Covenant 3.0 i <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">korejský překlad</a>, na němž jsem tentokrát pracoval, vzbudí velký zájem — a tímto končím.</p>]]> </content> </entry> <entry><title xml:lang="cs">Jak připravit IR materiály (How to Prepare IR Materials)</title><link href="https://www.yunseo.kim/cs/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="am" /><published>2026-01-11T00:00:00+09:00</published> <updated>2026-01-11T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/how-to-prepare-ir-materials/</id> <author> <name>Yunseo Kim</name> </author> <category term="Startup" /> <category term="IR" /> <summary xml:lang="cs">Co jsou IR materiály a co by měly obsahovat, aby pomohly úspěšně získat investici — od struktury až po klíčové body.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Co jsou IR materiály a co by měly obsahovat, aby pomohly úspěšně získat investici — od struktury až po klíčové body.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="co-jsou-ir-materiály">Co jsou IR materiály?</h2><p><strong>IR</strong> je zkratka pro <strong>Investor Relations</strong> a jde o souhrnný pojem pro veškeré materiály a aktivity potřebné k tomu, aby firma investorům vysvětlila a odprezentovala svůj byznys, navázala s nimi vztah a získala investici. Pod „IR materiály“ se obvykle myslí materiály, kterými se firma investorům představuje za účelem získání investice.</p><h2 id="co-by-měly-ir-materiály-obsahovat">Co by měly IR materiály obsahovat</h2><p>Protože cílem IR materiálů je získat investici, je potřeba z pohledu investora přesvědčivě ukázat, proč má smysl do této firmy investovat. Proto by měly pokrývat byznys jako celek: shrnutí služby, tržní prostředí, popis produktu/služby, konkurenční prostředí, výsledky, obchodní model, plán budoucího růstu, složení týmu atd.</p><ul><li><strong>Pitch deck</strong>:<ul><li>cílem je <strong>stručně a úderně</strong> zanechat u širokého okruhu potenciálních investorů <strong>pozitivní první dojem</strong><li>používá se při získávání investice v rané fázi<li>obvykle 10–15 slidů, stručné a převážně vizuální</ul><li><strong>IR deck</strong>:<ul><li>poskytuje <strong>hlubší finanční informace a dlouhodobou strategii</strong><li>pro profesionální investory, kteří už začínají projevovat zájem a jsou před rozhodnutím<li>umožňuje investorům provést <strong>hlubší vyhodnocení a úsudek</strong><li>obvykle 20–30 slidů, detailnější informace jako <strong>finanční plán, analýza trhu, složení týmu, analýza konkurence</strong> apod.</ul></ul><h3 id="misevize-missionvision">Mise/vize (Mission/Vision)</h3><ul><li>Jaká je podstata hodnoty, kterou chce firma poskytovat?</ul><blockquote class="prompt-tip"><p>Jde o část, kterou lze považovat za jádro identity firmy; je vhodné hned na začátku IR materiálů vyjádřit misi i vizi každou jednou větou — stručně, ale jednoznačně.</p></blockquote><h3 id="shrnutí-služby">Shrnutí služby</h3><h4 id="problém-problem">Problém (Problem)</h4><ul><li>Jaký problém na trhu chce služba řešit?<li>Jak moc tento problém uživatele obtěžuje?<li>Proč je tento problém důležitý?<li>Existuje poptávka po řešení? Kdo je cílová skupina?</ul><h4 id="řešení-solution">Řešení (Solution)</h4><ul><li>Jak konkrétně vyřešíte výše uvedený problém?<li>Jaké výhody získá zákazník a koncový uživatel oproti stávajícím způsobům?</ul><blockquote class="prompt-tip"><p>Investoři často nejsou odborníci na danou oblast, proto je lepší službu vysvětlovat z pohledu běžného uživatele (ne vývojáře) a technické detaily řešit až dodatečně, pokud přijdou otázky.</p></blockquote><h3 id="velikost-trhu-market-size">Velikost trhu (Market Size)</h3><p>Pokud velikost trhu stanovíte přímo v penězích, výsledek se může výrazně lišit podle metodiky a proměnných a poměrně snadno může vyvolat námitky. Bezpečnější a často efektivnější je prezentovat velikost trhu pomocí jiných metrik, jako je počet potenciálních uživatelů, počet/frekvence transakcí apod.</p><ul><li><strong>TAM (Total Addressable Market, celkový trh)</strong>: maximální teoreticky dosažitelná velikost trhu za idealizovaného předpokladu 100% podílu na světovém trhu (bez konkurence) při nabídce produktu/služby globálně<li><strong>SAM (Service Available Market, dostupný/platný trh)</strong>: velikost trhu v rozsahu, na který firma reálně cílí a který je možné obsloužit s ohledem na geografická, infrastrukturní a regulatorní omezení<li><strong>SOM (Service Obtainable Market, dosažitelný trh / „výdělečný“ trh)</strong>: velikost trhu, kterou lze v rané fázi skutečně získat i v rámci SAM, s ohledem na konkurenci, schopnosti firmy, marketingovou strategii atd.</ul><blockquote class="prompt-tip"><p>Při odhadu velikosti trhu se často postupuje tak, že se u celkového či dostupného trhu uvedou konkrétní čísla s odkazem na nezávislé market-research zdroje, ale u „výdělečného“ trhu (SOM), který je pro startup prakticky nejdůležitější, se to vysvětlí stylem „když dosáhneme X % podílu, budeme mít tržby Y“. Upřímně, i já jsem v úplně prvním interním draftu IR materiálů při přípravě na startup postupoval tímto způsobem.</p><p>Problém je, že z pohledu investora je těžké takovému plánu věřit. Po uvedení služby na trh není snadné rychle získat podíl, a tvrzení typu „vezmeme si několik procent celého trhu“ bez jasného zdůvodnění bývá málo přesvědčivé.</p><p>Je důležité zároveň ukázat, že cílený celkový trh i dostupný trh jsou dostatečně velké, a především předložit logiku toho, jak vnímáte <strong>počáteční segment zákazníků (Immediate Market)</strong> a jak budete postupně přidávat další segmenty, abyste rozšiřovali dosažitelný (výdělečný) trh.</p></blockquote><blockquote class="prompt-tip"><p><strong>Načasování byznysu</strong></p><ul><li>načasování je v byznysu velmi důležité<li>musíte investorům vysvětlit, proč se tomuto byznysu může dařit <em>právě teď</em> a proč má smysl investovat <em>právě teď</em><li>je potřeba předložit důvody, proč je současnost vhodná k realizaci: technická proveditelnost, změny chování lidí, společenské trendy, změny prostředí apod.</ul></blockquote><h3 id="popis-produktuslužby-product">Popis produktu/služby (Product)</h3><ul><li>Jaké jsou hlavní vlastnosti a funkce produktu/služby?<li>Jaký je konkrétní způsob fungování, příklady použití?</ul><h3 id="obchodní-model-business-model">Obchodní model (Business Model)</h3><ul><li>Jak budete vydělávat?<li>Kdo platí? (protože koncový uživatel a platící zákazník se ne vždy shodují; je nutné jasně určit, kdo reálně generuje tržby)<li>Za co budete účtovat? Jak nastavíte cenu?</ul><h3 id="konkurenční-prostředí-competition">Konkurenční prostředí (Competition)</h3><ul><li>Kdo jsou hlavní konkurenti?<li>V čem je z <strong>pohledu zákazníka</strong> vaše služba/produkt lepší a jaké má výhody oproti konkurenci?<li>Jaké služby považujete za konkurenci a koho zvolíte jako hlavní cílovou skupinu?</ul><blockquote class="prompt-tip"><p>Důkladná analýza konkurence vám umožní investorům účinně ukázat, že dobře chápete situaci na trhu.</p></blockquote><h3 id="výsledky-a-strategie-vstupu-na-trh-go-to-market-strategy">Výsledky a strategie vstupu na trh (Go-to Market Strategy)</h3><ul><li>Jaké jsou nejdůležitější klíčové metriky pro úspěch byznysu?<ul><li>např. počet objednávek, měsíčně aktivní uživatelé (MAU), měsíční objem transakcí apod.</ul><li>Jaké výsledky jste dosáhli s důrazem na tyto metriky?<li>Jaké jsou hlavní marketingové nástroje a kanály firmy?<li>Jaké jsou nástroje a náklady na získávání nových zákazníků?<li>*<strong>Jaká je celoživotní hodnota zákazníka (LTV)</strong>?</ul><blockquote class="prompt-info"><p>*<strong>Celoživotní hodnota zákazníka (Customer Lifetime Value, LTV)</strong>: kvantifikace toho, jaký celkový zisk přinese jeden uživatel během celé doby používání služby</p></blockquote><blockquote class="prompt-tip"><p>Je lepší vynechat vedlejší metriky, které nejsou klíčové.</p></blockquote><blockquote class="prompt-tip"><p><strong>Pokud jste ultra-raný startup bez tržeb</strong></p><ul><li>stanovte a uveďte <strong>bod zvratu (break-even point)</strong> pro službu, kterou chcete poskytovat<li>metriky související s výnosy nenadsazujte; nastavte je realisticky z konzervativního pohledu<li>předložte výnosový scénář pro první rok, kdy začnou tržby vznikat, a doplňte plán tržeb na další roky, abyste ukázali, že lze stabilně růst<ul><li>krátkodobá predikce na 1 rok<li>střednědobá predikce na 3 roky<li>dlouhodobá predikce na 5 let</ul><li>aktivně používejte grafy a tabulky pro rychlé pochopení obsahu<li>zahrňte <strong>slide o validaci hypotéz</strong> a přesvědčivě vysvětlete, proč jsou klíčové metriky a výnosový scénář nastaveny právě takto — posílíte tím oporu argumentace<ul><li>je potřeba si vybudovat robustní základ pro očekávaný výnosový scénář skrze opakované experimenty a validaci hypotéz</ul></ul></blockquote><h3 id="složení-týmu-the-team">Složení týmu (The Team)</h3><ul><li>místo představování všech členů se zaměřte na klíčové členy týmu včetně CEO/zakladatele, kteří plní zásadní role<li>zkušenosti a dovednosti uveďte zhruba v rozsahu 2–3 položek a pro lepší čitelnost využijte loga apod.<li>pokud máte investory či poradce, kteří sehráli/sestávají klíčovou roli, je dobré je uvést také</ul><h3 id="plán-budoucího-růstu-milestones">Plán budoucího růstu (Milestones)</h3><ul><li>uveďte cíle podle času a jednotlivých fází<li>obvykle se cíle stanovují do další investiční fáze (např. seed do Series A, Series A do Series B)<li>uveďte požadovanou výši investice a plán použití prostředků<li>časové úseky raději nedělejte příliš dlouhé (např. půl roku a více), ale rozdělujte je například po ~2 měsících</ul><h3 id="finanční-plán-financials">Finanční plán (Financials)</h3><p>U IR decku by měl být součástí finanční plán.</p><ul><li>finanční plán na 3–5 let dopředu<li><strong>unit economics</strong>: příjmy a náklady na jednotku zákazníka<li><strong>burn rate</strong>: tempo čerpání hotovosti (poměr/rychlost výdajů startující firmy na založení, R&amp;D a další náklady)<li>celkové příjmy a náklady<li>EBITDA nebo výkaz peněžních toků apod.</ul><blockquote class="prompt-warning"><ul><li>dejte pozor, abyste nepředkládali příliš nerealistický finanční plán<li>často dochází k nadhodnocování očekávaných tržeb a podhodnocování nákladů, proto buďte při odhadu tržeb obezřetní<li>náklady se snažte odhadnout co nejpřesněji s ohledem na náklady na vývoj produktu/služby i provozní náklady</ul></blockquote><h2 id="co-zdůraznit-podle-investiční-fáze">Co zdůraznit podle investiční fáze</h2><h3 id="seed">Seed</h3><ul><li>fáze vývoje MVP, ověření reakce trhu a validace obchodního modelu<li>je potřeba silně zdůraznit výsledky počátečních hypotéz a validace obchodního modelu, výsledky experimentů s MVP a z nich plynoucí tržby</ul><h3 id="pre-a">Pre-A</h3><ul><li>fáze, kdy je potřeba prokázat růstový potenciál a zajistit další kapitál pro vývoj produktu, marketing, nábor atd.<li>je nutné vysvětlit, jaké jsou klíčové metriky, jakými aktivitami rostete a jaký je potenciál dalšího růstu</ul><h3 id="series-a">Series A</h3><ul><li>fáze, kdy firma začíná výrazně růst a zvyšuje valuaci<li>v tomto bodě by validace hypotéz měla být dokončená, takže je nutné získat důvěru investorů kvantitativními výsledky byznysu</ul><h2 id="několik-tipů">Několik tipů</h2><ul><li>zejména prvních pět slidů připravte pečlivě, aby zanechaly pozitivní první dojem<li>misi/vizi z prvního slidu je dobré zopakovat i na posledním slidu<li>vše sdělujte ve stylu „nejdřív závěr, potom vysvětlení“ (deduktivně)<li>předmětem investice je <strong>firma</strong>, proto by i v IR materiálech měl mít název firmy přednost před názvem služby<li>potenciální investoři nemusí být z oboru; vysvětlujte proto co nejjednodušeji a při použití odborných termínů připojte vysvětlení<li>nemíchejte problém trhu a řešení; oddělte je<li>text používejte hlavně jako klíčová slova; u obrázků se vyhýbejte screenshotům a zvyšujte čitelnost<li>uvádějte přesné a konkrétní číselné tabulky či grafy<li>dejte pozor, abyste nevynechali představení týmu, požadovanou investici a plán použití prostředků<li>je dobré uvést i strategii exitu (realizace návratnosti investice)<li>alespoň stručně uveďte plán struktury podílů akcionářů (v jakém poměru)<li>nedávejte do hlavního textu příliš mnoho materiálů; pokud je potřeba, oddělte je do příloh<li>na poslední slide uveďte kontakty (e-mail, telefon, jméno)<li>font je také velmi důležitý: použijte dobře čitelný font jako <a href="https://cactus.tistory.com/306">Pretendard</a> a připravte to jako PDF, aby se nic nerozbíjelo</ul><h2 id="referenční-materiály">Referenční materiály</h2><h3 id="firemní-informační-kanál-kind">Firemní informační kanál KIND</h3><p><a href="https://kind.krx.co.kr/corpgeneral/irschedule.do?method=searchIRScheduleMain&amp;gubun=iRMaterials">https://kind.krx.co.kr/corpgeneral/irschedule.do?method=searchIRScheduleMain&amp;gubun=iRMaterials</a></p><ul><li>firemní informační kanál provozovaný Korea Exchange (KRX)<li>poskytuje informace o povinných zveřejněních firem kótovaných na KOSPI, KOSDAQ a KONEX<li>lze zde najít IR materiály kótovaných firem a podívat se, jak jsou sestavené nedávno vytvořené IR materiály jiných společností</ul>]]> </content> </entry> <entry><title xml:lang="cs">Základní pojmy kryptografie</title><link href="https://www.yunseo.kim/cs/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="am" /><published>2025-11-26T00:00:00+09:00</published> <updated>2025-11-26T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/basic-concepts-of-cryptography/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Cryptography" /> <summary xml:lang="cs">Co je kryptografie: přehled základů jako symetrická a asymetrická kryptografie, distribuce klíčů a Kerckhoffsův princip.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Co je kryptografie: přehled základů jako symetrická a asymetrická kryptografie, distribuce klíčů a Kerckhoffsův princip.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="co-je-kryptografie">Co je kryptografie</h2><p><strong>Kryptografie (cryptography)</strong> je v podstatě poddisciplína vědy, jejímž cílem je bránit <strong>protokoly (protocol)</strong> proti nepřátelskému jednání.</p><p>Protokolem zde rozumíme seznam kroků, které musí jeden nebo více lidí dodržet, aby něčeho dosáhli. Například pokud chcete sdílet schránku mezi zařízeními, následující je protokol pro sdílení schránky.</p><ol><li>Když na některém zařízení dojde ke změně schránky, zkopíruje se její obsah a nahraje se na server.<li>Server oznámí ostatním zařízením, že u sdílené schránky došlo ke změně.<li>Ostatní zařízení si stáhnou sdílený obsah schránky ze serveru.</ol><p>To však není dobrý protokol, protože když obsah schránky nahrajete na server v otevřeném textu a stejně tak jej stáhnete, může někdo během komunikace — nebo i samotná strana serveru — obsah schránky odposlechnout. Úlohou kryptografie je bránit se s ohledem na existenci protivníka, který se snaží obsah schránky vyzvědět.</p><h2 id="symetrická-kryptografie">Symetrická kryptografie</h2><h3 id="symetrické-šifrování">Symetrické šifrování</h3><blockquote><p>Představme si situaci, kdy Alice musí poslat Bobovi dopis. Alice přikáže poslu (messenger), aby dopis odnesl a doručil, protože chce Bobovi předat důvěrné informace.<br /> Alice však poslu plně nedůvěřuje a chce, aby předávaná zpráva zůstala tajná pro všechny kromě Boba — včetně posla, který dopis nese.</p></blockquote><p>K takové situaci byl už dávno vynalezen kryptografický algoritmus zvaný <strong>algoritmus symetrického šifrování (symmetric encryption algorithm)</strong>.</p><blockquote class="prompt-info"><p><strong>Primitivum (primitive)</strong><br /> Slovo primitivum (primitive) slovníkově znamená „primitivní“ či „primitivní věc“.<br /> V kryptografii se však termín <em>primitive</em> používá často; zde označuje nejmenší jednotku funkce či algoritmu, z níž se kryptografický systém skládá.<br /> Lze si to představit jako „základní stavební prvek“ nebo „základní logiku“.</p></blockquote><p>Uvažujme nějaké primitivum, které poskytuje následující dvě funkce.</p><ul><li><code class="language-plaintext highlighter-rouge">ENCRYPT</code>: přijme <strong>tajný klíč (secret key)</strong> (obvykle velké číslo) a <strong>zprávu (message)</strong> a jako výstup vrátí řetězec čísel jako zašifrovanou zprávu<li><code class="language-plaintext highlighter-rouge">DECRYPT</code>: inverzní funkce k <code class="language-plaintext highlighter-rouge">ENCRYPT</code>; při zadání stejného tajného klíče a zašifrované zprávy vrátí původní zprávu</ul><p>Aby Alice s pomocí takového kryptografického primitiva skryla zprávu tak, aby ji posel ani žádná třetí strana nemohli přečíst, musí se Alice a Bob nejprve předem setkat a dohodnout se, jaký tajný klíč budou používat. Poté Alice použije funkci <code class="language-plaintext highlighter-rouge">ENCRYPT</code> a dohodnutým tajným klíčem zprávu zašifruje a tuto zašifrovanou zprávu pošle Bobovi prostřednictvím posla. Bob následně stejným tajným klíčem použije <code class="language-plaintext highlighter-rouge">DECRYPT</code> a získá původní zprávu.</p><p>Proces, kdy se pomocí tajného klíče objekt šifruje tak, že jej nelze na pohled odlišit od bezvýznamného šumu, je v kryptografii běžný způsob ochrany protokolů.</p><p>Symetrické šifrování patří do širší kategorie algoritmů zvané <strong>symetrická kryptografie (symmetric cryptography)</strong> nebo <strong>kryptografie s tajným klíčem (secret key cryptography)</strong>; v některých případech může existovat i více než jeden klíč.</p><h2 id="kerckhoffsův-princip">Kerckhoffsův princip</h2><p>Dnes dokážeme komunikovat téměř v reálném čase prostřednictvím mnohem mocnějších prostředků než jsou papírové dopisy — pomocí počítačů a internetu. Jinými slovy to však znamená, že i „zlomyslný posel“ výrazně zesílil: může jím být nezabezpečená veřejná Wi‑Fi v kavárně, poskytovatel internetu (ISP), různé síťové prvky a servery, které tvoří internet a předávají zprávy, státní instituce, a dokonce i zařízení samotného uživatele, na němž algoritmus běží. Protivníci mohou pozorovat více zpráv v reálném čase a aniž by si toho kdo všiml, zprávy v řádu nanosekund pozměňovat, odposlouchávat či cenzurovat.</p><p>Z dlouhého procesu pokusů a omylů v kryptografii vzešlo jedno spolehlivé základní pravidlo pro dosažení bezpečnosti: <u>primitiva se mají veřejně analyzovat</u>. Opačný přístup lze nazvat <strong>bezpečností skrze utajení (security by obscurity)</strong>; jeho limity jsou zřejmé a dnes se od něj upustilo.</p><p>Tento princip byl poprvé formulován v roce 11883 nizozemským lingvistou a kryptografem Augustem Kerckhoffsem (Auguste Kerckhoffs) a nazývá se <strong>Kerckhoffsův princip (Kerckhoffs’s principle)</strong>. Tentýž princip vyjádřil americký matematik, informatik a kryptograf Claude Shannon — „otec teorie informace“ — slovy „protivník systém zná (The enemy knows the system)“, tj. „při návrhu systému musíme předpokládat, že jej protivník odhalí“. Toto se nazývá <strong>Shannonovo rčení (Shannon’s maxim)</strong>.</p><p>Bezpečnost kryptosystému se má opírat pouze o tajnost klíče; o samotném kryptosystému se může vědět a nemělo by to být problém. Naopak by měl být aktivně zveřejňován, aby jej, jako v případě AES, mohlo ověřovat mnoho <strong>kryptoanalytiků (cryptanalyst)</strong>. Tajemství je vždy ohroženo únikem, a tedy představuje potenciální bod selhání; z pohledu obránce je výhodnější, čím menší je část, která musí zůstat utajena. Udržet po dlouhou dobu v tajnosti celý velký a složitý systém, jakým je kryptosystém, je velmi obtížné, zatímco udržet v tajnosti pouze klíč je relativně snadné. Navíc i kdyby došlo k úniku tajemství, vyměnit pouze kompromitovaný klíč za nový je mnohem jednodušší než měnit celý kryptosystém.</p><h2 id="asymetrická-kryptografie">Asymetrická kryptografie</h2><p>Mnoho protokolů v praxi funguje na symetrické kryptografii, tento způsob však předpokládá, že se oba účastníci musí alespoň jednou na začátku setkat zvlášť, aby se dohodli na klíči. Proto vzniká problém, jak klíč předem určit a bezpečně sdílet; tomu se říká <strong>distribuce klíčů (key distribution)</strong>. Problém distribuce klíčů byl dlouho obtížný a teprve koncem 70. let 11970 byl vyřešen vývojem kryptografických algoritmů zvaných <strong>asymetrická kryptografie (asymmetric cryptography)</strong> neboli <strong>kryptografie s veřejným klíčem (public key cryptography)</strong>.</p><p>Mezi typická primitiva asymetrické kryptografie patří <strong>výměna klíčů (key exchange)</strong>, <strong>asymetrické šifrování (asymmetric encryption)</strong> a <strong>digitální podpis (digital signature)</strong>.</p><h3 id="výměna-klíčů">Výměna klíčů</h3><p><strong>Výměna klíčů</strong> zhruba funguje takto:</p><ol><li>Alice a Bob se dohodnou, že budou společně používat nějakou sadu parametrů $G$<li>Alice a Bob si každý zvolí svůj <strong>soukromý klíč (private key)</strong> $a, b$<li>Alice a Bob zkombinují původně dohodnuté společné parametry $G$ se svými soukromými klíči $a$, $b$, spočítají <strong>veřejné klíče (public key)</strong> $A = f(G,a)$, $B = f(G,b)$ a tyto veřejně sdílí<li>Alice použije Bobův veřejný klíč $B = f(G,b)$ a svůj soukromý klíč $a$ a spočítá $f(B,a) = f(f(G,b),a)$; Bob obdobně použije Alicin veřejný klíč $A = f(G,a)$ a svůj soukromý klíč $b$ a spočítá $f(A,b) = f(f(G,a),b)$<li>Pokud použijeme vhodnou funkci $f$ s vlastností $f(f(G,a),b) = f(f(G,b),a)$, nakonec budou Alice a Bob sdílet stejné tajemství; třetí strana zná $G$ a veřejné klíče $A = f(G,a)$, $B = f(G,b)$, ale jen z toho nedokáže získat $f(A,b)$, a tajemství tedy zůstane zachováno</ol><p>Takto sdílené tajemství se obvykle použije jako tajný klíč pro <a href="#symetrické-šifrování">symetrické šifrování</a> a následně se s jeho pomocí vyměňují další zprávy.</p><p>Prvním publikovaným a zároveň nejtypičtějším algoritmem pro výměnu klíčů je Diffieho–Hellmanův algoritmus výměny klíčů, pojmenovaný podle příjmení dvou autorů, Diffieho (Diffie) a Hellmana (Hellman).</p><p>Diffieho–Hellmanova výměna klíčů má však limity. Představme si situaci, kdy útočník během fáze výměny veřejných klíčů zachytí veřejné klíče $A = f(G,a)$, $B = f(G,b)$ a nahradí je svým $M = f(G,m)$, který pak předá Alici i Bobovi. V takovém případě Alice a útočník sdílejí falešné tajemství $f(M, a) = f(A, m)$ a Bob s útočníkem sdílejí jiné falešné tajemství $f(M, b) = f(B, m)$. Tím se útočník může vůči Alici vydávat za Boba a vůči Bobovi za Alici. Takové situaci se říká, že <u><strong>útočník typu man-in-the-middle (MITM)</strong> úspěšně zaútočil na protokol</u>. Z tohoto důvodu výměna klíčů sama o sobě neřeší problém důvěry; jen zjednodušuje postup, když je účastníků mnoho.</p><h3 id="asymetrické-šifrování">Asymetrické šifrování</h3><p>Po vynálezu Diffieho–Hellmanovy výměny klíčů rychle následovaly další objevy; jedním z nich je <strong>algoritmus RSA (RSA algorithm)</strong>, pojmenovaný podle příjmení vynálezců Ronalda Rivesta (Ronald Rivest), Adiho Shamira (Adi Shamir) a Leonarda Adlemana (Leonard Adleman). RSA zahrnuje dvě primitiva: šifrování veřejným klíčem (asymetrické šifrování) a elektronický podpis; obě jsou součástí asymetrické kryptografie.</p><p>U <strong>asymetrického šifrování</strong> je základní cíl — šifrovat zprávu pro zajištění důvěrnosti — podobný jako u <a href="#symetrické-šifrování">symetrického šifrování</a>. Na rozdíl od symetrického šifrování, které používá stejný symetrický klíč jak pro šifrování, tak pro dešifrování, má asymetrické šifrování tyto vlastnosti:</p><ul><li>funguje se dvěma klíči: veřejným klíčem a soukromým klíčem<li>kdokoli může šifrovat veřejným klíčem, ale dešifrovat může jen ten, kdo má soukromý klíč</ul><ol><li>Existuje otevřená schránka (veřejný klíč), do které může kdokoli vložit zprávu a zamknout ji, ale jakmile je jednou zamčená, lze ji otevřít pouze klíčem (soukromým klíčem), který má Bob<li>Alice vloží zprávu do schránky a zamkne ji (zašifruje) a poté ji předá Bobovi<li>Bob po obdržení zamčené schránky (zašifrované zprávy) otevře schránku svým klíčem (soukromým klíčem) a vyjme zprávu (dešifruje)</ol><h3 id="elektronický-podpis">Elektronický podpis</h3><p>RSA poskytuje nejen asymetrické šifrování, ale také <strong>elektronický podpis</strong>; toto podpisové primitivum výrazně pomohlo vybudovat důvěru mezi Alicí a Bobem. Při podepisování zprávy se používá vlastní soukromý klíč a při ověřování pravosti podpisu se používá podepsaná zpráva, podpis a veřejný klíč podepisujícího.</p><h2 id="využití-kryptografie">Využití kryptografie</h2><p>Cílem kryptografie je chránit protokoly proti nepřátelskému jednání, a proto o užitečnosti kryptografie rozhoduje to, čeho chce daný protokol dosáhnout. Většina kryptografických primitiv a protokolů má jednu nebo více z následujících vlastností.</p><ul><li><strong>důvěrnost (confidentiality)</strong>: skrývá a chrání část informací před lidmi, kteří je nemají vidět<li><strong>autentizace (authentication)</strong>: identifikace protistrany v komunikaci (např. ověření, že přijatou zprávu skutečně poslala Alice)</ul><h2 id="ekosystém-kryptografie">Ekosystém kryptografie</h2><pre><code class="language-mermaid">flowchart TD
    Alice[Výzkumník kryptografie]-- Vynález primitiva --&gt;Primitive(Návrh nového primitiva)
    Alice-- Vynález protokolu --&gt;Protocol(Návrh nového protokolu)
    Alice-. Vyhlášení soutěže .-&gt;C(Soutěž algoritmů)

    David[Soukromý sektor]-. Financování .-&gt;Alice
    David-. Vyhlášení soutěže .-&gt;C

    Eve[Státní instituce]-. Financování .-&gt;Alice
    Eve-. Vyhlášení soutěže .-&gt;C

    Primitive --&gt; t1{"Lze implementovat?"}
    t1-- Ano --&gt;Protocol
    t1-- Ne --&gt;term1@{ shape: framed-circle, label: "Stop" }

    Protocol-- Účast v soutěži --&gt;C
    Protocol-- Standardizace --&gt;Standard(Standard)
    Protocol-- Patentová přihláška --&gt;Patent(Vypršení patentu)
    Protocol-- Implementace --&gt;Library(Knihovna)
    
    C-- Vítězství v soutěži --&gt;Standard
    C-- Vyřazení --&gt;term2@{ shape: framed-circle, label: "Stop" }

    Standard-- Implementace --&gt;Library
    Standard-- Vyřazení --&gt;term3@{ shape: framed-circle, label: "Stop" }

    Patent-- Vyřazení --&gt;term2@{ shape: framed-circle, label: "Stop" }
    Patent-- Standardizace --&gt;Standard
    Patent-- Implementace --&gt;Library

    Library-- Standardizace --&gt;Standard
    Library-- Prolomení bezpečnosti --&gt;term4@{ shape: framed-circle, label: "Stop" }
</code></pre>]]> </content> </entry> <entry><title xml:lang="cs">Lineární transformace, jádrový prostor a obraz</title><link href="https://www.yunseo.kim/cs/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="am" /><published>2025-09-18T00:00:00+09:00</published> <updated>2025-09-18T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/linear-transformation-nullspace-and-image/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="cs">Projdeme definici lineární transformace a dva klíčové podprostory: jádro (nulový prostor) a obraz. Ukážeme také věty o jejich dimenzích (nulita, hodnost).</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Projdeme definici lineární transformace a dva klíčové podprostory: jádro (nulový prostor) a obraz. Ukážeme také věty o jejich dimenzích (nulita, hodnost).</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="předpoklady">Předpoklady</h2><ul><li><a href="/cs/posts/vectors-and-linear-combinations/">Vektory a lineární kombinace</a><li><a href="/cs/posts/vector-spaces-subspaces-and-matrices/">Vektorové prostory, podprostory a matice</a><li><a href="posts/linear-dependence-and-independence-basis-and-dimension/">Lineární závislost a lineární nezávislost, báze a dimenze</a><li>injektivní funkce, surjektivní funkce</ul><h2 id="lineární-transformace">Lineární transformace</h2><p>Speciální funkci, která zachovává strukturu vektorového prostoru, nazýváme <strong>lineární transformací (linear transformation)</strong>. Jde o důležitý pojem, který se velmi často objevuje napříč čistou matematikou, aplikovanou matematikou, společenskými vědami, přírodními vědami i inženýrstvím.</p><blockquote class="prompt-info"><p><strong>Definice</strong><br /> Nechť $\mathbb{V}$ a $\mathbb{W}$ jsou $F$-vektorové prostory. Funkci $T: \mathbb{V} \to \mathbb{W}$ nazveme <strong>lineární transformací (linear transformation)</strong> z $\mathbb{V}$ do $\mathbb{W}$, pokud pro všechna $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ a $c \in F$ platí následující dvě podmínky.</p><ol><li>$T(\mathbf{x}+\mathbf{y}) = T(\mathbf{x}) + T(\mathbf{y})$<li>$T(c\mathbf{x}) = cT(\mathbf{x})$</ol></blockquote><p>Tvrzení „$T$ je lineární transformace“ se zkráceně vyjadřuje také jako „$T$ je <strong>lineární (linear)</strong>“. Lineární transformace $T: \mathbb{V} \to \mathbb{W}$ splňuje následující čtyři vlastnosti.</p><blockquote class="prompt-info"><ol><li>$T$ je lineární $\quad \Rightarrow \quad $ $T(\mathbf{0}) = \mathbf{0}$<li>$T$ je lineární $\quad \Leftrightarrow \quad $ $T(c\mathbf{x} + \mathbf{y}) = cT(\mathbf{x}) + T(\mathbf{y}) \; \forall \, \mathbf{x}, \mathbf{y} \in \mathbb{V},\, c \in F$<li>$T$ je lineární $\quad \Rightarrow \quad $ $T(\mathbf{x} - \mathbf{y}) = T(\mathbf{x}) - T(\mathbf{y}) \; \forall \, \mathbf{x}, \mathbf{y} \in \mathbb{V}$<li>$T$ je lineární $\quad \Leftrightarrow \quad $ $T\left( \sum_{i=1}^n a_i \mathbf{x}_i \right) = \sum_{i=1}^n a_i T(\mathbf{x}_i)$</ol></blockquote><blockquote class="prompt-tip"><p>Při dokazování linearity nějaké funkce je obvykle výhodné použít 2. vlastnost.</p></blockquote><blockquote class="prompt-tip"><p>Lineární algebra má široké a rozmanité využití také v geometrii, protože mnoho důležitých geometrických transformací je lineárních. Zejména tři hlavní geometrické transformace — <strong>rotace</strong>, <strong>symetrie</strong> a <strong>projekce</strong> — jsou lineárními transformacemi.</p></blockquote><p>Následující dvě lineární transformace se objevují obzvlášť často.</p><blockquote class="prompt-info"><p><strong>Identita a nulová transformace</strong><br /> Pro $F$-vektorové prostory $\mathbb{V}, \mathbb{W}$:</p><ul><li><strong>identita (identity transformation)</strong>: funkce $I_\mathbb{V}: \mathbb{V} \to \mathbb{V}$ definovaná tak, že pro všechna $\mathbf{x} \in \mathbb{V}$ platí $I_\mathbb{V}(\mathbf{x}) = \mathbf{x}$<li><strong>nulová transformace (zero transformation)</strong>: funkce $T_0: \mathbb{V} \to \mathbb{W}$ definovaná tak, že pro všechna $\mathbf{x} \in \mathbb{V}$ platí $T_0(\mathbf{x}) = \mathbf{0}$</ul></blockquote><p>Kromě toho spadá pod lineární transformace řada dalších pojmů.</p><blockquote class="prompt-tip"><p><strong>Příklady lineárních transformací</strong></p><ul><li>rotace<li>symetrie<li>projekce<li><a href="/cs/posts/vector-spaces-subspaces-and-matrices/#transponovaná-matice-symetrická-matice-antisymetrická-matice">transpozice</a><li>derivace diferencovatelné funkce<li>integrál spojité funkce</ul></blockquote><h2 id="jádrový-prostor-a-obraz">Jádrový prostor a obraz</h2><h3 id="definice-jádrového-prostoru-a-obrazu">Definice jádrového prostoru a obrazu</h3><blockquote class="prompt-info"><p><strong>Definice</strong><br /> Pro vektorové prostory $\mathbb{V}, \mathbb{W}$ a lineární transformaci $T: \mathbb{V} \to \mathbb{W}$:</p><ul><li><p><strong>nulový prostor (null space)</strong> neboli <strong>jádro (kernel)</strong>: množina všech $\mathbf{x} \in \mathbb{V}$ takových, že $T(\mathbf{x}) = \mathbf{0}$; značíme $\mathrm{N}(T)$</p>\[\mathrm{N}(T) = \{ \mathbf{x} \in \mathbb{V}: T(\mathbf{x}) = \mathbf{0} \}\]<li><p><strong>obor hodnot (range)</strong> neboli <strong>obraz (image)</strong>: podmnožina $\mathbb{W}$ tvořená všemi hodnotami funkce $T$; značíme $\mathrm{R}(T)$</p>\[\mathrm{R}(T) = \{ T(\mathbf{x}): \mathbf{x} \in \mathbb{V} \}\]</ul></blockquote><blockquote class="prompt-tip"><p><strong>e.g.</strong> Pro vektorové prostory $\mathbb{V}, \mathbb{W}$, identitu $I: \mathbb{V} \to \mathbb{V}$ a nulovou transformaci $T_0: \mathbb{V} \to \mathbb{W}$ platí:</p><ul><li>$\mathrm{N}(I) = \{\mathbf{0}\}$<li>$\mathrm{R}(I) = \mathbb{V}$<li>$\mathrm{N}(T_0) = \mathbb{V}$<li>$\mathrm{R}(T_0) = \{\mathbf{0}\}$</ul></blockquote><p>Dále je to klíčový fakt, ke kterému se budeme opakovaně vracet: nulový prostor a obraz lineární transformace jsou <a href="/cs/posts/vector-spaces-subspaces-and-matrices/#podprostor">podprostory</a>.</p><blockquote class="prompt-info"><p><strong>Věta 1</strong><br /> Pro vektorové prostory $\mathbb{V}, \mathbb{W}$ a lineární transformaci $T: \mathbb{V} \to \mathbb{W}$ jsou $\mathrm{N}(T)$ a $\mathrm{R}(T)$ podprostory prostorů $\mathbb{V}$, resp. $\mathbb{W}$.</p><p><strong>Důkaz</strong><br /> Nulové vektory prostorů $\mathbb{V}, \mathbb{W}$ označme $\mathbf{0}_\mathbb{V}, \mathbf{0}_\mathbb{W}$.</p><p>Jelikož $T(\mathbf{0}_\mathbb{V}) = \mathbf{0}_\mathbb{W}$, platí $\mathbf{0}_\mathbb{V} \in \mathrm{N}(T)$. Dále pro $\mathbf{x}, \mathbf{y} \in \mathrm{N}(T),\ c \in F$ platí:</p>\[\begin{align*} T(\mathbf{x} + \mathbf{y}) &amp;= T(\mathbf{x}) + T(\mathbf{y}) = \mathbf{0}_\mathbb{W} + \mathbf{0}_\mathbb{W} = \mathbf{0}_\mathbb{W}, \\ T(c\mathbf{x}) &amp;= cT(\mathbf{x}) = c\mathbf{0}_\mathbb{W} = \mathbf{0}_\mathbb{W}. \end{align*}\]<p>$\therefore$ <a href="/cs/posts/vector-spaces-subspaces-and-matrices/#podprostor">$\mathbf{0}_\mathbb{V} \in \mathrm{N}(T),\ \mathbf{x} + \mathbf{y} \in \mathrm{N}(T),\ c\mathbf{x} \in \mathrm{N}(T)$, a tedy $\mathrm{N}(T)$ je podprostor $\mathbb{V}$</a>.</p><p>Podobně, protože $T(\mathbf{0}_\mathbb{V}) = \mathbf{0}_\mathbb{W}$, máme $\mathbf{0}_\mathbb{W} \in \mathrm{R}(T)$. A jelikož $\forall \mathbf{x}, \mathbf{y} \in \mathrm{R}(T),\ c \in F \ (\exists \mathbf{v}, \mathbf{w} \in \mathbb{V} \ (T(\mathbf{v}) = \mathbf{x}\ \wedge \ T(\mathbf{w}) = \mathbf{y}))$, platí</p>\[\begin{align*} T(\mathbf{v} + \mathbf{w}) &amp;= T(\mathbf{v}) + T(\mathbf{w}) = \mathbf{x} + \mathbf{y}, \\ T(c\mathbf{v}) &amp;= cT(\mathbf{v}) = c\mathbf{x}. \end{align*}\]<p>$\therefore$ <a href="/cs/posts/vector-spaces-subspaces-and-matrices/#podprostor">$\mathbf{0}_\mathbb{W} \in \mathrm{R}(T),\ \mathbf{x} + \mathbf{y} \in \mathrm{R}(T),\ c\mathbf{x} \in \mathrm{R}(T)$, a tedy $\mathrm{R}(T)$ je podprostor $\mathbb{W}$</a>. $\blacksquare$</p></blockquote><p>Na druhé straně, pro vektorové prostory $\mathbb{V}, \mathbb{W}$ a lineární transformaci $T: \mathbb{V} \to \mathbb{W}$, známe-li <a href="/cs/posts/linear-dependence-and-independence-basis-and-dimension/#báze">bázi</a> prostoru $\mathbb{V}$, $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$, můžeme <a href="/cs/posts/vectors-and-linear-combinations/#generovani-span-linearni-kombinace-cmathbfv--dmathbfw">generující množinu</a> obrazu $\mathrm{R}(T)$ najít následovně.</p><blockquote class="prompt-info"><p><strong>Věta 2</strong><br /> Pro vektorové prostory $\mathbb{V}, \mathbb{W}$, lineární transformaci $T: \mathbb{V} \to \mathbb{W}$ a <a href="/cs/posts/linear-dependence-and-independence-basis-and-dimension/#báze">bázi</a> prostoru $\mathbb{V}$, $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$, platí:</p>\[\mathrm{R}(T) = \mathrm{span}(\{T(\mathbf{v}): \mathbf{v} \in \beta \}) = \mathrm{span}(\{T(\mathbf{v}_1), T(\mathbf{v}_2), \dots, T(\mathbf{v}_n) \})\]<p><strong>Důkaz</strong></p>\[T(\mathbf{v}_i) \in \mathrm{R}(T) \quad \forall \mathbf{v}_i \in \beta.\]<p>Protože $\mathrm{R}(T)$ je podprostor, podle <strong>Věty 2</strong> v článku <a href="/cs/posts/vector-spaces-subspaces-and-matrices/#podprostor">Vektorové prostory, podprostory a matice</a> platí:</p>\[\mathrm{span}(\{T(\mathbf{v}_1), T(\mathbf{v}_2), \dots, T(\mathbf{v}_n) \}) = \mathrm{span}(\{T(\mathbf{v}_i): \mathbf{v}_i \in \beta \}) \subseteq \mathrm{R}(T).\]<p>Dále:</p>\[\forall \mathbf{w} \in \mathrm{R}(T) \ (\exists \mathbf{v} \in \mathbb{V} \ (\mathbf{w} = T(\mathbf{v}))).\]<p>Jelikož $\beta$ je báze $\mathbb{V}$, platí:</p>\[\mathbf{v} = \sum_{i=1}^n a_i \mathbf{v}_i \quad \text{(kde } a_1, a_2, \dots, a_n \in F \text{)}.\]<p>Protože $T$ je lineární:</p>\[\mathbf{w} = T(\mathbf{v}) = \sum_{i=1}^n a_i T(\mathbf{v}_i) \in \mathrm{span}(\{T(\mathbf{v}_i): \mathbf{v}_i \in \beta \})\] \[\mathrm{R}(T) \subseteq \mathrm{span}(\{T(\mathbf{v}_i): \mathbf{v}_i \in \beta \}) = \mathrm{span}(\{T(\mathbf{v}_1), T(\mathbf{v}_2), \dots, T(\mathbf{v}_n) \}).\]<p>$\therefore$ platí zároveň $\mathrm{R}(T) \supseteq \mathrm{span}({T(\mathbf{v}_i): \mathbf{v}_i \in \beta })$ i $\mathrm{R}(T) \subseteq \mathrm{span}({T(\mathbf{v}_i): \mathbf{v}_i \in \beta })$, tedy $\mathrm{R}(T) = \mathrm{span}({T(\mathbf{v}): \mathbf{v} \in \beta })$. $\blacksquare$</p></blockquote><p>Tato věta platí i tehdy, když je báze $\beta$ nekonečná.</p><h3 id="dimenzní-věta">Dimenzní věta</h3><p>Protože nulový prostor i obraz jsou velmi důležité podprostory, zavádí se pro jejich <a href="/cs/posts/linear-dependence-and-independence-basis-and-dimension/#dimenze">dimenzi</a> speciální názvy.</p><blockquote class="prompt-info"><p>Pro vektorové prostory $\mathbb{V}, \mathbb{W}$ a lineární transformaci $T: \mathbb{V} \to \mathbb{W}$ předpokládejme, že $\mathrm{N}(T)$ a $\mathrm{R}(T)$ jsou konečněrozměrné.</p><ul><li><strong>dimenze nulového prostoru (nullity)</strong>: dimenze $\mathrm{N}(T)$; značí se $\mathrm{nullity}(T)$<li><strong>hodnost (rank)</strong>: dimenze $\mathrm{R}(T)$; značí se $\mathrm{rank}(T)$</ul></blockquote><p>U lineárních transformací platí: čím větší je dimenze nulového prostoru, tím menší je hodnost, a naopak.</p><blockquote class="prompt-info"><p><strong>Věta 3: dimenzní věta (dimension theorem)</strong><br /> Pro vektorové prostory $\mathbb{V}, \mathbb{W}$ a lineární transformaci $T: \mathbb{V}\to \mathbb{W}$ platí, že pokud je $\mathbb{V}$ konečněrozměrný, pak:</p>\[\mathrm{nullity}(T) + \mathrm{rank}(T) = \dim(\mathbb{V})\]</blockquote><h4 id="důkaz">Důkaz</h4><p>Nechť $\dim(\mathbb{V}) = n$, $\mathrm{nullity}(T) = \dim(\mathrm{N}(T)) = k$ a báze $\mathrm{N}(T)$ je $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \}$.</p><p>Podle <a href="/cs/posts/linear-dependence-and-independence-basis-and-dimension/#dimenze-podprostoru"><strong>Důsledku 6-1</strong> z článku „Lineární závislost a lineární nezávislost, báze a dimenze“</a> lze $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \}$ rozšířit na bázi $\mathbb{V}$, tj. získáme bázi $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$.</p><p>Nyní ukážeme, že $S = \{T(\mathbf{v}_{k+1}), T(\mathbf{v}_{k+2}), \dots, T(\mathbf{v}_n) \}$ je bází $\mathrm{R}(T)$. Nejprve, protože pro $1 \leq i \leq k$ platí $T(\mathbf{v}_i) = 0$, dostaneme z <a href="#definice-jádrového-prostoru-a-obrazu"><strong>Věty 2</strong></a>:</p>\[\begin{align*} \mathrm{R}(T) &amp;= \mathrm{span}(\{T(\mathbf{v}_1), T(\mathbf{v}_2), \dots, T(\mathbf{v}_n) \}) \\ &amp;= \mathrm{span}(\{T(\mathbf{v}_{k+1}), T(\mathbf{v}_{k+2}), \dots, T(\mathbf{v}_n) \}) \\ &amp;= \mathrm{span}(S). \end{align*}\]<p>Tedy $S$ je generující množina $\mathrm{R}(T)$. Podle <a href="/cs/posts/linear-dependence-and-independence-basis-and-dimension/#dimenze"><strong>Důsledku 5-2 věty o nahrazení</strong></a> stačí ukázat, že $S$ je lineárně nezávislá, a tím bude $S$ bází $\mathrm{R}(T)$.</p><p>Nechť $\sum_{i=k+1}^n b_i T(\mathbf{v}_i) = 0$ (kde $b_{k+1}, b_{k+2}, \dots, b_n \in F$). Protože $T$ je lineární,</p>\[\sum_{i=k+1}^n b_i T(\mathbf{v}_i) = 0 \Leftrightarrow T\left(\sum_{i=k+1}^n b_i \mathbf{v}_i \right) = 0 \Leftrightarrow \sum_{i=k+1}^n b_i \mathbf{v}_i \in \mathrm{N}(T).\]<p>Proto:</p>\[\begin{align*} &amp;\exists c_1, c_2, \dots, c_k \in F, \\ &amp;\sum_{i=k+1}^n b_i \mathbf{v}_i = \sum_{i=1}^k c_i \mathbf{v}_i \\ \Leftrightarrow &amp;\sum_{i=1}^k (-c_i)\mathbf{v}_i + \sum_{i=k+1}^n b_i \mathbf{v}_i = 0. \end{align*}\]<p>Protože $\beta$ je báze $\mathbb{V}$, jediné řešení rovnice $\sum_{i=1}^k (-c_i)\mathbf{v}_i + \sum_{i=k+1}^n b_i \mathbf{v}_i = 0$ je</p>\[c_1 = c_2 = \cdots = c_k = b_{k+1} = b_{k+2} = \cdots = b_n = 0\]<p>a z toho plyne</p>\[\sum_{i=k+1}^n b_i T(\mathbf{v}_i) = 0 \quad \Rightarrow \quad b_i = 0.\]<p>Tedy $S$ je lineárně nezávislá a je bází $\mathrm{R}(T)$.</p>\[\therefore \mathrm{rank}(T) = n - k = \dim{\mathbb{V}} - \mathrm{nullity}(T). \blacksquare\]<h3 id="lineární-transformace-a-injekce-surjekce">Lineární transformace a injekce, surjekce</h3><p>U lineárních transformací souvisí injekce (injection) a surjekce (surjection) úzce s hodností a dimenzí nulového prostoru.</p><blockquote class="prompt-info"><p><strong>Věta 4</strong><br /> Pro vektorové prostory $\mathbb{V}, \mathbb{W}$ a lineární transformaci $T: \mathbb{V} \to \mathbb{W}$ platí:</p>\[T\text{ je injektivní.} \quad \Leftrightarrow \quad \mathrm{N}(T) = \{\mathbf{0}\}.\]</blockquote><blockquote class="prompt-info"><p><strong>Věta 5</strong><br /> Nechť mají konečněrozměrné vektorové prostory $\mathbb{V}, \mathbb{W}$ stejnou dimenzi. Pak jsou pro lineární transformaci $T: \mathbb{V} \to \mathbb{W}$ následující čtyři tvrzení ekvivalentní.</p><ol><li>$T$ je injektivní.<li>$\mathrm{nullity}(T) = 0$<li>$\mathrm{rank}(T) = \dim(\mathbb{V})$<li>$T$ je surjektivní.</ol></blockquote><p>Pomocí <a href="#dimenzní-věta">dimenzní věty</a>, <a href="#lineární-transformace">vlastností 1 a 3 lineární transformace</a> a <a href="/cs/posts/linear-dependence-and-independence-basis-and-dimension/#dimenze-podprostoru"><strong>Věty 6</strong> z článku „Lineární závislost a lineární nezávislost, báze a dimenze“</a> lze dokázat <strong>Větu 4</strong> a <strong>Větu 5</strong>.</p><p>Tyto dvě věty jsou užitečné při rozhodování, zda je daná lineární transformace injektivní nebo surjektivní.</p><blockquote class="prompt-warning"><p>Pro nekonečněrozměrný vektorový prostor $\mathbb{V}$ a lineární transformaci $T: \mathbb{V} \to \mathbb{V}$ neplatí, že injektivita a surjektivita jsou ekvivalentní.</p></blockquote><p>Navíc, je-li nějaká lineární transformace injektivní, může být v některých situacích užitečná následující věta pro rozhodování, zda je daná podmnožina vektorového prostoru lineárně nezávislá.</p><blockquote class="prompt-info"><p><strong>Věta 6</strong><br /> Pro vektorové prostory $\mathbb{V}, \mathbb{W}$, injektivní lineární transformaci $T: \mathbb{V} \to \mathbb{W}$ a podmnožinu $S \subseteq \mathbb{V}$ platí:</p>\[S\text{ je lineárně nezávislá.} \quad \Leftrightarrow \quad \{T(\mathbf{v}): \mathbf{v} \in S \}\text{ je lineárně nezávislá.}\]</blockquote><h2 id="lineární-transformace-a-báze">Lineární transformace a báze</h2><p>Důležitou vlastností lineárních transformací je, že jejich chování je určeno tím, jak působí na bázi.</p><blockquote class="prompt-info"><p><strong>Věta 7</strong><br /> Nechť $\mathbb{V}, \mathbb{W}$ jsou $F$-vektorové prostory, $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ je báze $\mathbb{V}$ a $\mathbf{w}_1, \mathbf{w}_2, \dots, \mathbf{w}_n \in \mathbb{W}$ jsou vektory. Pak existuje právě jedna lineární transformace $T: \mathbb{V} \to \mathbb{W}$ splňující:</p>\[i = 1, 2, \dots, n \text{ a } T(\mathbf{v}_i) = \mathbf{w}_i\]<p><strong>Důkaz</strong><br /> Pro $\mathbf{x} \in \mathbb{V}$ je následující vyjádření jako lineární kombinace jednoznačné:</p>\[\mathbf{x} = \sum_{i=1}^n a_i \mathbf{v}_i \text{ (}a_1, a_2, \dots, a_n \in F \text{)}\]<p>Definujme lineární transformaci $T: \mathbb{V} \to \mathbb{W}$ takto:</p>\[T(\mathbf{x}) = T\left( \sum_{i=1}^n a_i \mathbf{v}_i \right) = \sum_{i=1}^n a_i \mathbf{w}_i\]<p>i) Pro $i = 1, 2, \dots, n$ platí $T(\mathbf{v}_i) = \mathbf{w}_i$.</p><p>ii)</p><p>Předpokládejme, že jiná lineární transformace $U: \mathbb{V} \to \mathbb{W}$ splňuje pro $i = 1, 2, \dots, n$ rovněž $U(\mathbf{v}_i) = \mathbf{w}_i$. Pak pro $\mathbf{x} = \sum_{i=1}^n a_i \mathbf{v}_i \in \mathbb{V}$ platí:</p>\[U(\mathbf{x}) = \sum_{i=1}^n a_i U(\mathbf{v}_i) = \sum_{i=1}^n a_i \mathbf{w}_i = T(\mathbf{x}_i)\] \[\therefore U = T.\]<p>Z i), ii) plyne, že lineární transformace splňující $T(\mathbf{v}_i) = \mathbf{w}_i$ pro $i = 1, 2, \dots, n$ je jednoznačně dána předpisem:</p>\[T(\mathbf{x}) = T\left( \sum_{i=1}^n a_i \mathbf{v}_i \right) = \sum_{i=1}^n a_i \mathbf{w}_i\]<p>$\blacksquare$</p><p><strong>Důsledek 7-1</strong><br /> Nechť vektorový prostor $\mathbb{V}$ obsahuje konečnou bázi $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$. Pokud dvě lineární transformace $U, T: \mathbb{V} \to \mathbf{W}$ splňují pro $i = 1, 2, \dots, n$ rovnost $U(\mathbf{v}_i) = T(\mathbf{v}_i)$, pak $U = T$.<br /> Tj. <u>pokud se dvě lineární transformace shodují na bázi, jsou totožné.</u></p></blockquote>]]> </content> </entry> <entry><title xml:lang="cs">Lineární závislost a lineární nezávislost, báze a dimenze</title><link href="https://www.yunseo.kim/cs/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="am" /><published>2025-09-16T00:00:00+09:00</published> <updated>2025-09-16T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/linear-dependence-and-independence-basis-and-dimension/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="cs">Shrnutí pojmů lineární závislosti a nezávislosti a definice báze a dimenze vektorového prostoru.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Shrnutí pojmů lineární závislosti a nezávislosti a definice báze a dimenze vektorového prostoru.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="předpoklady">Předpoklady</h2><ul><li><a href="/cs/posts/vectors-and-linear-combinations/">Vektory a lineární kombinace</a><li><a href="/cs/posts/vector-spaces-subspaces-and-matrices/">Vektorové prostory, podprostory a matice</a></ul><h2 id="lineární-závislost-a-lineární-nezávislost">Lineární závislost a lineární nezávislost</h2><p>Uvažujme nějaký <a href="/cs/posts/vector-spaces-subspaces-and-matrices/#vektorovy-prostor">vektorový prostor</a> $\mathbb{V}$ a <a href="/cs/posts/vector-spaces-subspaces-and-matrices/#podprostor">podprostor</a> $\mathbb{W}$. Řekněme, že chceme najít co nejmenší konečnou podmnožinu $S$, která $\mathbb{W}$ <a href="/cs/posts/vectors-and-linear-combinations/#generovani-span-linearni-kombinace-cmathbfv--dmathbfw">generuje</a>.</p><p>Je-li pro množinu $S = \{\mathbf{u}_1, \mathbf{u}_2, \mathbf{u}_3, \mathbf{u}_4 \}$ splněno $\mathrm{span}(S) = \mathbb{W}$, jak rozhodnout, zda neexistuje vlastní podmnožina $S$, která stále generuje $\mathbb{W}$? Je to totéž jako rozhodnout, zda lze některý vektor vybraný ze $S$ vyjádřit jako <a href="/cs/posts/vectors-and-linear-combinations/#linearni-kombinace-vektoru">lineární kombinaci</a> ostatních vektorů. Například nutná a postačující podmínka pro vyjádření $\mathbf{u}_4$ jako lineární kombinace zbývajících tří vektorů je existence skalárů $a_1, a_2, a_3$, které splňují</p>\[\mathbf{u}_4 = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + a_3\mathbf{u}_3\]<p>Protože je ale nepohodlné pokaždé pro $\mathbf{u}_1$, $\mathbf{u}_2$, $\mathbf{u}_3$, $\mathbf{u}_4$ sestavovat soustavu lineárních rovnic a zjišťovat, zda má řešení, trochu výraz upravme:</p>\[a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + a_3\mathbf{u}_3 + a_4\mathbf{u}_4 = \mathbf{0}\]<p>Pokud je některý vektor z $S$ lineární kombinací ostatních, pak při vyjádření nulového vektoru jako lineární kombinace vektorů z $S$ existuje takové vyjádření, v němž je alespoň jeden z koeficientů $a_1, a_2, a_3, a_4$ nenulový. Obrácené tvrzení je rovněž pravdivé: existuje-li vyjádření nulového vektoru jako lineární kombinace prvků $S$ s tím, že alespoň jeden z koeficientů $a_1, a_2, a_3, a_4$ je nenulový, pak je některý vektor z $S$ lineární kombinací ostatních.</p><p>Zobecněním toho definujeme <strong>lineární závislost</strong> a <strong>lineární nezávislost</strong> následovně.</p><blockquote class="prompt-info"><p><strong>Definice</strong><br /> Pro podmnožinu $S$ vektorového prostoru $\mathbb{V}$ říkáme, že množina $S$ (a její vektory) je <strong>lineárně závislá (linearly dependent)</strong>, existují-li konečně mnohé navzájem různé vektory $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \in S$ a skaláry $a_1, a_2, \dots, a_n$, z nichž alespoň jeden je nenulový, takové, že $a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n = \mathbf{0}$. V opačném případě je <strong>lineárně nezávislá (linearly independent)</strong>.</p></blockquote><p>Pro libovolné vektory $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ platí, že když $a_1 = a_2 = \cdots = a_n = 0$, pak $a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n = \mathbf{0}$; tomu se říká <strong>triviální vyjádření nulového vektoru (trivial representation of $\mathbf{0}$)</strong>.</p><p>Následující tři tvrzení o lineárně nezávislých množinách platí ve všech vektorových prostorech vždy. Zejména <strong>tvrzení 3</strong> je, jak jsme viděli, velmi užitečné při rozhodování, zda je nějaká konečná množina lineárně nezávislá.</p><blockquote class="prompt-info"><ul><li><strong>Tvrzení 1</strong>: Prázdná množina je lineárně nezávislá. Aby byla množina lineárně závislá, nesmí být prázdná.<li><strong>Tvrzení 2</strong>: Množina tvořená jediným nenulovým vektorem je lineárně nezávislá.<li><strong>Tvrzení 3</strong>: Nutnou a postačující podmínkou, aby byla množina lineárně nezávislá, je, že jediným způsobem, jak vyjádřit $\mathbf{0}$ jako lineární kombinaci dané množiny, je triviální vyjádření.</ul></blockquote><p>Důležité jsou také následující věty.</p><blockquote class="prompt-info"><p><strong>Věta 1</strong><br /> Nechť $\mathbb{V}$ je vektorový prostor a $S_1 \subseteq S_2 \subseteq \mathbb{V}$. Je-li $S_1$ lineárně závislá, pak je lineárně závislá i $S_2$.</p><p><strong>Důsledek 1-1</strong><br /> Nechť $\mathbb{V}$ je vektorový prostor a $S_1 \subseteq S_2 \subseteq \mathbb{V}$. Je-li $S_2$ lineárně nezávislá, pak je lineárně nezávislá i $S_1$.</p></blockquote><blockquote class="prompt-info"><p><strong>Věta 2</strong><br /> Uvažujme vektorový prostor $\mathbb{V}$ a lineárně nezávislou podmnožinu $S$. Pro vektor $\mathbf{v} \in \mathbb{V}$, který nepatří do $S$, je nutná a postačující podmínka pro to, aby $S \cup \{\mathbf{v}\}$ byla lineárně závislá, že $\mathbf{v} \in \mathrm{span}(S)$.</p><p>Jinými slovy: <strong>pokud žádná vlastní podmnožina $S$ nedokáže generovat stejný prostor jako $S$, pak je $S$ lineárně nezávislá.</strong></p></blockquote><h2 id="báze-a-dimenze">Báze a dimenze</h2><h3 id="báze">Báze</h3><p>Generující množina $S$ pro $\mathbb{W}$, která je <a href="#linearni-zavislost-a-linearni-nezavislost">lineárně nezávislá</a>, má zvláštní vlastnost: každý vektor z $\mathbb{W}$ lze nutně vyjádřit jako lineární kombinaci prvků $S$ a toto vyjádření je jediné (<strong>Věta 3</strong>). Proto se lineárně nezávislá generující množina pro nějaký vektorový prostor speciálně definuje jako <strong>báze (basis)</strong>.</p><blockquote class="prompt-info"><p><strong>Definice báze</strong><br /> Nechť $\mathbb{V}$ je vektorový prostor a $\beta$ je jeho podmnožina. Pokud je $\beta$ lineárně nezávislá a generuje $\mathbb{V}$, pak se $\beta$ nazývá <strong>báze (basis)</strong> prostoru $\mathbb{V}$. Říkáme také, že vektory v $\beta$ tvoří bázi prostoru $\mathbb{V}$.</p></blockquote><blockquote class="prompt-tip"><p>$\mathrm{span}(\emptyset) = \{\mathbf{0}\}$ a $\emptyset$ je lineárně nezávislá. Proto je $\emptyset$ bází bodového prostoru.</p></blockquote><p>Zejména následující speciální báze pro $F^n$ se nazývá <strong>standardní báze (standard basis)</strong> prostoru $F^n$.</p><blockquote class="prompt-info"><p><strong>Definice standardní báze</strong><br /> Pro vektorový prostor $F^n$ uvažujme následující vektory.</p>\[\mathbf{e}_1 = (1,0,0,\dots,0),\ \mathbf{e}_2 = (0,1,0,\dots,0),\ \dots, \mathbf{e}_n = (0,0,0,\dots,1)\]<p>Pak množina $\{\mathbf{e}_1, \mathbf{e}_2, \dots, \mathbf{e}_n \}$ je bází $F^n$ a nazývá se <strong>standardní báze (standard basis)</strong> prostoru $F^n$.</p></blockquote><blockquote class="prompt-info"><p><strong>Věta 3</strong><br /> Nechť $\mathbb{V}$ je vektorový prostor a $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \in \mathbb{V}$ jsou navzájem různé vektory. Nutnou a postačující podmínkou, aby množina $\beta = \{\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \}$ byla bází $\mathbb{V}$, je: „libovolný vektor $\mathbf{v} \in \mathbb{V}$ lze vyjádřit jako lineární kombinaci vektorů z $\beta$ a toto vyjádření je jediné“. Tj. pro jediné skalární $n$-tice $(a_1, a_2, \dots, a_n)$ musí platit</p>\[\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n\]</blockquote><p>Podle <strong>Věty 3</strong>, pokud $n$ navzájem různých vektorů $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ tvoří bázi vektorového prostoru $\mathbb{V}$, pak uvnitř tohoto prostoru je pro daný vektor $\mathbf{v}$ určena odpovídající skalární $n$-tice $(a_1, a_2, \dots, a_n)$ a naopak, je-li dána skalární $n$-tice, lze získat odpovídající vektor $\mathbf{v}$. Později to znovu shrnu při studiu <strong>invertibility</strong> a <strong>izomorfismů</strong>, ale v tomto případě jsou vektorové prostory $\mathbb{V}$ a $F^n$ <u>v podstatě totéž</u>.</p><blockquote class="prompt-info"><p><strong>Věta 4</strong><br /> Je-li pro konečnou množinu $S$ splněno $\mathrm{span}(S) = \mathbb{V}$, pak existuje podmnožina $S$, která je bází $\mathbb{V}$. Tedy v tomto případě je báze $\mathbb{V}$ konečná.</p></blockquote><blockquote class="prompt-tip"><p>Velká část vektorových prostorů spadá pod <strong>Větu 4</strong>, ale ne nutně všechny. <u>Báze nemusí být konečná množina</u>.</p></blockquote><h3 id="dimenze">Dimenze</h3><blockquote class="prompt-info"><p><strong>Věta 5: věta o nahrazení (replacement theorem)</strong><br /> Nechť $G$ je množina $n$ vektorů taková, že $\mathrm{span}(G) = \mathbb{V}$. Pokud je $L$ podmnožina $\mathbb{V}$ tvořená $m$ lineárně nezávislými vektory, pak $m\leq n$. Dále existuje množina $H \subseteq G$ s $n-m$ prvky taková, že $\mathrm{span}(L \cup H) = \mathbb{V}$.</p></blockquote><p>Z toho získáme dvě velmi důležitá důsledková tvrzení.</p><blockquote class="prompt-info"><p><strong>Důsledek 5-1 věty o nahrazení</strong><br /> Předpokládejme, že vektorový prostor $\mathbb{V}$ obsahuje konečnou bázi. Pak každá báze $\mathbb{V}$ je konečná a všechny báze mají stejný počet vektorů.</p></blockquote><p>Podle toho je počet vektorů tvořících bázi $\mathbb{V}$ neměnnou, podstatnou vlastností prostoru $\mathbb{V}$; této vlastnosti se říká <strong>dimenze (dimension)</strong>.</p><blockquote class="prompt-info"><p><strong>Definice dimenze</strong><br /> Vektorový prostor, který má konečnou bázi, se nazývá <strong>konečněrozměrný (finite-dimensional)</strong>. V tomto případě se počet prvků báze $n$ nazývá <strong>dimenze (dimension)</strong> daného vektorového prostoru a značí se $\dim(\mathbb{V})$. Vektorový prostor, který není konečněrozměrný, je <strong>nekonečněrozměrný (infinite-dimensional)</strong>.</p></blockquote><blockquote class="prompt-tip"><ul><li>$\dim(\{\mathbf{0}\}) = 0$<li>$\dim(F^n) = n$<li>$\dim(\mathcal{M}_{m \times n}(F)) = mn$</ul></blockquote><blockquote class="prompt-tip"><p>Dimenze vektorového prostoru se může lišit podle toho, nad jakým tělesem je uvažován.</p><ul><li>Nad tělesem komplexních čísel $\mathbb{C}$ má komplexní vektorový prostor dimenzi $1$ a bázi $\{1\}$.<li>Nad tělesem reálných čísel $\mathbb{R}$ má komplexní vektorový prostor dimenzi $2$ a bázi $\{1,i\}$.</ul></blockquote><p>V konečněrozměrném vektorovém prostoru $\mathbb{V}$ nemůže být žádná podmnožina s více než $\dim(\mathbb{V})$ vektory lineárně nezávislá.</p><blockquote class="prompt-info"><p><strong>Důsledek 5-2 věty o nahrazení</strong><br /> Nechť $\mathbb{V}$ je vektorový prostor dimenze $n$.</p><ol><li>Každá konečná generující množina $\mathbb{V}$ musí obsahovat alespoň $n$ vektorů a generující množina $\mathbb{V}$ tvořená $n$ vektory je bází $\mathbb{V}$.<li>Lineárně nezávislá podmnožina $\mathbb{V}$ tvořená $n$ vektory je bází $\mathbb{V}$.<li>Každou lineárně nezávislou podmnožinu $\mathbb{V}$ lze rozšířit na bázi. Tj. je-li $L \subseteq \mathbb{V}$ lineárně nezávislá, pak existuje báze $\beta$ prostoru $\mathbb{V}$ taková, že $\beta \supseteq L$.</ol></blockquote><h3 id="dimenze-podprostoru">Dimenze podprostoru</h3><blockquote class="prompt-info"><p><strong>Věta 6</strong><br /> Pro konečněrozměrný vektorový prostor $\mathbb{V}$ je každý jeho podprostor $\mathbb{W}$ konečněrozměrný a platí $\dim(\mathbb{W}) \leq \dim(\mathbb{V})$. Zejména</p>\[\dim(\mathbb{W}) = \dim(\mathbb{V}) \quad \Rightarrow \quad \mathbb{V} = \mathbb{W}.\]<p><strong>Důsledek 6-1</strong><br /> Pro podprostor $\mathbb{W}$ konečněrozměrného vektorového prostoru $\mathbb{V}$ lze libovolnou bázi $\mathbb{W}$ rozšířit na bázi $\mathbb{V}$.</p></blockquote><p>Podle <strong>Věty 6</strong> může mít podprostor $\mathbb{R}^3$ dimenzi $0,1,2,3$.</p><ul><li>0 rozměrů: bodový prostor $\{\mathbf{0}\}$ obsahující pouze počátek ($\mathbf{0}$)<li>1 rozměr: přímka procházející počátkem ($\mathbf{0}$)<li>2 rozměry: rovina obsahující počátek ($\mathbf{0}$)<li>3 rozměry: celý eukleidovský trojrozměrný prostor</ul>]]> </content> </entry> <entry><title xml:lang="cs">Vektorové prostory, podprostory a matice</title><link href="https://www.yunseo.kim/cs/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="am" /><published>2025-09-13T00:00:00+09:00</published> <updated>2025-09-13T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/vector-spaces-subspaces-and-matrices/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="cs">Definice vektorových prostorů a podprostorů s příklady (F^n, prostor matic, prostor funkcí) a přehled symetrických, antisymetrických, trojúhelníkových a diagonálních matic.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Definice vektorových prostorů a podprostorů s příklady (F^n, prostor matic, prostor funkcí) a přehled symetrických, antisymetrických, trojúhelníkových a diagonálních matic.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li><strong>matice (matrix)</strong><ul><li>Prvek v $i$-tém řádku a $j$-tém sloupci matice $A$ značíme $A_{ij}$ nebo $a_{ij}$<li><strong>diagonální prvek (diagonal entry)</strong>: prvek $a_{ij}$ pro $i=j$<li>Prvky $a_{i1}, a_{i2}, \dots, a_{in}$ nazýváme $i$-tý <strong>řádek (row)</strong> této matice<ul><li>Každý řádek matice lze vyjádřit jako vektor z $F^n$<li>A navíc lze řádkový vektor z $F^n$ chápat jako další matici rozměru $1 \times n$</ul><li>Prvky $a_{1j}, a_{2j}, \dots, a_{mj}$ nazýváme $j$-tý <strong>sloupec (column)</strong> této matice<ul><li>Každý sloupec matice lze vyjádřit jako vektor z $F^m$<li>A navíc lze sloupcový vektor z $F^m$ chápat jako další matici rozměru $m \times 1$</ul><li><strong>nulová matice (zero matrix)</strong>: matice, jejíž všechny prvky jsou $0$, značí se $O$<li><strong>čtvercová matice (square matrix)</strong>: matice se stejným počtem řádků a sloupců<li>Pro dvě matice $A, B$ typu $m \times n$ definujeme, že jsou <strong>stejné</strong> ($A=B$), pokud pro všechna $1 \leq i \leq m$, $1 \leq j \leq n$ platí $A_{ij} = B_{ij}$ (tj. všechny odpovídající prvky se shodují)<li><strong>transponovaná matice (transpose matrix)</strong>: pro matici $A$ typu $m \times n$ je transpozice $A^T$ matice typu $n \times m$, která vznikne prohozením řádků a sloupců<li><strong>symetrická matice (symmetric matrix)</strong>: čtvercová matice $A$ splňující $A^T = A$<li><strong>antisymetrická matice (skew-symmetric matrix)</strong>: čtvercová matice $B$ splňující $B^T = -B$<li><strong>trojúhelníková matice (triangular matrix)</strong><ul><li><strong>horní trojúhelníková matice (upper triangular matrix)</strong>: všechny prvky pod diagonálou jsou $0$ (tj. $i&gt;j \Rightarrow A_{ij}=0$), obvykle se značí $U$<li><strong>dolní trojúhelníková matice (lower triangular matrix)</strong>: všechny prvky nad diagonálou jsou $0$ (tj. $i&lt;j \Rightarrow A_{ij}=0$), obvykle se značí $L$</ul><li><strong>diagonální matice (diagonal matrix)</strong>: čtvercová matice, jejíž všechny nediagonální prvky jsou $0$ (tj. $i \neq j \Rightarrow M_{ij}=0$ pro matici $n \times n$), obvykle se značí $D$</ul><li>Typické vektorové prostory<ul><li><strong>$n$-tice $F^n$</strong>:<ul><li>množina všech uspořádaných $n$-tic s prvky z tělesa $F$<li>značí se $F^n$ a je to $F$-vektorový prostor</ul><li><strong>prostor matic (matrix space)</strong>:<ul><li>množina všech matic typu $m \times n$ s prvky z tělesa $F$<li>značí se $\mathcal{M}_{m \times n}(F)$ a je to vektorový prostor</ul><li><strong>prostor funkcí (function space)</strong>:<ul><li>pro neprázdnou množinu $S$ a těleso $F$ je to množina všech funkcí ze $S$ do $F$<li>značí se $\mathcal{F}(S,F)$ a je to vektorový prostor</ul></ul><li><strong>podprostor (subspace)</strong><ul><li>Je-li $\mathbb{W}$ podmnožina $F$-vektorového prostoru $\mathbb{V}$ a zároveň je $F$-vektorovým prostorem se stejnými operacemi sčítání a násobení skalárem, jaké jsou definovány na $\mathbb{V}$, pak $\mathbb{W}$ nazýváme <strong>podprostorem (subspace)</strong> prostoru $\mathbb{V}$<li>Pro každý vektorový prostor $\mathbb{V}$ jsou $\mathbb{V}$ samotný i $\{0\}$ podprostory; zejména $\{0\}$ se nazývá <strong>nulový podprostor (zero subspace)</strong><li>Pokud nějaká podmnožina vektorového prostoru obsahuje nulový vektor a je uzavřená na <a href="/cs/posts/vectors-and-linear-combinations/#lineární-kombinace-vektorů">lineární kombinace</a> (tj. $\mathrm{span}(\mathbb{W})=\mathbb{W}$), pak je to podprostor</ul></ul></blockquote><h2 id="prerequisites">Prerequisites</h2><ul><li><a href="/cs/posts/vectors-and-linear-combinations/">Vektory a lineární kombinace</a></ul><h2 id="vektorový-prostor">Vektorový prostor</h2><p>Jak jsme krátce viděli i v článku <a href="/cs/posts/vectors-and-linear-combinations/#vektor-v-širším-smyslu-prvek-vektorového-prostoru">Vektory a lineární kombinace</a>, definice vektoru a vektorového prostoru jako algebraické struktury je následující.</p><blockquote class="prompt-info"><p><strong>Definice</strong><br /> <strong>Vektorový prostor (vector space)</strong> neboli <strong>lineární prostor (linear space)</strong> $\mathbb{V}$ nad tělesem $F$ je množina vybavená dvěma operacemi, <strong>sčítáním</strong> a <strong>násobením skalárem</strong>, které splňují následujících 8 podmínek. Prvky tělesa $F$ nazýváme <strong>skaláry (scalar)</strong> a prvky vektorového prostoru $\mathbb{V}$ nazýváme <strong>vektory (vector)</strong>.</p><ul><li><strong>Součet (sum)</strong>: pro dva prvky $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ je přiřazen jednoznačný prvek $\mathbf{x} + \mathbf{y} \in \mathbb{V}$. Tomuto $\mathbf{x} + \mathbf{y}$ říkáme <strong>součet</strong> prvků $\mathbf{x}$ a $\mathbf{y}$.<li><strong>Násobení skalárem (scalar multiplication)</strong>: každému prvku $a \in F$ a každému prvku $\mathbf{x} \in \mathbb{V}$ je přiřazen jednoznačný prvek $a\mathbf{x} \in \mathbb{V}$. Tomuto $a\mathbf{x}$ říkáme <strong>skalární násobek (scalar multiple)</strong> vektoru $\mathbf{x}$.</ul><ol><li>Pro všechna $\mathbf{x},\mathbf{y} \in \mathbb{V}$ platí $\mathbf{x} + \mathbf{y} = \mathbf{y} + \mathbf{x}$. (komutativita sčítání)<li>Pro všechna $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$ platí $(\mathbf{x}+\mathbf{y})+\mathbf{z} = \mathbf{x}+(\mathbf{y}+\mathbf{z})$. (asociativita sčítání)<li>Pro každé $\mathbf{x} \in \mathbb{V}$ existuje $\mathbf{0} \in \mathbb{V}$ takové, že $\mathbf{x} + \mathbf{0} = \mathbf{x}$. (nulový vektor, neutrální prvek pro sčítání)<li>Ke každému $\mathbf{x} \in \mathbb{V}$ existuje $\mathbf{y} \in \mathbb{V}$ takové, že $\mathbf{x}+\mathbf{y}=\mathbf{0}$. (inverzní prvek pro sčítání)<li>Pro každé $\mathbf{x} \in \mathbb{V}$ platí $1\mathbf{x} = \mathbf{x}$. (neutrální prvek pro násobení)<li>Pro všechna $a,b \in F$ a všechna $\mathbf{x} \in \mathbb{V}$ platí $(ab)\mathbf{x} = a(b\mathbf{x})$. (asociativita násobení skalárem)<li>Pro všechna $a \in F$ a všechna $\mathbf{x},\mathbf{y} \in \mathbb{V}$ platí $a(\mathbf{x}+\mathbf{y}) = a\mathbf{x} + a\mathbf{y}$. (distributivita násobení skalárem vůči sčítání 1)<li>Pro všechna $a,b \in F$ a všechna $\mathbf{x},\mathbf{y} \in \mathbb{V}$ platí $(a+b)\mathbf{x} = a\mathbf{x} + b\mathbf{x}$. (distributivita násobení skalárem vůči sčítání 2)</ol></blockquote><p>Přesněji bychom měli psát „$F$-vektorový prostor $\mathbb{V}$“, ale při práci s vektorovými prostory obvykle těleso není zásadní a nehrozí-li záměna, těleso $F$ vynecháváme a píšeme jen „vektorový prostor $\mathbb{V}$“.</p><h3 id="prostor-matic">Prostor matic</h3><h4 id="řádkové-a-sloupcové-vektory">Řádkové a sloupcové vektory</h4><p>Množinu všech uspořádaných $n$-tic s prvky z tělesa $F$ značíme $F^n$. Pro $u = (a_1, a_2, \dots, a_n) \in F^n$, $v = (b_1, b_2, \dots, b_n) \in F^n$ definujeme součet a násobení skalárem následovně; pak je $F^n$ $F$-vektorový prostor.</p>\[\begin{align*} u + v &amp;= (a_1+b_1, a_2+b_2, \dots, a_n+b_n), \\ cu &amp;= (ca_1, ca_2, \dots, ca_n) \end{align*}\]<p>Vektor z $F^n$ se při samostatném zápisu obvykle vyjadřuje spíše jako <strong>sloupcový vektor (column vector)</strong> než jako <strong>řádkový vektor (row vector)</strong> $(a_1, a_2, \dots, a_n)$, tj.</p>\[\begin{pmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{pmatrix}\]<blockquote class="prompt-tip"><p>Protože zápis sloupcovým vektorem zabírá hodně místa, někdy se používá <a href="#transponovaná-matice-symetrická-matice-antisymetrická-matice">transpozice</a> a zapisuje se $(a_1, a_2, \dots, a_n)^T$.</p></blockquote><h4 id="matice-a-prostor-matic">Matice a prostor matic</h4><p>Na druhé straně, $m \times n$ <strong>matice (matrix)</strong> s prvky z $F$ je obdélníkové uspořádání prvků následujícího tvaru; značí se kurzívními velkými písmeny ($A, B, C$ apod.).</p>\[\begin{pmatrix} a_{11} &amp; a_{12} &amp; \cdots &amp; a_{1n} \\ a_{21} &amp; a_{22} &amp; \cdots &amp; a_{2n} \\ \vdots &amp; \vdots &amp; &amp; \vdots \\ a_{m1} &amp; a_{m2} &amp; \cdots &amp; a_{mn} \end{pmatrix}\]<ul><li>Prvek v $i$-tém řádku a $j$-tém sloupci matice $A$ značíme $A_{ij}$ nebo $a_{ij}$.<li>Všechny $a_{ij}$ ($1 \leq i \leq m$, $1 \leq j \leq n$) jsou prvky tělesa $F$.<li>Prvek $a_{ij}$ pro $i=j$ nazýváme <strong>diagonální prvek (diagonal entry)</strong>.<li>Prvky $a_{i1}, a_{i2}, \dots, a_{in}$ nazýváme $i$-tý <strong>řádek (row)</strong> této matice. Každý řádek matice lze vyjádřit jako vektor z $F^n$, a navíc lze řádkový vektor z $F^n$ vyjádřit jako další matici rozměru $1 \times n$.<li>Prvky $a_{1j}, a_{2j}, \dots, a_{mj}$ nazýváme $j$-tý <strong>sloupec (column)</strong> této matice. Každý sloupec matice lze vyjádřit jako vektor z $F^m$, a navíc lze sloupcový vektor z $F^m$ vyjádřit jako další matici rozměru $m \times 1$.<li>Matici typu $m \times n$, jejíž všechny prvky jsou $0$, nazýváme <strong>nulová matice (zero matrix)</strong> a značíme ji $O$.<li>Matici se stejným počtem řádků a sloupců nazýváme <strong>čtvercová matice (square matrix)</strong>.<li>Pro dvě matice $A, B$ typu $m \times n$ definujeme, že jsou <strong>stejné</strong> ($A=B$), pokud pro všechna $1 \leq i \leq m$, $1 \leq j \leq n$ platí $A_{ij} = B_{ij}$ (tj. všechny odpovídající prvky se shodují).</ul><p>Množinu všech matic typu $m \times n$ s prvky z tělesa $F$ značíme $\mathcal{M}_{m \times n}(F)$. Pro $\mathbf{A},\mathbf{B} \in \mathcal{M}_{m \times n}(F)$ a $c \in F$ definujeme součet a násobení skalárem takto; pak je $\mathcal{M}_{m \times n}(F)$ vektorový prostor a nazývá se <strong>prostor matic (matrix space)</strong>.</p>\[\begin{align*} (\mathbf{A}+\mathbf{B})_{ij} &amp;= \mathbf{A}_{ij} + \mathbf{B}_{ij}, \\ (c\mathbf{A})_{ij} &amp;= c\mathbf{A}_{ij} \\ \text{(kde }1 \leq i \leq &amp;m, 1 \leq j \leq n \text{)} \end{align*}\]<p>Jde o přirozené rozšíření operací definovaných na $F^n$ a $F^m$.</p><h3 id="prostor-funkcí">Prostor funkcí</h3><p>Pro neprázdnou množinu $S$ a těleso $F$ je $\mathcal{F}(S,F)$ množina všech funkcí ze $S$ do $F$. Řekneme, že dvě funkce $f, g$ jsou <strong>stejné</strong> ($f=g$), pokud pro všechna $s \in S$ platí $f(s) = g(s)$.</p><p>Pro $f,g \in \mathcal{F}(S,F)$, $c \in F$, $s \in S$ definujeme součet a násobení skalárem následovně; pak je $\mathcal{F}(S,F)$ vektorový prostor a nazývá se <strong>prostor funkcí (function space)</strong>.</p>\[\begin{align*} (f + g)(s) &amp;= f(s) + g(s), \\ (cf)(s) &amp;= c[f(s)] \end{align*}\]<h2 id="podprostor">Podprostor</h2><blockquote class="prompt-info"><p><strong>Definice</strong><br /> Je-li $\mathbb{W}$ podmnožina $F$-vektorového prostoru $\mathbb{V}$ a zároveň je $F$-vektorovým prostorem se stejnými operacemi sčítání a násobení skalárem, jaké jsou definovány na $\mathbb{V}$, pak $\mathbb{W}$ nazýváme <strong>podprostorem (subspace)</strong> prostoru $\mathbb{V}$.</p></blockquote><p>Pro každý vektorový prostor $\mathbb{V}$ jsou $\mathbb{V}$ samotný i $\{0\}$ podprostory; zejména $\{0\}$ se nazývá <strong>nulový podprostor (zero subspace)</strong>.</p><p>Zda je daná podmnožina podprostorem, lze ověřit pomocí následující věty.</p><blockquote class="prompt-info"><p><strong>Věta 1</strong><br /> Pro vektorový prostor $\mathbb{V}$ a jeho podmnožinu $\mathbb{W}$ je nutná a postačující podmínka pro to, aby $\mathbb{W}$ byla podprostorem $\mathbb{V}$, splnění následujících tří podmínek. Operace jsou stejné jako ty, které jsou definovány na $\mathbb{V}$.</p><ol><li>$\mathbf{0} \in \mathbb{W}$<li>$\mathbf{x}+\mathbf{y} \in \mathbb{W} \quad \forall\ \mathbf{x} \in \mathbb{W},\ \mathbf{y} \in \mathbb{W}$<li>$c\mathbf{x} \in \mathbb{W} \quad \forall\ c \in F,\ \mathbf{x} \in \mathbb{W}$</ol><p>Stručně: pokud množina obsahuje nulový vektor a je uzavřená na <a href="/cs/posts/vectors-and-linear-combinations/#lineární-kombinace-vektorů">lineární kombinace</a> (tj. $\mathrm{span}(\mathbb{W})=\mathbb{W}$), pak je to podprostor.</p></blockquote><p>Dále platí následující tvrzení.</p><blockquote class="prompt-info"><p><strong>Věta 2</strong></p><ul><li><p>Generovaný podprostor $\mathrm{span}(S)$ libovolné podmnožiny $S$ vektorového prostoru $\mathbb{V}$ je podprostor $\mathbb{V}$, který obsahuje $S$.</p>\[S \subset \mathrm{span}(S) \leq \mathbb{V} \quad \forall\ S \subset \mathbb{V}.\]<li><p>Každý podprostor $\mathbb{V}$, který obsahuje $S$, musí nutně obsahovat i generovaný podprostor $S$.</p>\[\mathbb{W}\supset \mathrm{span}(S) \quad \forall\ S \subset \mathbb{W} \leq \mathbb{V}.\]</ul></blockquote><blockquote class="prompt-info"><p><strong>Věta 3</strong><br /> Pro podprostory vektorového prostoru $\mathbb{V}$ platí, že libovolný průnik těchto podprostorů je opět podprostorem $\mathbb{V}$.</p></blockquote><h3 id="transponovaná-matice-symetrická-matice-antisymetrická-matice">Transponovaná matice, symetrická matice, antisymetrická matice</h3><p>Pro matici $A$ typu $m \times n$ je její <strong>transponovaná matice (transpose matrix)</strong> $A^T$ matice typu $n \times m$, která vznikne prohozením řádků a sloupců matice $A$.</p>\[(A^T)_{ij} = A_{ji}\] \[\begin{pmatrix} 1 &amp; 2 &amp; 3 \\ 4 &amp; 5 &amp; 6 \end{pmatrix}^T = \begin{pmatrix} 1 &amp; 4 \\ 2 &amp; 5 \\ 3 &amp; 6 \end{pmatrix}\]<p>Matici $A$ splňující $A^T = A$ nazýváme <strong>symetrická matice (symmetric matrix)</strong> a matici $B$ splňující $B^T = -B$ nazýváme <strong>antisymetrická matice (skew-symmetric matrix)</strong>. Symetrická i antisymetrická matice musí být nutně čtvercové.</p><p>Dvě množiny $\mathbb{W}_1, \mathbb{W}_2$ tvořené všemi symetrickými, resp. antisymetrickými maticemi z $\mathcal{M}_{n \times n}(F)$ jsou podprostory $\mathcal{M}_{n \times n}(F)$. Jinými slovy, $\mathbb{W}_1, \mathbb{W}_2$ jsou uzavřené na součet a násobení skalárem.</p><h3 id="trojúhelníkové-matice-diagonální-matice">Trojúhelníkové matice, diagonální matice</h3><p>Tyto dva typy matic jsou také zvlášť důležité.</p><p>Nejprve sjednotíme následující dva typy matic pod označení <strong>trojúhelníková matice (triangular matrix)</strong>.</p><ul><li><strong>horní trojúhelníková matice (upper triangular matrix)</strong>: všechny prvky pod diagonálou jsou $0$ (tj. $i&gt;j \Rightarrow A_{ij}=0$), obvykle se značí $U$<li><strong>dolní trojúhelníková matice (lower triangular matrix)</strong>: všechny prvky nad diagonálou jsou $0$ (tj. $i&lt;j \Rightarrow A_{ij}=0$), obvykle se značí $L$</ul><p>Čtvercovou matici, jejíž všechny nediagonální prvky jsou $0$, tj. matici $n \times n$ splňující $i \neq j \Rightarrow M_{ij}=0$, nazýváme <strong>diagonální matice (diagonal matrix)</strong> a obvykle ji značíme $D$. Diagonální matice je současně horní i dolní trojúhelníková matice.</p><p>Množina horních trojúhelníkových matic, množina dolních trojúhelníkových matic i množina diagonálních matic jsou všechny podprostory $\mathcal{M}_{m \times n}(F)$.</p>]]> </content> </entry> <entry><title xml:lang="cs">Vnitřní součin a norma</title><link href="https://www.yunseo.kim/cs/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="am" /><published>2025-09-10T00:00:00+09:00</published> <updated>2025-09-10T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/inner-product-and-norm/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="cs">Definice vnitřního součinu a skalárního součinu, a z nich odvozené definice délky/normy vektoru a úhlu mezi vektory.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Definice vnitřního součinu a skalárního součinu, a z nich odvozené definice délky/normy vektoru a úhlu mezi vektory.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="předpoklady">Předpoklady</h2><ul><li><a href="/cs/posts/vectors-and-linear-combinations/">Vektory a lineární kombinace</a></ul><h2 id="vnitřní-součin">Vnitřní součin</h2><p>Definice <strong>vnitřního součinu (inner product)</strong> na obecném $F$-vektorovém prostoru je následující.</p><blockquote class="prompt-info"><p><strong>Definice vnitřního součinu (inner product) a prostoru s vnitřním součinem (inner product space)</strong><br /> Uvažujme $F$-vektorový prostor $\mathbb{V}$. <strong>Vnitřní součin (inner product)</strong> $\langle \mathbf{x},\mathbf{y} \rangle$ na $\mathbb{V}$ definujeme jako funkci, která každé uspořádané dvojici libovolných vektorů $\mathbf{x}$ a $\mathbf{y}$ z $\mathbb{V}$ přiřadí skalár z $F$ a splňuje následující podmínky.</p><p>Pro libovolné $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$ a libovolné $c \in F$ platí</p><ol><li>$\langle \mathbf{x}+\mathbf{z}, \mathbf{y} \rangle = \langle \mathbf{x}, \mathbf{y} \rangle + \langle \mathbf{z}, \mathbf{y} \rangle$<li>$\langle c\mathbf{x}, \mathbf{y} \rangle = c \langle \mathbf{x}, \mathbf{y} \rangle$<li>$\overline{\langle \mathbf{x}, \mathbf{y} \rangle} = \langle \mathbf{y}, \mathbf{x} \rangle$ ($\overline{\mathbf{z}}$ je komplexně sdružené číslo k $\mathbf{z}$)<li>Pokud $\mathbf{x} \neq \mathbf{0}$, pak $\langle \mathbf{x}, \mathbf{x} \rangle$ je kladné.</ol><p>$F$-vektorový prostor $\mathbb{V}$ vybavený vnitřním součinem se nazývá <strong>prostor s vnitřním součinem (inner product space)</strong>. Zejména pro $F=\mathbb{C}$ jde o <strong>komplexní prostor s vnitřním součinem (complex inner product space)</strong> a pro $F=\mathbb{R}$ o <strong>reálný prostor s vnitřním součinem (real inner product space)</strong>.</p></blockquote><p>Zvlášť důležitý je následující vnitřní součin, kterému se říká <strong>standardní vnitřní součin (standard inner product)</strong>. Lze ověřit, že splňuje všechny čtyři výše uvedené podmínky.</p><blockquote class="prompt-info"><p><strong>Definice standardního vnitřního součinu (standard inner product)</strong><br /> Pro dva vektory $\mathbf{x}=(a_1, a_2, \dots, a_n)$, $\mathbf{y}=(b_1, b_2, \dots, b_n)$ v $F^n$ definujeme <strong>standardní vnitřní součin (standard inner product)</strong> na $F^n$ takto:</p>\[\langle \mathbf{x}, \mathbf{y} \rangle = \sum_{i=1}^n a_i \overline{b_i}\]</blockquote><p>Je-li $F=\mathbb{R}$, pak komplexně sdružené číslo k reálnému číslu je ono samo, takže standardní vnitřní součin má tvar $\sum_{i=1}^n a_i b_i$. V tomto speciálním případě se standardní vnitřní součin často značí místo $\langle \mathbf{x}, \mathbf{y} \rangle$ jako $\mathbf{x} \cdot \mathbf{y}$ a nazývá se <strong>skalární součin (dot product)</strong> nebo <strong>skalarový součin (scalar product)</strong>.</p><blockquote class="prompt-info"><p><strong>Definice skalárního součinu (dot product) / skalarového součinu (scalar product)</strong><br /> Pro $\mathbf{v}=(v_1, v_2, \dots, v_n)$, $\mathbf{w}=(w_1, w_2, \dots, w_n)$ v $\mathbb{R}^n$ definujeme <strong>skalární součin (dot product)</strong> neboli <strong>skalarový součin (scalar product)</strong> na $\mathbb{R}^n$ takto:</p>\[\mathbf{v} \cdot \mathbf{w} = \sum_{i=1}^n v_i w_i = v_1 w_1 + v_2 w_2 + \cdots + v_n w_n\]</blockquote><blockquote class="prompt-warning"><p>Zde uvedený „skalarový součin (<strong>scalar product</strong>)“ je operace mezi vektory a liší se od operace „skalární násobení (<strong>scalar multiplication</strong>)“ mezi skalárem a vektorem, kterou jsme probírali v článku <a href="/cs/posts/vectors-and-linear-combinations/">Vektory a lineární kombinace</a>. Protože anglické výrazy jsou si podobné a navíc <a href="https://www.kms.or.kr/mathdict/list.html?key=kname&amp;keyword=%EC%8A%A4%EC%B9%BC%EB%9D%BC%EA%B3%B1">v terminologii Korejské matematické společnosti se korejský překlad dokonce shoduje</a>, je třeba dávat pozor, aby nedošlo k záměně.</p><p>Abychom předešli nejasnostem, budeme dále pokud možno používat označení <strong>skalární součin (dot product)</strong>.</p></blockquote><blockquote class="prompt-tip"><p>V eukleidovském prostoru vnitřní součin (inner product) splývá se skalárním součinem (dot product), a proto se často (pokud to kontext dovolí) skalární součin zkráceně označuje jako vnitřní součin. Přísně vzato je však vnitřní součin obecnější pojem, který skalární součin zahrnuje.</p></blockquote><pre><code class="language-mermaid">flowchart TD
    A["Vnitřní součin (Inner Product)"] --&gt;|zahrnuje| B["Standardní vnitřní součin (Standard Inner Product)"]
    B --&gt;|"F = R (těleso reálných čísel)"| C["Skalární/skalarový součin (Dot/Scalar Product)"]

    %% zahrnutí (relační značení)
    C -. zahrnuto .-&gt; B
    B -. zahrnuto .-&gt; A
</code></pre><h2 id="délka--norma-vektoru">Délka / norma vektoru</h2><p>Pro vektor $\mathbf{v}=(v_1, v_2, \dots, v_n)$ v $\mathbb{R}^n$ definujeme eukleidovskou délku vektoru $\mathbf{v}$ pomocí skalárního součinu takto:</p>\[\| \mathbf{v} \| = \sqrt{\mathbf{v} \cdot \mathbf{v}} = \left[ \sum_{i=1}^n |v_i|^2 \right]^{1/2} = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2}\]<p>Obecněji, v libovolném prostoru s vnitřním součinem definujeme <strong>délku (length)</strong> neboli <strong>normu (norm)</strong> vektoru takto:</p>\[\| \mathbf{x} \| = \sqrt{\langle \mathbf{x}, \mathbf{x} \rangle}\]<p>V obecném prostoru s vnitřním součinem platí pro normu vektoru následující důležité vlastnosti.</p><blockquote class="prompt-info"><p><strong>Věta</strong><br /> Nechť $\mathbb{V}$ je $F$-prostor s vnitřním součinem, $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ jsou libovolné vektory a $c \in F$ je skalár. Pak platí:</p><ol><li>$\|c\mathbf{x}\| = |c| \cdot \|\mathbf{x}\|$<li>Platí obojí:<ul><li>$\|\mathbf{x}\| = 0 \iff \mathbf{x}=\mathbf{0}$<li>$\|\mathbf{x}\| \geq 0 \ \forall \mathbf{x}$</ul><li><strong>Cauchyho–Schwarzova nerovnost (Cauchy-Schwarz inequality)</strong>: $| \langle \mathbf{x}, \mathbf{y} \rangle | \leq \|\mathbf{x}\| \cdot \|\mathbf{y}\|$ (rovnost nastává tehdy, když je jeden z vektorů $\mathbf{x}$ a $\mathbf{y}$ skalárním násobkem druhého)<li><strong>Trojúhelníková nerovnost (triangle inequality)</strong>: $\| \mathbf{x} + \mathbf{y} \| \leq \|\mathbf{x}\| + \|\mathbf{y}\|$ (rovnost nastává tehdy, když je jeden z vektorů $\mathbf{x}$ a $\mathbf{y}$ skalárním násobkem druhého a oba mají stejný směr)</ol></blockquote><h2 id="úhel-mezi-vektory-a-jednotkový-vektor">Úhel mezi vektory a jednotkový vektor</h2><p>Vektor délky $1$ se nazývá <strong>jednotkový vektor (unit vector)</strong>. Dále, pro dva vektory $\mathbf{v}=(v_1, v_2, \dots, v_n)$, $\mathbf{w}=(w_1, w_2, \dots, w_n)$ v $\mathbb{R}^n$ platí $\mathbf{v} \cdot \mathbf{w} = \|\mathbf{v}\| \cdot \|\mathbf{w}\| \cos\theta$, a odtud lze určit úhel $\theta$ ($0 \leq \theta \leq \pi$) mezi vektory $\mathbf{v}$ a $\mathbf{w}$.</p>\[\theta = \arccos{\frac{\mathbf{v} \cdot \mathbf{w}}{\|\mathbf{v}\| \cdot \|\mathbf{w}\|}}\]<p>Pokud $\mathbf{v} \cdot \mathbf{w} = 0$, říkáme, že jsou dva vektory <strong>kolmé (perpendicular)</strong> neboli <strong>ortogonální (orthogonal)</strong>.</p><blockquote class="prompt-tip"><p>Jsou-li vektory $\mathbf{v}$ a $\mathbf{w}$ kolmé, pak:</p>\[\begin{align*} \| \mathbf{v} + \mathbf{w} \|^2 &amp;= (\mathbf{v} + \mathbf{w}) \cdot (\mathbf{v} + \mathbf{w}) \\ &amp;= \mathbf{v} \cdot \mathbf{v} + \mathbf{v} \cdot \mathbf{w} + \mathbf{w} \cdot \mathbf{v} + \mathbf{w} \cdot \mathbf{w} \\ &amp;= \mathbf{v} \cdot \mathbf{v} + \mathbf{w} \cdot \mathbf{w} \\ &amp;= \|\mathbf{v}\|^2 + \|\mathbf{w}\|^2. \end{align*}\]</blockquote><p>Zobecníme-li to na libovolný prostor s vnitřním součinem, dostaneme následující.</p><blockquote class="prompt-info"><p><strong>Definice</strong><br /> Uvažujme prostor s vnitřním součinem $\mathbb{V}$. Pro vektory $\mathbf{x}, \mathbf{y}$ v $\mathbb{V}$ definujeme, že jsou <strong>ortogonální (orthogonal)</strong> neboli <strong>kolmé (perpendicular)</strong>, jestliže $\langle \mathbf{x}, \mathbf{y} \rangle = 0$. Dále:</p><ol><li>Pro podmnožinu $S$ prostoru $\mathbb{V}$: jsou-li každé dva různé vektory z $S$ navzájem ortogonální, nazývá se $S$ <strong>ortogonální množina (orthogonal set)</strong>.<li>Vektor $\mathbf{x} \in \mathbb{V}$ s $\|\mathbf{x}\|=1$ se nazývá <strong>jednotkový vektor (unit vector)</strong>.<li>Je-li podmnožina $S$ prostoru $\mathbb{V}$ ortogonální množinou a skládá se pouze z jednotkových vektorů, nazývá se $S$ <strong>ortonormální množina (orthonormal set)</strong>.</ol></blockquote><p>Nutná a postačující podmínka pro to, aby množina $S = { \mathbf{v}_1, \mathbf{v}_2, \dots }$ byla ortonormální, je $\langle \mathbf{v}_i, \mathbf{v}_j \rangle = \delta_{ij}$. Násobení vektoru nenulovým skalárem nemění jeho ortogonalitu.</p><p>Pro libovolný nenulový vektor $\mathbf{x}$ je $\cfrac{\mathbf{x}}{\|\mathbf{x}\|}$ jednotkový vektor; proces, kdy nenulový vektor vynásobíme skalárem rovným převrácené hodnotě jeho délky a tím získáme jednotkový vektor, se nazývá <strong>normalizace (normalizing)</strong>.</p>]]> </content> </entry> <entry><title xml:lang="cs">Vektory a lineární kombinace</title><link href="https://www.yunseo.kim/cs/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="am" /><published>2025-09-07T00:00:00+09:00</published> <updated>2025-09-07T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/vectors-and-linear-combinations/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="cs">Vysvětlíme, co je vektor a jaké jsou jeho základní operace (násobení skalárem, sčítání). Na tomto základě pochopíme lineární kombinace vektorů a pojem generovaného podprostoru (span).</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Vysvětlíme, co je vektor a jaké jsou jeho základní operace (násobení skalárem, sčítání). Na tomto základě pochopíme lineární kombinace vektorů a pojem generovaného podprostoru (span).</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li><strong>Definice vektoru</strong><ul><li><strong>Vektor v užším smyslu (eukleidovský vektor)</strong>: fyzikální veličina, která má zároveň velikost i směr<li><strong>Vektor v širším smyslu, v lineární algebře</strong>: prvek vektorového prostoru</ul><li><strong>Způsoby reprezentace vektoru</strong><ul><li><strong>Šipková reprezentace</strong>: velikost vektoru je dána délkou šipky a směr vektoru směrem šipky. Výhodou je snadná vizualizace a intuitivnost, nevýhodou však to, že je obtížné takto vyjadřovat vektory ve 4 a více dimenzích nebo neeukleidovské vektory.<li><strong>Složková reprezentace</strong>: počátek vektoru se položí do počátku souřadného prostoru a vektor se vyjádří souřadnicemi koncového bodu.</ul><li><strong>Základní operace s vektory</strong><ul><li><strong>Součet</strong>: $(a_1, a_2, \cdots, a_n) + (b_1, b_2, \cdots, b_n) := (a_1+b_1, a_2+b_2, \cdots, a_n+b_n)$<li><strong>Násobení skalárem</strong>: $c(a_1, a_2, \cdots, a_n) := (ca_1, ca_2, \cdots, ca_n)$</ul><li><strong>Lineární kombinace vektorů</strong><ul><li>Pro konečně mnoho vektorů $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ a skalárů $a_1, a_2, \dots, a_n$ se vektor $\mathbf{v}$ splňující $\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n$ nazývá <strong>lineární kombinací (linear combination)</strong> vektorů $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$<li>Čísla $a_1, a_2, \dots, a_n$ se nazývají <strong>koeficienty (coefficient)</strong> této lineární kombinace</ul><li><strong>Generovaný podprostor</strong><ul><li>Pro neprázdnou podmnožinu $S$ vektorového prostoru $\mathbb{V}$ je $\mathrm{span}(S)$ množina všech lineárních kombinací vytvořených z vektorů v $S$<li>Definuje se $\mathrm{span}(\emptyset) = \{0\}$<li>Pro podmnožinu $S$ vektorového prostoru $\mathbb{V}$, platí-li $\mathrm{span}(S) = \mathbb{V}$, říkáme, že $S$ generuje (generate nebo span) prostor $\mathbb{V}$</ul></ul></blockquote><h2 id="prerequisites">Prerequisites</h2><ul><li>souřadná rovina / souřadný prostor<li>těleso (field)</ul><h2 id="co-je-to-vektor">Co je to vektor?</h2><h3 id="vektor-v-užším-smyslu-eukleidovský-vektor">Vektor v užším smyslu: eukleidovský vektor</h3><blockquote class="prompt-info"><p>Mnoho fyzikálních veličin, jako je síla, rychlost či zrychlení, má kromě velikosti také informaci o směru. Takové fyzikální veličiny, které mají velikost i směr, se nazývají <strong>vektory (vector)</strong>.</p></blockquote><p>Výše uvedená definice je definice vektoru, se kterou se setkáváme v klasické mechanice nebo na středoškolské úrovni matematiky. Takový vektor v užším smyslu, založený na fyzikální intuici a nesoucí geometrický význam „velikosti a směru orientované úsečky“, se přesněji nazývá <strong>eukleidovský vektor (Euclidean vector)</strong>.</p><h3 id="vektor-v-širším-smyslu-prvek-vektorového-prostoru">Vektor v širším smyslu: prvek vektorového prostoru</h3><p>V lineární algebře se vektor definuje v širším smyslu než výše uvedený eukleidovský vektor, jako abstraktnější algebraická struktura, následovně.</p><blockquote class="prompt-info"><p><strong>Definice</strong><br /> <strong>Vektorový prostor (vector space)</strong> neboli <strong>lineární prostor (linear space)</strong> $\mathbb{V}$ nad tělesem $F$ je množina vybavená dvěma operacemi, <strong>sčítáním</strong> a <strong>násobením skalárem</strong>, které splňují následujících 8 podmínek. Prvky tělesa $F$ nazýváme <strong>skaláry (scalar)</strong> a prvky vektorového prostoru $\mathbb{V}$ nazýváme <strong>vektory (vector)</strong>.</p><ul><li><strong>Sčítání (sum)</strong>: pro dva prvky $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ je přiřazena jednoznačná hodnota $\mathbf{x} + \mathbf{y} \in \mathbb{V}$. Tomuto $\mathbf{x} + \mathbf{y}$ říkáme <strong>součet</strong> vektorů $\mathbf{x}$ a $\mathbf{y}$.<li><strong>Násobení skalárem (scalar multiplication)</strong>: každému prvku $a \in F$ a každému prvku $\mathbf{x} \in \mathbb{V}$ je přiřazena jednoznačná hodnota $a\mathbf{x} \in \mathbb{V}$. Tomuto $a\mathbf{x}$ říkáme <strong>skalární násobek (scalar multiple)</strong> vektoru $\mathbf{x}$.</ul><ol><li>Pro všechna $\mathbf{x},\mathbf{y} \in \mathbb{V}$ platí $\mathbf{x} + \mathbf{y} = \mathbf{y} + \mathbf{x}$. (komutativita sčítání)<li>Pro všechna $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$ platí $(\mathbf{x}+\mathbf{y})+\mathbf{z} = \mathbf{x}+(\mathbf{y}+\mathbf{z})$. (asociativita sčítání)<li>Pro každé $\mathbf{x} \in \mathbb{V}$ existuje $\mathbf{0} \in \mathbb{V}$ takové, že $\mathbf{x} + \mathbf{0} = \mathbf{x}$. (nulový vektor, neutrální prvek pro sčítání)<li>Ke každému $\mathbf{x} \in \mathbb{V}$ existuje $\mathbf{y} \in \mathbb{V}$ takové, že $\mathbf{x}+\mathbf{y}=\mathbf{0}$. (inverzní prvek pro sčítání)<li>Pro každé $\mathbf{x} \in \mathbb{V}$ platí $1\mathbf{x} = \mathbf{x}$. (neutrální prvek pro násobení)<li>Pro všechna $a,b \in F$ a všechna $\mathbf{x} \in \mathbb{V}$ platí $(ab)\mathbf{x} = a(b\mathbf{x})$. (asociativita násobení skalárem)<li>Pro všechna $a \in F$ a všechna $\mathbf{x},\mathbf{y} \in \mathbb{V}$ platí $a(\mathbf{x}+\mathbf{y}) = a\mathbf{x} + a\mathbf{y}$. (distributivita násobení skalárem vůči sčítání 1)<li>Pro všechna $a,b \in F$ a všechna $\mathbf{x},\mathbf{y} \in \mathbb{V}$ platí $(a+b)\mathbf{x} = a\mathbf{x} + b\mathbf{x}$. (distributivita násobení skalárem vůči sčítání 2)</ol></blockquote><p>Tato definice vektoru v lineární algebře je širší než dříve uvedený <a href="#vektor-v-užším-smyslu-eukleidovský-vektor">eukleidovský vektor</a> a zahrnuje jej. Lze ověřit, že i <a href="#vektor-v-užším-smyslu-eukleidovský-vektor">eukleidovské vektory</a> splňují všech osm výše uvedených vlastností.</p><p>Původ a vývoj vektorů úzce souvisí s řadou praktických problémů, které vyvstaly ve fyzice — například se snahou kvantitativně popsat sílu, pohyb těles, rotaci či pojmy jako pole. Potřeba matematicky vyjadřovat přírodní jevy vedla k tomu, že byl nejprve zaveden pojem vektoru jako <a href="#vektor-v-užším-smyslu-eukleidovský-vektor">eukleidovského vektoru</a>. Následně matematika tyto fyzikální koncepty zobecnila a teoreticky zformulovala: ustavila formální struktury, jako jsou vektorové prostory, skalární součin, vektorový součin apod., čímž vznikla dnešní definice vektoru. Jinými slovy, vektor je pojem, který si vyžádala fyzika a zformulovala matematika; nejde tedy o výhradní produkt čisté matematiky, ale spíše o interdisciplinární výsledek, který se rozvíjel díky úzké výměně mezi matematikou a fyzikou.</p><p><a href="#vektor-v-užším-smyslu-eukleidovský-vektor">Eukleidovské vektory</a>, se kterými pracuje klasická mechanika, lze matematicky vyjádřit v <a href="#vektor-v-širším-smyslu-prvek-vektorového-prostoru">obecnějším rámci</a>. V současné fyzice se aktivně používají nejen <a href="#vektor-v-užším-smyslu-eukleidovský-vektor">eukleidovské vektory</a>, ale i abstraktnější pojmy definované matematikou, jako jsou vektorové prostory či prostory funkcí, kterým se následně přiřazuje fyzikální význam. Proto není vhodné chápat dvě definice vektoru jednoduše jako „fyzikální definici“ a „matematickou definici“.</p><p>Vektorové prostory si podrobněji probereme později; nyní se zaměříme na eukleidovské vektory v užším smyslu, které lze geometricky vyjádřit v souřadném prostoru. Nejprve si ukážeme intuitivní příklady eukleidovských vektorů, protože to pomůže i při pozdějším zobecnění na jiné typy vektorů.</p><h2 id="způsoby-reprezentace-vektoru">Způsoby reprezentace vektoru</h2><h3 id="šipková-reprezentace">Šipková reprezentace</h3><p>Jde o nejběžnější způsob, který nejlépe zachovává geometrickou intuici. Velikost vektoru se vyjadřuje délkou šipky a směr vektoru směrem šipky.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/9/95/Vector_from_A_to_B.svg" alt="Euclidean Vector from A to B" width="972" /></p><blockquote><p><em>Zdroj obrázku</em></p><ul><li>autor: uživatel Wikipedie <a href="https://en.wikipedia.org/wiki/User:Nguyenthephuc">Nguyenthephuc</a><li>licence: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a></ul></blockquote><p>Tato reprezentace je sice intuitivní, ale u vektorů ve 4 a více dimenzích má zjevná omezení. Navíc později budeme pracovat i s neeukleidovskými vektory, které jsou už z principu obtížně geometricky znázornitelné, takže je potřeba si zvyknout na složkovou reprezentaci popsanou níže.</p><h3 id="složková-reprezentace">Složková reprezentace</h3><p>Vektor považujeme za stejný bez ohledu na to, kde je umístěn, pokud má stejnou velikost i směr. Proto, je-li dán souřadný prostor, můžeme počátek vektoru zafixovat do počátku tohoto prostoru; pak <u>$n$-rozměrný vektor odpovídá libovolnému bodu v $n$-rozměrném prostoru</u> a vektor lze vyjádřit souřadnicemi koncového bodu. Tomuto způsobu říkáme <strong>složková reprezentace</strong> vektoru.</p>\[(a_1, a_2, \cdots, a_n) \in \mathbb{R}^n \text{ or } \mathbb{C}^n\]<p><img src="https://upload.wikimedia.org/wikipedia/commons/5/5d/Position_vector.svg" alt="Position vector" /></p><blockquote><p><em>Zdroj obrázku</em></p><ul><li>autor: uživatel Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Acdx">Acdx</a><li>licence: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a></ul></blockquote><h2 id="základní-operace-s-vektory">Základní operace s vektory</h2><p>Základní operace s vektory jsou dvě: <strong>součet</strong> a <strong>násobení skalárem</strong>. Všechny vektorové operace lze vyjádřit jako kombinaci těchto dvou základních operací.</p><h3 id="součet-vektorů">Součet vektorů</h3><p>Součet dvou vektorů je opět vektor a složky výsledného vektoru jsou rovny součtům odpovídajících složek obou vektorů.</p>\[(a_1, a_2, \cdots, a_n) + (b_1, b_2, \cdots, b_n) := (a_1+b_1, a_2+b_2, \cdots, a_n+b_n)\]<h3 id="násobení-vektoru-skalárem">Násobení vektoru skalárem</h3><p>Vektor lze zvětšovat či zmenšovat; to se popisuje operací násobení skalárem, tj. vynásobením vektoru konstantou (skalárem). Výsledek násobení vektoru skalárem odpovídá vynásobení každé složky vektoru stejným skalárem.</p>\[c(a_1, a_2, \cdots, a_n) := (ca_1, ca_2, \cdots, ca_n)\]<p><img src="https://upload.wikimedia.org/wikipedia/commons/1/1b/Scalar_multiplication_of_vectors2.svg" alt="Scalar multiplication of vectors" /></p><blockquote><p><em>Zdroj obrázku</em></p><ul><li>autor: uživatel Wikipedie <a href="https://en.wikipedia.org/wiki/User:Silly_rabbit">Silly rabbit</a><li>licence: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a></ul></blockquote><h2 id="lineární-kombinace-vektorů">Lineární kombinace vektorů</h2><p>Stejně jako kalkulus začíná číslem $x$ a funkcí $f(x)$, lineární algebra začíná vektory $\mathbf{v}, \mathbf{w}, \dots$ a lineárními kombinacemi $c\mathbf{v} + d\mathbf{w} + \cdots$. A všechny lineární kombinace vektorů se skládají z kombinací dvou výše uvedených základních operací: <a href="#součet-vektorů">součtu</a> a <a href="#násobení-vektoru-skalárem">násobení skalárem</a>.</p><blockquote class="prompt-info"><p>Pro konečně mnoho vektorů $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ a skalárů $a_1, a_2, \dots, a_n$ se vektor $\mathbf{v}$, který splňuje následující, nazývá <strong>lineární kombinací (linear combination)</strong> vektorů $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$.</p>\[\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n\]<p>V tomto případě se $a_1, a_2, \dots, a_n$ nazývají <strong>koeficienty (coefficient)</strong> této lineární kombinace.</p></blockquote><p>Proč je ale lineární kombinace tak důležitá? Uvažujme následující situaci: <strong>$n$ vektorů v $m$-rozměrném prostoru tvoří $n$ sloupců matice typu $m \times n$</strong>.</p>\[\begin{gather*} \mathbf{v}_1 = (a_{11}, a_{21}, \dots, a_{m1}), \\ \mathbf{v}_2 = (a_{12}, a_{22}, \dots, a_{m2}), \\ \vdots \\ \mathbf{v}_n = (a_{1n}, a_{2n}, \dots, a_{mn}) \\ \\ A = \Bigg[ \mathbf{v}_1 \quad \mathbf{v}_2 \quad \cdots \quad \mathbf{v}_n \Bigg] \end{gather*}\]<p>Klíčové jsou zde následující dvě věci.</p><ol><li><strong>Vyjádřete všechny možné lineární kombinace $Ax = x_1\mathbf{v}_1 + x_2\mathbf{v}_2 + \cdots x_n\mathbf{v}_n$.</strong> Co tvoří?<li>Najděte <strong>čísla $x_1, x_2, \dots, x_n$</strong>, která vytvoří požadovaný výstupní vektor $Ax = b$.</ol><p>Odpověď na druhou otázku si rozebereme později; zatím se soustřeďme na první. Pro zjednodušení uvažujme jako příklad případ dvou nenulových 2D vektorů ($m=2$) a dvou vektorů celkem ($n=2$).</p><h3 id="lineární-kombinace-cmathbfv--dmathbfw">Lineární kombinace $c\mathbf{v} + d\mathbf{w}$</h3><p>Vektor $\mathbf{v}$ v dvojrozměrném prostoru má dvě složky. Pro libovolný skalár $c$ platí, že <u>vektor $c\mathbf{v}$ je rovnoběžný s původním vektorem $\mathbf{v}$ a tvoří nekonečně dlouhou přímku v rovině $xy$, která prochází počátkem.</u></p><p>Pokud druhý daný vektor $\mathbf{w}$ neleží na této přímce (tj. vektory $\mathbf{v}$ a $\mathbf{w}$ nejsou rovnoběžné), pak i $d\mathbf{w}$ tvoří další, druhou přímku. Když nyní tyto dvě přímky zkombinujeme, zjistíme, že <strong>lineární kombinace $c\mathbf{v} + d\mathbf{w}$ tvoří rovinu obsahující počátek</strong>.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/6/6f/Linjcomb.png" alt="Linear combinations of two vectors" /></p><blockquote><p><em>Zdroj obrázku</em></p><ul><li>autor: uživatel Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Svjo">Svjo</a><li>licence: <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">CC BY-SA 4.0</a></ul></blockquote><h3 id="generování">Generování</h3><p>Takové lineární kombinace vektorů tedy vytvářejí (vyplňují) vektorový prostor; tomuto se říká <strong>generování (span)</strong> prostoru.</p><blockquote class="prompt-info"><p><strong>Definice</strong><br /> Pro neprázdnou podmnožinu $S$ vektorového prostoru $\mathbb{V}$ se množina všech lineárních kombinací vytvořených z vektorů v $S$ nazývá <strong>generovaný podprostor (span)</strong> množiny $S$ a značí se $\mathrm{span}(S)$. Dále se definuje $\mathrm{span}(\emptyset) = \{0\}$.</p></blockquote><blockquote class="prompt-info"><p><strong>Definice</strong><br /> Pro podmnožinu $S$ vektorového prostoru $\mathbb{V}$, platí-li $\mathrm{span}(S) = \mathbb{V}$, říkáme, že $S$ generuje (generate nebo span) prostor $\mathbb{V}$.</p></blockquote><p>Zatím jsme neprobírali pojmy jako podprostor či báze, ale když si vybavíte tento příklad, pomůže vám to pochopit pojem vektorového prostoru.</p>]]> </content> </entry> <entry><title xml:lang="cs">Shrnutí kurzu Kaggle „Pandas“ (2) – Lekce 4–6</title><link href="https://www.yunseo.kim/cs/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="am" /><published>2025-08-24T00:00:00+09:00</published> <updated>2025-08-24T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/summary-of-kaggle-pandas-course-2/</id> <author> <name>Yunseo Kim</name> </author> <category term="AI & Data" /> <category term="Machine Learning" /> <summary xml:lang="cs">Shrnutí práce s knihovnou Pandas pro čištění a úpravu dat. Souhrn veřejného kurzu Kaggle „Pandas“, místy doplněný. Tato část pokrývá lekce 4–6.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Shrnutí práce s knihovnou Pandas pro čištění a úpravu dat. Souhrn veřejného kurzu Kaggle „Pandas“, místy doplněný. Tato část pokrývá lekce 4–6.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><p>Zde si poznamenávám, co jsem se naučil v kurzu Kaggle <a href="https://www.kaggle.com/learn/pandas">Pandas</a>.<br /> Protože je toho poměrně hodně, rozdělil jsem to na dvě části.</p><ul><li><a href="/cs/posts/summary-of-kaggle-pandas-course-1/">1. část: Lekce 1–3</a><li><ol><li>část: Lekce 4–6 (tento článek)</ol></ul><p><img src="/assets/img/kaggle-pandas/certificate.png" alt="Certifikát o absolvování" /></p><h2 id="lekce-4-seskupování-a-řazení">Lekce 4. Seskupování a řazení</h2><p>Často je potřeba data rozdělit do skupin a provést nad nimi nějaké operace po skupinách, případně je seřadit podle určitého kritéria.</p><h3 id="analýza-po-skupinách">Analýza po skupinách</h3><p>Pomocí metody <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html"><code class="language-plaintext highlighter-rouge">groupby()</code></a> lze seskupit řádky s totožnou hodnotou v daném sloupci a následně nad každou skupinou provést přehled nebo transformaci.</p><p>Už jsme si ukázali <a href="/cs/posts/summary-of-kaggle-pandas-course-1/#rychly-prehled-dat">metodu <code class="language-plaintext highlighter-rouge">value_counts()</code></a>; stejnou funkcionalitu lze pomocí <code class="language-plaintext highlighter-rouge">groupby()</code> realizovat například takto:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">(</span><span class="sh">'</span><span class="s">taster_name</span><span class="sh">'</span><span class="p">).</span><span class="nf">size</span><span class="p">()</span>
</pre></div></div><ol><li>DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> se seskupí podle toho, které řádky mají stejnou hodnotu ve sloupci <code class="language-plaintext highlighter-rouge">taster_name</code>.<li>Vrátí se Series s velikostmi jednotlivých skupin (počet řádků ve skupině).</ol><p>Nebo:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">(</span><span class="sh">'</span><span class="s">taster_name</span><span class="sh">'</span><span class="p">).</span><span class="n">taster_name</span><span class="p">.</span><span class="nf">count</span><span class="p">()</span>
</pre></div></div><ol><li>DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> se seskupí podle hodnot ve sloupci <code class="language-plaintext highlighter-rouge">taster_name</code>.<li>V každé skupině se vybere sloupec <code class="language-plaintext highlighter-rouge">taster_name</code>.<li>Vrátí se Series s počtem hodnot v daném sloupci, přičemž se nepočítají chybějící hodnoty (NaN).</ol><p>Jinými slovy, <code class="language-plaintext highlighter-rouge">value_counts()</code> je ve skutečnosti jen zkratka pro chování typu výše. A stejně tak lze použít i jiné souhrnné funkce než jen <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.count.html"><code class="language-plaintext highlighter-rouge">count()</code></a>. Například pokud chcete z dat o vínech zjistit minimální cenu pro každé bodové hodnocení, můžete udělat:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">(</span><span class="sh">'</span><span class="s">points</span><span class="sh">'</span><span class="p">).</span><span class="n">price</span><span class="p">.</span><span class="nf">min</span><span class="p">()</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
</pre><td class="rouge-code"><pre>points
80      5.0
81      5.0
       ... 
99     44.0
100    80.0
Name: price, Length: 21, dtype: float64
</pre></div></div><ol><li>DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> se seskupí podle hodnot ve sloupci <code class="language-plaintext highlighter-rouge">points</code>.<li>V každé skupině se vybere sloupec <code class="language-plaintext highlighter-rouge">price</code>.<li>Vrátí se Series s minimální hodnotou v dané skupině.</ol><p>Je možné seskupovat i podle více sloupců. Pokud chcete vybrat pouze informace o víně s nejvyšším hodnocením pro každou kombinaci země a provincie, můžete použít:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">([</span><span class="sh">'</span><span class="s">country</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">province</span><span class="sh">'</span><span class="p">]).</span><span class="nf">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">df</span><span class="p">:</span> <span class="n">df</span><span class="p">.</span><span class="n">loc</span><span class="p">[</span><span class="n">df</span><span class="p">.</span><span class="n">points</span><span class="p">.</span><span class="nf">idxmax</span><span class="p">()])</span>
</pre></div></div><p>Další užitečnou metodou objektu DataFrameGroupBy je <a href="https://pandas.pydata.org/docs/reference/api/pandas.core.groupby.DataFrameGroupBy.agg.html"><code class="language-plaintext highlighter-rouge">agg()</code></a>. Ta umožňuje po seskupení spustit nad každou skupinou více funkcí najednou.</p><blockquote class="prompt-tip"><p>Jako argument lze předat:</p><ul><li>funkci,<li>řetězec se jménem funkce,<li>seznam funkcí nebo řetězců se jmény funkcí,<li>slovník, kde klíčem je popisek osy a hodnotou je funkce nebo seznam funkcí aplikovaných na danou osu.</ul><p>Funkce zde musí být taková, která buď:</p><ul><li>umí přijmout DataFrame jako vstup, nebo<li>ji lze předat jako argument metody <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html"><code class="language-plaintext highlighter-rouge">DataFrame.apply()</code></a>, o které byla řeč <a href="/cs/posts/summary-of-kaggle-pandas-course-1/#zobrazeni-maps">dříve</a>.</ul><p>Toto vysvětlení v původním kurzu Kaggle nebylo; je doplněné na základě oficiální dokumentace pandas.</p></blockquote><p>Například takto lze spočítat statistiky cen podle země:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">([</span><span class="sh">'</span><span class="s">country</span><span class="sh">'</span><span class="p">]).</span><span class="n">price</span><span class="p">.</span><span class="nf">agg</span><span class="p">([</span><span class="nb">len</span><span class="p">,</span> <span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">])</span>
</pre></div></div><blockquote class="prompt-tip"><p>Zde <code class="language-plaintext highlighter-rouge">len</code> znamená vestavěnou pythonovou funkci <a href="https://docs.python.org/3/library/functions.html#len"><code class="language-plaintext highlighter-rouge">len()</code></a>; v tomto příkladu ji používáme k tomu, abychom vypsali počet cen (<code class="language-plaintext highlighter-rouge">price</code>) v každé skupině (<code class="language-plaintext highlighter-rouge">country</code>) <u>včetně chybějících hodnot</u>. Protože jde o funkci, která umí pracovat s DataFrame/Series jako vstupem, lze ji použít tímto způsobem.</p><p>Naproti tomu metoda <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.count.html"><code class="language-plaintext highlighter-rouge">count()</code></a> v pandas vrací <u>pouze počet platných (nechybějících) hodnot</u>, takže se chová jinak.</p><p>Toto vysvětlení v původním kurzu Kaggle nebylo; je doplněné na základě oficiální dokumentace Pythonu a pandas.</p></blockquote><h3 id="víceúrovňový-index">Víceúrovňový index</h3><p>Při zpracování a analýze dat pomocí <code class="language-plaintext highlighter-rouge">groupby()</code> se občas stane, že jako výsledek dostanete DataFrame s indexem, který není tvořen jedním labelem, ale více úrovněmi (MultiIndex).</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span> <span class="o">=</span> <span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">([</span><span class="sh">'</span><span class="s">country</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">province</span><span class="sh">'</span><span class="p">]).</span><span class="n">description</span><span class="p">.</span><span class="nf">agg</span><span class="p">([</span><span class="nb">len</span><span class="p">])</span>
<span class="n">countries_reviewed</span>
</pre></div></div><table><tr><th><th><th>len<tr><th>Country<th>province<th><tr><td rowspan="2">Argentina<td>Mendoza Province<td>3264<tr><td>Other<td>536<tr><td>...<td>...<td>...<tr><td rowspan="2">Uruguay<td>San Jose<td>3<tr><td>Uruguay<td>24</table><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre><td class="rouge-code"><pre><span class="n">mi</span> <span class="o">=</span> <span class="n">countries_reviewed</span><span class="p">.</span><span class="n">index</span>
<span class="nf">type</span><span class="p">(</span><span class="n">mi</span><span class="p">)</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre>pandas.core.indexes.multi.MultiIndex
</pre></div></div><p>MultiIndex má několik metod, které běžný (jednoúrovňový) index nemá, a které se hodí pro práci s hierarchickými strukturami. Podrobnější příklady a doporučení najdete v sekci <a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html">MultiIndex / advanced indexing v pandas User Guide</a>.</p><p>V praxi ale nejčastěji využijete metodu <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.reset_index.html"><code class="language-plaintext highlighter-rouge">reset_index()</code></a>, která MultiIndex převede zpět na „normální“ index:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">reset_index</span><span class="p">()</span>
</pre></div></div><table><thead><tr><th> <th>country<th>province<th>len<tbody><tr><td>0<td>Argentina<td>Mendoza Province<td>3264<tr><td>1<td>Argentina<td>Other<td>536<tr><td>…<td>…<td>…<td>…<tr><td>423<td>Uruguay<td>San Jose<td>3<tr><td>424<td>Uruguay<td>Uruguay<td>24</table><h3 id="řazení">Řazení</h3><p>Když se podíváte na <code class="language-plaintext highlighter-rouge">countries_reviewed</code>, můžete si všimnout, že výsledek seskupení se vrací v pořadí daném indexem. Jinými slovy: pořadí řádků výsledku <code class="language-plaintext highlighter-rouge">groupby</code> je určeno hodnotami indexu, ne samotným obsahem dat.</p><p>Podle potřeby si data můžete seřadit jinak. K tomu se hodí metoda <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html"><code class="language-plaintext highlighter-rouge">sort_values()</code></a>. Například takto lze seřadit země a provincie vzestupně podle počtu záznamů (<code class="language-plaintext highlighter-rouge">len</code>):</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span> <span class="o">=</span> <span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">reset_index</span><span class="p">()</span>
<span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="sh">'</span><span class="s">len</span><span class="sh">'</span><span class="p">)</span>
</pre></div></div><table><thead><tr><th> <th>country<th>province<th>len<tbody><tr><td>179<td>Greece<td>Muscat of Kefallonian<td>1<tr><td>192<td>Greece<td>Sterea Ellada<td>1<tr><td>…<td>…<td>…<td>…<tr><td>415<td>US<td>Washington<td>8639<tr><td>392<td>US<td>California<td>36247</table><p><code class="language-plaintext highlighter-rouge">sort_values()</code> standardně řadí vzestupně (od menších hodnot k větším). Pokud ale nastavíte volbu, můžete řadit i sestupně:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="sh">'</span><span class="s">len</span><span class="sh">'</span><span class="p">,</span> <span class="n">ascending</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
</pre></div></div><table><thead><tr><th> <th>country<th>province<th>len<tbody><tr><td>392<td>US<td>California<td>36247<tr><td>415<td>US<td>Washington<td>8639<tr><td>…<td>…<td>…<td>…<tr><td>63<td>Chile<td>Coelemu<td>1<tr><td>149<td>Greece<td>Beotia<td>1</table><p>Pokud chcete řadit podle indexu, použijte metodu <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_index.html"><code class="language-plaintext highlighter-rouge">sort_index()</code></a>. Má stejné argumenty i stejné výchozí chování jako <code class="language-plaintext highlighter-rouge">sort_values()</code>, takže způsob použití je stejný.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">sort_index</span><span class="p">()</span>
</pre></div></div><table><thead><tr><th> <th>country<th>province<th>len<tbody><tr><td>0<td>Argentina<td>Mendoza Province<td>3264<tr><td>1<td>Argentina<td>Other<td>536<tr><td>…<td>…<td>…<td>…<tr><td>423<td>Uruguay<td>San Jose<td>3<tr><td>424<td>Uruguay<td>Uruguay<td>24</table><p>Nakonec je možné řadit i podle více sloupců současně, například:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="p">[</span><span class="sh">'</span><span class="s">country</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">len</span><span class="sh">'</span><span class="p">])</span>
</pre></div></div><h2 id="lekce-5-datové-typy-a-chybějící-hodnoty">Lekce 5. Datové typy a chybějící hodnoty</h2><p>V praxi není zaručeno, že data budou vždy dobře vyčištěná. Často bývá potřeba převést datové typy na požadované, nebo řešit chybějící hodnoty, které se v datech objevují tu a tam. Při zpracování a analýze dat je tohle ve většině případů nejtěžší etapa.</p><h3 id="datové-typy">Datové typy</h3><p>Datový typ konkrétního sloupce DataFrame nebo Series se označuje jako <strong>dtype</strong>. Pomocí atributu <code class="language-plaintext highlighter-rouge">dtype</code> lze zjistit datový typ daného sloupce. Následuje příklad pro sloupec <code class="language-plaintext highlighter-rouge">price</code> v DataFrame <code class="language-plaintext highlighter-rouge">reviews</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="n">price</span><span class="p">.</span><span class="n">dtype</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre>dtype('float64')
</pre></div></div><p>Případně lze přes atribut <code class="language-plaintext highlighter-rouge">dtypes</code> zjistit <code class="language-plaintext highlighter-rouge">dtype</code> všech sloupců najednou:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="n">dtypes</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
</pre><td class="rouge-code"><pre>country        object
description    object
                ...  
variety        object
winery         object
Length: 13, dtype: object
</pre></div></div><p>Datový typ vyjadřuje, jak pandas daná data interně ukládá. Například <code class="language-plaintext highlighter-rouge">float64</code> znamená 64bitové číslo s plovoucí desetinnou čárkou, <code class="language-plaintext highlighter-rouge">int64</code> pak 64bitové celé číslo.</p><p>Zajímavostí je, že sloupec tvořený čistě řetězci nemá vlastní „string“ dtype (v tomto kontextu), ale je považován za objekt (<code class="language-plaintext highlighter-rouge">object</code>).</p><p>Pomocí <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.astype.html"><code class="language-plaintext highlighter-rouge">astype()</code></a> lze sloupec převést z jednoho datového typu na jiný. Například v předchozích ukázkách lze sloupec <code class="language-plaintext highlighter-rouge">points</code>, který byl typu <code class="language-plaintext highlighter-rouge">int64</code>, převést na <code class="language-plaintext highlighter-rouge">float64</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="n">points</span><span class="p">.</span><span class="nf">astype</span><span class="p">(</span><span class="sh">'</span><span class="s">float64</span><span class="sh">'</span><span class="p">)</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
</pre><td class="rouge-code"><pre>0         87.0
1         87.0
          ... 
129969    90.0
129970    90.0
Name: points, Length: 129971, dtype: float64
</pre></div></div><p>Datový typ má i index DataFrame/Series:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="n">index</span><span class="p">.</span><span class="n">dtype</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre>dtype('int64')
</pre></div></div><p>Kromě toho pandas podporuje i další typy, například kategoriální data nebo časové řady.</p><h3 id="chybějící-hodnoty">Chybějící hodnoty</h3><p>Prázdné položky (entries), které nemají hodnotu, dostávají hodnotu <code class="language-plaintext highlighter-rouge">NaN</code> (zkratka „Not a Number“). Z technických důvodů má <code class="language-plaintext highlighter-rouge">NaN</code> vždy typ <code class="language-plaintext highlighter-rouge">float64</code>.</p><p>Pandas poskytuje několik funkcí specializovaných na chybějící hodnoty. <a href="/cs/posts/summary-of-kaggle-pandas-course-1/#podmineny-vyber">Už jsme něco podobného krátce viděli dříve</a>: kromě metod existují i samostatné funkce <a href="https://pandas.pydata.org/docs/reference/api/pandas.isna.html"><code class="language-plaintext highlighter-rouge">pd.isna</code></a> a <a href="https://pandas.pydata.org/docs/reference/api/pandas.notna.html"><code class="language-plaintext highlighter-rouge">pd.notna</code></a>. Vrací buď jednu booleovskou hodnotu, nebo booleovské pole podle toho, zda je daná položka chybějící (resp. nechybějící). Lze je použít například takto:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">[</span><span class="n">pd</span><span class="p">.</span><span class="nf">isna</span><span class="p">(</span><span class="n">reviews</span><span class="p">.</span><span class="n">country</span><span class="p">)]</span>
</pre></div></div><p>Obvykle chcete zjistit, zda data chybějící hodnoty obsahují, a pokud ano, nějak je vhodně doplnit. Existuje více strategií. Metoda <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.fillna.html"><code class="language-plaintext highlighter-rouge">fillna()</code></a> umožňuje chybějící hodnoty nahradit nějakou „rozumnou“ konstantou. Například takto lze ve sloupci <code class="language-plaintext highlighter-rouge">region_2</code> v DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> nahradit všechna <code class="language-plaintext highlighter-rouge">NaN</code> hodnotou <code class="language-plaintext highlighter-rouge">"Unknown"</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="n">region_2</span><span class="p">.</span><span class="nf">fillna</span><span class="p">(</span><span class="sh">"</span><span class="s">Unknown</span><span class="sh">"</span><span class="p">)</span>
</pre></div></div><p>Případně lze doplňovat chybějící hodnoty nejbližší platnou hodnotou před/za (forward fill / backward fill). To lze realizovat metodami <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.ffill.html"><code class="language-plaintext highlighter-rouge">ffill()</code></a> a <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.bfill.html"><code class="language-plaintext highlighter-rouge">bfill()</code></a>.</p><blockquote class="prompt-danger"><p>Dříve šlo použít i <code class="language-plaintext highlighter-rouge">fillna()</code> s argumentem <code class="language-plaintext highlighter-rouge">method='ffill'</code> nebo <code class="language-plaintext highlighter-rouge">method='bfill'</code>, ale od pandas 2.1.0 je tento způsob deprecated a nedoporučuje se. Místo toho je potřeba použít <code class="language-plaintext highlighter-rouge">ffill()</code> nebo <code class="language-plaintext highlighter-rouge">bfill()</code> podle situace.</p></blockquote><p>A někdy je potřeba hromadně nahradit jednu hodnotu jinou i v případech, kdy nejde o <code class="language-plaintext highlighter-rouge">NaN</code>. Původní kurz Kaggle uvádí příklad se změnou twitterového handle konkrétního recenzenta; i to je dobrý příklad, ale zkusme si představit jiný, „bližší“ příklad.</p><p>Představme si hypotetickou situaci, kdy by se v Jižní Koreji oddělila severní část provincie Gyeonggi a vznikla nová správní jednotka <strong>Gyeonggibuk-do</strong>, a máte dataset, kde už je tento název zohledněn. Pak ale někdo přijde s absurdním nápadem přejmenovat <strong>Gyeonggibuk-do</strong> na <strong>Pyeonghwanuri Special Self-Governing Province</strong> (nebo třeba <strong>Pyeonghwanuri State</strong>) a nakonec to skutečně prosadí. <del>Je to hypotetické, ale děsivá část je, že něco podobného se ve skutečnosti klidně mohlo stát.</del> Pak bude potřeba v existujícím datasetu nahradit <code class="language-plaintext highlighter-rouge">"Gyeonggibuk-do"</code> nějakou z těchto nových hodnot. Jedním ze způsobů, jak takovou práci udělat v pandas, je metoda <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.replace.html"><code class="language-plaintext highlighter-rouge">replace()</code></a>.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">rok_2030_census</span><span class="p">.</span><span class="n">province</span><span class="p">.</span><span class="nf">replace</span><span class="p">(</span><span class="sh">"</span><span class="s">Gyeonggibuk-do</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">Pyeonghwanuri Special Self-Governing Province</span><span class="sh">"</span><span class="p">)</span>
</pre></div></div><p>Pomocí výše uvedeného kódu lze ve sloupci <code class="language-plaintext highlighter-rouge">province</code> datasetu <code class="language-plaintext highlighter-rouge">rok_2030_census</code> efektivně nahradit všechny výskyty řetězce <code class="language-plaintext highlighter-rouge">"Gyeonggibuk-do"</code> „tím dlouhým“. <del>Znovu si jen oddechnu, že se v reálném světě nestalo nic, kvůli čemu by tohle někdo musel opravdu pouštět.</del></p><p>Takové nahrazování řetězců se hodí i při čištění dat a práci s chybějícími hodnotami, protože chybějící hodnota nemusí být vždy <code class="language-plaintext highlighter-rouge">NaN</code>, ale často bývá reprezentována řetězci typu <code class="language-plaintext highlighter-rouge">"Unknown"</code>, <code class="language-plaintext highlighter-rouge">"Undisclosed"</code>, <code class="language-plaintext highlighter-rouge">"Invalid"</code> apod. V reálných projektech, například při vytváření datasetů z OCR skenů starších úředních dokumentů, to může být dokonce častější případ.</p><h2 id="lekce-6-přejmenování-a-slučování">Lekce 6. Přejmenování a slučování</h2><p>Někdy je potřeba přejmenovat určité sloupce nebo indexy v datasetu. Také je časté, že potřebujete spojovat více DataFrame nebo Series.</p><h3 id="přejmenování">Přejmenování</h3><p>Metoda <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rename.html"><code class="language-plaintext highlighter-rouge">rename()</code></a> umožňuje přejmenovat sloupce nebo indexy v datasetu. <code class="language-plaintext highlighter-rouge">rename()</code> podporuje více vstupních formátů, ale nejpohodlnější bývá použít pythonový slovník (dictionary). Následují příklady, kdy v DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> přejmenujeme sloupec <code class="language-plaintext highlighter-rouge">points</code> na <code class="language-plaintext highlighter-rouge">score</code> a indexy <code class="language-plaintext highlighter-rouge">0</code>, <code class="language-plaintext highlighter-rouge">1</code> na <code class="language-plaintext highlighter-rouge">firstEntry</code>, <code class="language-plaintext highlighter-rouge">secondEntry</code>.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="sh">'</span><span class="s">points</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">score</span><span class="sh">'</span><span class="p">})</span>
</pre></div></div><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">rename</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="sh">'</span><span class="s">firstEntry</span><span class="sh">'</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="sh">'</span><span class="s">secondEntry</span><span class="sh">'</span><span class="p">})</span>
</pre></div></div><p>Ve skutečnosti se názvy sloupců přejmenovávají poměrně často, ale přejmenování samotných hodnot indexu bývá vzácné. A pro podobné účely je obvykle praktičtější používat, <a href="/cs/posts/summary-of-kaggle-pandas-course-1/#uprava-indexu">jak jsme viděli dříve</a>, metodu <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.set_index.html"><code class="language-plaintext highlighter-rouge">set_index()</code></a>.</p><p>Index řádků i index sloupců mají navíc i vlastní atribut <code class="language-plaintext highlighter-rouge">name</code> a pomocí metody <code class="language-plaintext highlighter-rouge">rename_axis()</code> lze přejmenovat i tyto názvy os. Například indexovou osu datasetu lze pojmenovat <code class="language-plaintext highlighter-rouge">wines</code> a sloupcovou osu <code class="language-plaintext highlighter-rouge">fields</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">rename_axis</span><span class="p">(</span><span class="sh">"</span><span class="s">wines</span><span class="sh">"</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="sh">'</span><span class="s">index</span><span class="sh">'</span><span class="p">).</span><span class="nf">rename_axis</span><span class="p">(</span><span class="sh">"</span><span class="s">fields</span><span class="sh">"</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="sh">'</span><span class="s">columns</span><span class="sh">'</span><span class="p">)</span>
</pre></div></div><h3 id="kombinování-datasetů">Kombinování datasetů</h3><p>Někdy je potřeba kombinovat DataFrame s DataFrame, nebo Series se Series. Pandas pro to poskytuje tři klíčové funkce; od nejjednodušší po nejsložitější jsou to <a href="https://pandas.pydata.org/docs/reference/api/pandas.concat.html"><code class="language-plaintext highlighter-rouge">concat()</code></a>, <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.join.html"><code class="language-plaintext highlighter-rouge">join()</code></a> a <a href="https://pandas.pydata.org/docs/reference/api/pandas.merge.html"><code class="language-plaintext highlighter-rouge">merge()</code></a>. Kurz Kaggle uvádí, že většinu toho, co lze udělat pomocí <code class="language-plaintext highlighter-rouge">merge()</code>, lze jednodušeji vyřešit přes <code class="language-plaintext highlighter-rouge">join()</code>, takže se zaměřuje jen na první dvě.</p><p>Funkce <code class="language-plaintext highlighter-rouge">concat()</code> je nejjednodušší: vezme několik DataFrame nebo Series a „přilepí“ je za sebe podél zvolené osy. Je užitečná, pokud mají spojované objekty stejné pole (sloupce). Ve výchozím stavu se spojuje podél indexové osy; pokud nastavíte <code class="language-plaintext highlighter-rouge">axis=1</code> nebo <code class="language-plaintext highlighter-rouge">axis='columns'</code>, bude se spojovat podél osy sloupců.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre><td class="rouge-code"><pre><span class="o">&gt;&gt;&gt;</span> <span class="n">s1</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">Series</span><span class="p">([</span><span class="sh">'</span><span class="s">a</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">b</span><span class="sh">'</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">s2</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">Series</span><span class="p">([</span><span class="sh">'</span><span class="s">c</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">d</span><span class="sh">'</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">pd</span><span class="p">.</span><span class="nf">concat</span><span class="p">([</span><span class="n">s1</span><span class="p">,</span> <span class="n">s2</span><span class="p">])</span>
<span class="mi">0</span>    <span class="n">a</span>
<span class="mi">1</span>    <span class="n">b</span>
<span class="mi">0</span>    <span class="n">c</span>
<span class="mi">1</span>    <span class="n">d</span>
<span class="n">dtype</span><span class="p">:</span> <span class="nb">object</span>
</pre></div></div><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre><td class="rouge-code"><pre><span class="o">&gt;&gt;&gt;</span> <span class="n">df1</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">([[</span><span class="sh">'</span><span class="s">a</span><span class="sh">'</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="sh">'</span><span class="s">b</span><span class="sh">'</span><span class="p">,</span> <span class="mi">2</span><span class="p">]],</span>
<span class="p">...</span>                    <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="sh">'</span><span class="s">letter</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">number</span><span class="sh">'</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df1</span>
  <span class="n">letter</span>  <span class="n">number</span>
<span class="mi">0</span>      <span class="n">a</span>       <span class="mi">1</span>
<span class="mi">1</span>      <span class="n">b</span>       <span class="mi">2</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df2</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">([[</span><span class="sh">'</span><span class="s">c</span><span class="sh">'</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span> <span class="p">[</span><span class="sh">'</span><span class="s">d</span><span class="sh">'</span><span class="p">,</span> <span class="mi">4</span><span class="p">]],</span>
<span class="p">...</span>                    <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="sh">'</span><span class="s">letter</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">number</span><span class="sh">'</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df2</span>
  <span class="n">letter</span>  <span class="n">number</span>
<span class="mi">0</span>      <span class="n">c</span>       <span class="mi">3</span>
<span class="mi">1</span>      <span class="n">d</span>       <span class="mi">4</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">pd</span><span class="p">.</span><span class="nf">concat</span><span class="p">([</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">])</span>
  <span class="n">letter</span>  <span class="n">number</span>
<span class="mi">0</span>      <span class="n">a</span>       <span class="mi">1</span>
<span class="mi">1</span>      <span class="n">b</span>       <span class="mi">2</span>
<span class="mi">0</span>      <span class="n">c</span>       <span class="mi">3</span>
<span class="mi">1</span>      <span class="n">d</span>       <span class="mi">4</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df4</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">([[</span><span class="sh">'</span><span class="s">bird</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">polly</span><span class="sh">'</span><span class="p">],</span> <span class="p">[</span><span class="sh">'</span><span class="s">monkey</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">george</span><span class="sh">'</span><span class="p">]],</span>
<span class="p">...</span>                    <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="sh">'</span><span class="s">animal</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">name</span><span class="sh">'</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df4</span>
   <span class="n">animal</span>    <span class="n">name</span>
<span class="mi">0</span>    <span class="n">bird</span>   <span class="n">polly</span>
<span class="mi">1</span>  <span class="n">monkey</span>  <span class="n">george</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">pd</span><span class="p">.</span><span class="nf">concat</span><span class="p">([</span><span class="n">df1</span><span class="p">,</span> <span class="n">df4</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
  <span class="n">letter</span>  <span class="n">number</span>  <span class="n">animal</span>    <span class="n">name</span>
<span class="mi">0</span>      <span class="n">a</span>       <span class="mi">1</span>    <span class="n">bird</span>   <span class="n">polly</span>
<span class="mi">1</span>      <span class="n">b</span>       <span class="mi">2</span>  <span class="n">monkey</span>  <span class="n">george</span>
</pre></div></div><blockquote class="prompt-tip"><p>Podle <a href="(https://pandas.pydata.org/docs/reference/api/pandas.concat.html)">oficiální dokumentace pandas</a> se v případech, kdy potřebujete poskládat více řádků do jednoho DataFrame, nedoporučuje přidávat řádky po jednom uvnitř smyčky. Místo toho je lepší připravit seznam řádků a spojit je najednou jedním <code class="language-plaintext highlighter-rouge">concat()</code>.</p></blockquote><p>Metoda <code class="language-plaintext highlighter-rouge">join()</code> je o něco složitější: připojí k jednomu DataFrame další DataFrame podle indexu. Pokud se v obou DataFrame vyskytují sloupce se stejným názvem, je nutné přes argumenty <code class="language-plaintext highlighter-rouge">lsuffix</code> a <code class="language-plaintext highlighter-rouge">rsuffix</code> určit přípony, které se přidají ke kolidujícím názvům sloupců kvůli odlišení.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre><td class="rouge-code"><pre><span class="o">&gt;&gt;&gt;</span> <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">({</span><span class="sh">'</span><span class="s">key</span><span class="sh">'</span><span class="p">:</span> <span class="p">[</span><span class="sh">'</span><span class="s">K0</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K1</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K2</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K3</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K4</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K5</span><span class="sh">'</span><span class="p">],</span>
<span class="p">...</span>                    <span class="sh">'</span><span class="s">A</span><span class="sh">'</span><span class="p">:</span> <span class="p">[</span><span class="sh">'</span><span class="s">A0</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">A1</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">A2</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">A3</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">A4</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">A5</span><span class="sh">'</span><span class="p">]})</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df</span>
  <span class="n">key</span>   <span class="n">A</span>
<span class="mi">0</span>  <span class="n">K0</span>  <span class="n">A0</span>
<span class="mi">1</span>  <span class="n">K1</span>  <span class="n">A1</span>
<span class="mi">2</span>  <span class="n">K2</span>  <span class="n">A2</span>
<span class="mi">3</span>  <span class="n">K3</span>  <span class="n">A3</span>
<span class="mi">4</span>  <span class="n">K4</span>  <span class="n">A4</span>
<span class="mi">5</span>  <span class="n">K5</span>  <span class="n">A5</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">other</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">({</span><span class="sh">'</span><span class="s">key</span><span class="sh">'</span><span class="p">:</span> <span class="p">[</span><span class="sh">'</span><span class="s">K0</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K1</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K2</span><span class="sh">'</span><span class="p">],</span>
<span class="p">...</span>                       <span class="sh">'</span><span class="s">B</span><span class="sh">'</span><span class="p">:</span> <span class="p">[</span><span class="sh">'</span><span class="s">B0</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">B1</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">B2</span><span class="sh">'</span><span class="p">]})</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">other</span>
  <span class="n">key</span>   <span class="n">B</span>
<span class="mi">0</span>  <span class="n">K0</span>  <span class="n">B0</span>
<span class="mi">1</span>  <span class="n">K1</span>  <span class="n">B1</span>
<span class="mi">2</span>  <span class="n">K2</span>  <span class="n">B2</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">lsuffix</span><span class="o">=</span><span class="sh">'</span><span class="s">_caller</span><span class="sh">'</span><span class="p">,</span> <span class="n">rsuffix</span><span class="o">=</span><span class="sh">'</span><span class="s">_other</span><span class="sh">'</span><span class="p">)</span>
  <span class="n">key_caller</span>   <span class="n">A</span> <span class="n">key_other</span>    <span class="n">B</span>
<span class="mi">0</span>         <span class="n">K0</span>  <span class="n">A0</span>        <span class="n">K0</span>   <span class="n">B0</span>
<span class="mi">1</span>         <span class="n">K1</span>  <span class="n">A1</span>        <span class="n">K1</span>   <span class="n">B1</span>
<span class="mi">2</span>         <span class="n">K2</span>  <span class="n">A2</span>        <span class="n">K2</span>   <span class="n">B2</span>
<span class="mi">3</span>         <span class="n">K3</span>  <span class="n">A3</span>       <span class="n">NaN</span>  <span class="n">NaN</span>
<span class="mi">4</span>         <span class="n">K4</span>  <span class="n">A4</span>       <span class="n">NaN</span>  <span class="n">NaN</span>
<span class="mi">5</span>         <span class="n">K5</span>  <span class="n">A5</span>       <span class="n">NaN</span>  <span class="n">NaN</span>
</pre></div></div>]]> </content> </entry> <entry><title xml:lang="cs">Webové metriky výkonnosti (Web Vitals)</title><link href="https://www.yunseo.kim/cs/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="am" /><published>2025-08-05T00:00:00+09:00</published> <updated>2025-08-05T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/about-web-vitals/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Web Dev" /> <summary xml:lang="cs">Shrnutí Web Vitals a kritérií měření/hodnocení v Lighthouse a vysvětlení, co jednotlivé metriky výkonu znamenají.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Shrnutí Web Vitals a kritérií měření/hodnocení v Lighthouse a vysvětlení, co jednotlivé metriky výkonu znamenají.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="faktory-určující-webový-výkon">Faktory určující webový výkon</h2><p>Při optimalizaci webového výkonu lze faktory, které výkon určují, ve velkém rozdělit na dvě kategorie: výkon načítání a výkon vykreslování.</p><h3 id="výkon-načítání-html">Výkon načítání HTML</h3><ul><li>Čas od okamžiku, kdy je přes síť poprvé odeslán požadavek na webovou stránku na server, do okamžiku, kdy je stažen HTML dokument a prohlížeč začne renderovat<li>Určuje, jak rychle se stránka začne zobrazovat<li>Optimalizace pomocí: minimalizace přesměrování, cachování HTML odpovědí, komprese zdrojů, vhodné využití CDN apod.</ul><h3 id="výkon-vykreslování">Výkon vykreslování</h3><ul><li>Čas, který prohlížeč potřebuje k vykreslení obrazovky, kterou uživatel vidí, a k tomu, aby byla interaktivní<li>Určuje, jak plynule a rychle se obraz vykresluje<li>Optimalizace pomocí: odstranění zbytečného CSS a JS, prevence zpožděného načítání fontů a miniatur, přesunutí náročných výpočtů do samostatného Web Workeru pro minimalizaci blokování hlavního vlákna, optimalizace animací apod.</ul><h2 id="webové-metriky-výkonnosti-web-vitals">Webové metriky výkonnosti (Web Vitals)</h2><p>Text vychází z <a href="https://web.dev/performance?hl=cs">web.dev</a> od Googlu a z <a href="https://developer.chrome.com/docs/lighthouse/performance/performance-scoring?hl=cs">dokumentace pro vývojáře Chrome</a>. Pokud k tomu není zvláštní důvod, je lepší neusilovat o zlepšení jen jedné metriky, ale mířit na celkové zlepšení a hlavně identifikovat, která část cílové stránky tvoří výkonnostní úzké hrdlo. Pokud navíc máte statistiky z reálných uživatelských dat, je vhodné se místo špičkových nebo průměrných hodnot zaměřit spíše na hodnoty zhruba na úrovni Q1 (spodní kvartil) a ověřit, že i v těchto případech splňujete cíle—pak teprve dále zlepšovat.</p><h3 id="klíčové-metriky-webového-výkonu-core-web-vitals">Klíčové metriky webového výkonu (Core Web Vitals)</h3><p>Jak bude zmíněno dále, metrik webového výkonu (Web Vitals) existuje více. Google však považuje za obzvlášť důležité následující tři metriky, které úzce souvisí s uživatelským zážitkem a lze je měřit v reálném prostředí (nikoli jen v laboratorních podmínkách). Říká jim <a href="https://web.dev/articles/vitals?hl=cs#core-web-vitals">Core Web Vitals</a>. Protože Google promítá Core Web Vitals cílového webu i do pořadí výsledků svého vyhledávače, měli by je provozovatelé webů pečlivě sledovat i z hlediska SEO.</p><ul><li><a href="#lcp-largest-contentful-paint">Large Contentful Paint (LCP)</a>: odráží <em>výkon načítání</em>, musí být do 2,5 s<li><a href="https://web.dev/articles/inp?hl=cs">Interaction to Next Paint (INP)</a>: odráží <em>odezvu</em>, musí být ≤ 200 ms<li><a href="#cls-cumulative-layout-shift">Cumulative Layout Shift (CLS)</a>: odráží <em>vizuální stabilitu</em>, je nutné držet ≤ 0,1</ul><p>Core Web Vitals jsou primárně určeny pro měření v reálném prostředí, ale kromě INP lze zbylé dvě metriky měřit i v laboratorním prostředí, např. pomocí Chrome DevTools nebo Lighthouse. INP vyžaduje skutečné uživatelské vstupy, a proto jej v laboratorních podmínkách měřit nelze; v takových případech lze místo toho použít <a href="#tbt-total-blocking-time">TBT</a>, který s INP velmi silně koreluje a je mu podobný, a také platí, že <a href="https://web.dev/articles/vitals?hl=cs#lab_tools_to_measure_core_web_vitals">typicky zlepšení TBT vede i ke zlepšení INP</a>.</p><h3 id="váhy-metrik-ve-skóre-výkonu-lighthouse-10">Váhy metrik ve skóre výkonu Lighthouse 10</h3><p><a href="https://developer.chrome.com/docs/lighthouse/performance/performance-scoring?hl=cs">Skóre výkonu Lighthouse se počítá jako vážený průměr skóre jednotlivých metrik a používá váhy z následující tabulky</a>.</p><table><thead><tr><th>Metrika<th>Váha<tbody><tr><td><a href="#fcp-first-contentful-paint">First Contentful Paint</a><td>10%<tr><td><a href="#si-speed-index">Speed Index</a><td>10%<tr><td><a href="#lcp-largest-contentful-paint">Largest Contentful Paint</a><td>25%<tr><td><a href="#tbt-total-blocking-time">Total Blocking Time</a><td>30%<tr><td><a href="#cls-cumulative-layout-shift">Cumulative Layout Shift</a><td>25%</table><h3 id="fcp-first-contentful-paint">FCP (First Contentful Paint)</h3><ul><li>Měří čas od požadavku na stránku do vykreslení prvního obsahu DOM<li>Za DOM obsah se považují obrázky na stránce, prvky <code class="language-plaintext highlighter-rouge">&lt;canvas&gt;</code> jiné než bílé, SVG apod.; obsah uvnitř <code class="language-plaintext highlighter-rouge">iframe</code> se nezohledňuje</ul><blockquote class="prompt-tip"><p>Jedním z faktorů, který má na FCP obzvlášť velký vliv, je doba načítání fontů; dokumentace pro vývojáře Chrome doporučuje pro optimalizaci v této oblasti nahlédnout do <a href="https://developer.chrome.com/docs/lighthouse/performance/font-display?hl=cs">souvisejícího článku</a>.</p></blockquote><h4 id="kritéria-hodnocení-v-lighthouse">Kritéria hodnocení v Lighthouse</h4><p>Podle <a href="https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/?hl=cs">dokumentace pro vývojáře Chrome</a> jsou hodnoticí kritéria Lighthouse následující:</p><table><thead><tr><th>Barevná úroveň<th>Mobilní FCP (s)<th>Desktop FCP (s)<tbody><tr><td>Zelená (rychlé)<td>0-1.8<td>0-0.9<tr><td>Oranžová (střední)<td>1.8-3<td>0.9-1.6<tr><td>Červená (pomalé)<td>&gt; 3<td>&gt; 1.6</table><h3 id="lcp-largest-contentful-paint">LCP (Largest Contentful Paint)</h3><ul><li>Měří čas do vykreslení největšího prvku (obrázek, textový blok, video apod.) v rámci viditelné oblasti (viewport) při prvním otevření stránky<li>Čím větší plochu prvek na obrazovce zabírá, tím spíše jej uživatel bude vnímat jako hlavní obsah<li>Pokud je LCP obrázek, lze dobu rozdělit do čtyř podúseků; je důležité určit, kde vzniká úzké hrdlo<ol><li>Time to first byte (TTFB): čas od začátku načítání stránky do přijetí prvního bajtu odpovědi HTML dokumentu<li>Zpoždění načtení (Load delay): rozdíl mezi okamžikem, kdy prohlížeč začne načítat LCP zdroj, a TTFB<li>Doba načítání (Load time): čas potřebný k načtení samotného LCP zdroje<li>Zpoždění vykreslení (Render delay): čas od dokončení načtení LCP zdroje do úplného vykreslení LCP prvku</ol></ul><h4 id="kritéria-hodnocení-v-lighthouse-1">Kritéria hodnocení v Lighthouse</h4><p>Podle <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/?hl=cs">dokumentace pro vývojáře Chrome</a> jsou hodnoticí kritéria Lighthouse následující:</p><table><thead><tr><th>Barevná úroveň<th>Mobilní LCP (s)<th>Desktop LCP (s)<tbody><tr><td>Zelená (rychlé)<td>0-2.5<td>0-1.2<tr><td>Oranžová (střední)<td>2.5-4<td>1.2-2.4<tr><td>Červená (pomalé)<td>&gt; 4<td>&gt; 2.4</table><h3 id="tbt-total-blocking-time">TBT (Total Blocking Time)</h3><ul><li>Měří celkový čas, po který webová stránka nedokáže reagovat na uživatelské vstupy, jako je kliknutí myší, dotyk na obrazovce nebo zadávání z klávesnice<li>Z úloh mezi FCP a <a href="https://developer.chrome.com/docs/lighthouse/performance/interactive?hl=cs">TTI (okamžik, kdy se stránka stává interaktivní, Time to Interactive)</a>* se za <a href="https://web.dev/articles/long-tasks-devtools?hl=cs">dlouhé úlohy</a> považují ty, které běží ≥ 50 ms; u každé takové úlohy se část přesahující 50 ms nazývá <em>blocking portion</em> (blokující část) a součet všech blokujících částí je definován jako TBT</ul><blockquote class="prompt-info"><p>* Samotné TTI je příliš citlivé na odlehlé hodnoty síťových odpovědí i na dlouhé úlohy, má nízkou konzistenci a vysokou variabilitu; proto bylo <a href="https://developer.chrome.com/blog/lighthouse-10-0#scoring-changes">od Lighthouse 10 z hodnocených metrik odstraněno</a>.</p></blockquote><blockquote class="prompt-tip"><p>Nejběžnější příčinou dlouhých úloh bývá zbytečné nebo neefektivní načítání, parsování a spouštění JavaScriptu; <a href="https://web.dev/articles/reduce-javascript-payloads-with-code-splitting?hl=cs">code splitting</a> pomáhá zmenšit velikost JS payloadu tak, aby se jednotlivé části daly spustit do 50 ms, a v případě potřeby lze uvažovat i o oddělení do samostatného service workeru a běhu ve více vláknech mimo hlavní vlákno—takové kroky doporučují <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/?hl=cs">dokumentace pro vývojáře Chrome</a> i <a href="https://web.dev/articles/long-tasks-devtools#what_is_causing_my_long_tasks?hl=cs">web.dev od Googlu</a>.</p></blockquote><h4 id="kritéria-hodnocení-v-lighthouse-2">Kritéria hodnocení v Lighthouse</h4><p>Podle <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/?hl=cs">dokumentace pro vývojáře Chrome</a> jsou hodnoticí kritéria Lighthouse následující:</p><table><thead><tr><th>Barevná úroveň<th>Mobilní TBT (ms)<th>Desktop TBT (ms)<tbody><tr><td>Zelená (rychlé)<td>0-200<td>0-150<tr><td>Oranžová (střední)<td>200-600<td>150-350<tr><td>Červená (pomalé)<td>&gt; 600<td>&gt; 350</table><h3 id="cls-cumulative-layout-shift">CLS (Cumulative Layout Shift)</h3><p> <video class="embed-video file" controls="" autoplay="" loop=""> <source src="https://web.dev/static/articles/cls/video/web-dev-assets/layout-instability-api/layout-instability2.webm" type="video/webm" /> Your browser does not support the video tag. Here is a <a href="https://web.dev/static/articles/cls/video/web-dev-assets/layout-instability-api/layout-instability2.webm">link to the video file</a> instead. </video> <em>Příklad náhlé změny rozvržení</em></p><blockquote><p>Zdroj videa: <a href="https://web.dev/articles/cls?hl=cs">Cumulative Layout Shift (CLS) | Articles | web.dev</a></p></blockquote><p><del>Je cítit hluboký vztek z pohybu kurzoru</del></p><ul><li>Neočekávané změny rozvržení zhoršují UX různými způsoby: text se náhle posune a uživatel ztratí místo, kde četl, nebo omylem klikne na odkaz či tlačítko apod.<li>Konkrétní způsob výpočtu skóre CLS je popsán na <a href="https://web.dev/articles/cls">web.dev od Googlu</a><li>Jak je vidět na obrázku níže, cílem by měla být hodnota ≤ 0,1</ul><p><img src="https://web.dev/static/articles/cls/image/good-cls-values.svg" alt="What is a good CLS score?" width="640" height="480" /></p><blockquote><p>Zdroj obrázku: <a href="https://web.dev/articles/cls#what-is-a-good-cls-score?hl=cs">Cumulative Layout Shift (CLS) | Articles | web.dev</a></p></blockquote><h3 id="si-speed-index">SI (Speed Index)</h3><ul><li>Měří, jak rychle se během načítání stránky obsah vizuálně zobrazuje<li>Lighthouse nahrává proces načítání stránky v prohlížeči jako video, analyzuje jej, vypočítá průběh mezi snímky a následně pomocí <a href="https://github.com/paulirish/speedline">modulu Speedline pro Node.js</a> vypočte skóre SI</ul><blockquote class="prompt-tip"><p>Jakákoli opatření vedoucí ke zrychlení načítání stránky—včetně těch, která byla zmíněna při shrnutí <a href="#fcp-first-contentful-paint">FCP</a>, <a href="#lcp-largest-contentful-paint">LCP</a> a <a href="#tbt-total-blocking-time">TBT</a>—se obvykle pozitivně projeví i ve skóre SI. Jde o metrikou výkonu, která spíše než jeden konkrétní krok reprezentuje celkový proces načítání do určité míry.</p></blockquote><h4 id="kritéria-hodnocení-v-lighthouse-3">Kritéria hodnocení v Lighthouse</h4><p>Podle <a href="https://developer.chrome.com/docs/lighthouse/performance/speed-index/?hl=cs">dokumentace pro vývojáře Chrome</a> jsou hodnoticí kritéria Lighthouse následující:</p><table><thead><tr><th>Barevná úroveň<th>Mobilní SI (s)<th>Desktop SI (s)<tbody><tr><td>Zelená (rychlé)<td>0-3.4<td>0-1.3<tr><td>Oranžová (střední)<td>3.4-5.8<td>1.3-2.3<tr><td>Červená (pomalé)<td>&gt; 5.8<td>&gt; 2.3</table>]]> </content> </entry> <entry><title xml:lang="cs">Gravitační pole a gravitační potenciál</title><link href="https://www.yunseo.kim/cs/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="am" /><published>2025-05-17T00:00:00+09:00</published> <updated>2025-05-17T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/gravitational-field-and-potential/</id> <author> <name>Yunseo Kim</name> </author> <category term="Physics" /> <category term="Classical Dynamics" /> <summary xml:lang="cs">Definice vektoru gravitačního pole a gravitačního potenciálu podle Newtonova zákona gravitace; klíčové příklady: věta o kulové slupce a rotační křivky galaxií.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Definice vektoru gravitačního pole a gravitačního potenciálu podle Newtonova zákona gravitace; klíčové příklady: věta o kulové slupce a rotační křivky galaxií.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li>Newtonův zákon všeobecné gravitace: $\mathbf{F} = -G\cfrac{mM}{r^2}\mathbf{e}_r$<li>Pro spojité rozložení hmoty a tělesa konečné velikosti: $\mathbf{F} = -Gm\int_V \cfrac{dM}{r^2}\mathbf{e}_r = -Gm\int_V \cfrac{\rho(\mathbf{r^\prime})\mathbf{e}_r}{r^2} dv^{\prime}$<ul><li>$\rho(\mathbf{r^{\prime}})$: hustota hmoty v bodě s polohovým vektorem $\mathbf{r^{\prime}}$ vzhledem k libovolně zvolenému počátku<li>$dv^{\prime}$: objemový element v bodě s polohovým vektorem $\mathbf{r^{\prime}}$ vzhledem k libovolně zvolenému počátku</ul><li><strong>Vektor gravitačního pole (gravitational field vector)</strong>:<ul><li>vektor vyjadřující sílu na jednotkovou hmotnost, kterou v daném poli vyvolaném tělesem o hmotnosti $M$ pociťuje částice<li>$\mathbf{g} = \cfrac{\mathbf{F}}{m} = - G \cfrac{M}{r^2}\mathbf{e}_r = - G \int_V \cfrac{\rho(\mathbf{r^\prime})\mathbf{e}_r}{r^2}dv^\prime$<li>má rozměr <em>síly na jednotku hmotnosti</em> neboli <em>zrychlení</em></ul><li><strong>Gravitační potenciál (gravitational potential)</strong>:<ul><li>$\mathbf{g} \equiv -\nabla \Phi$<li>má rozměr $($<em>síla na jednotku hmotnosti</em> $) \times ($<em>vzdálenost</em> $)$ neboli <em>energie na jednotku hmotnosti</em><li>$\Phi = -G\cfrac{M}{r}$<li>gravitační potenciál má význam jen přes své relativní rozdíly; konkrétní absolutní hodnota sama o sobě význam nemá<li>obvykle se pro odstranění neurčitosti (ambiguity) volí podmínka $\Phi \to 0$ pro $r \to \infty$<li>$U = m\Phi, \quad \mathbf{F} = -\nabla U$</ul><li><strong>Gravitační potenciál uvnitř a vně kulové slupky (věta o kulové slupce)</strong><ul><li>pro $R&gt;a$:<ul><li>$\Phi(R&gt;a) = -\cfrac{GM}{R}$<li>při výpočtu gravitačního potenciálu v libovolném vnějším bodě od kulově symetrického rozložení hmoty (spherical symmetric distribution) lze celé těleso považovat za hmotný bod (point mass)</ul><li>pro $R&lt;b$:<ul><li>$\Phi(R&lt;b) = -2\pi\rho G(a^2 - b^2)$<li>uvnitř kulově symetrické hmotné slupky je gravitační potenciál konstantní nezávisle na poloze a působící gravitace je $0$</ul><li>pro $b&lt;R&lt;a$: $\Phi(b&lt;R&lt;a) = -4\pi\rho G \left( \cfrac{a^2}{2} - \cfrac{b^3}{3R} - \cfrac{R^2}{6} \right)$</ul></ul></blockquote><h2 id="gravitační-pole">Gravitační pole</h2><h3 id="newtonův-zákon-všeobecné-gravitace">Newtonův zákon všeobecné gravitace</h3><p>Newton již před 11666 HE zákon všeobecné gravitace systematizoval a také jej numericky ověřil. Přesto mu trvalo dalších 20 let, než své výsledky vydal roku 11687 HE v díle <em>Principia</em>—důvodem bylo, že nedokázal ospravedlnit výpočetní postup, v němž Zemi a Měsíc považoval za hmotné body (point mass) bez rozměrů. Naštěstí platí, že <a href="#kdyz-ra">s použitím kalkulu, který Newton sám později vynalezl, můžeme problém, jenž pro Newtona v 11600. letech nebyl snadný, dokázat mnohem jednodušeji</a>.</p><p>Podle Newtonova zákona všeobecné gravitace (Newton’s law of universal gravitation) <em>každá hmotná částice přitahuje všechny ostatní částice ve vesmíru silou, která je úměrná součinu jejich hmotností a nepřímo úměrná druhé mocnině vzdálenosti mezi nimi.</em> Matematicky:</p>\[\mathbf{F} = -G\frac{mM}{r^2}\mathbf{e}_r \label{eqn:law_of_gravitation}\tag{1}\]<p><img src="https://upload.wikimedia.org/wikipedia/commons/0/0e/NewtonsLawOfUniversalGravitation.svg" alt="Newton's law of universal gravitation" /></p><blockquote><p><em>Zdroj obrázku</em></p><ul><li>autor: uživatel Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Dna-webmaster">Dennis Nilsson</a><li>licence: <a href="https://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a></ul></blockquote><p>Jednotkový vektor $\mathbf{e}_r$ míří od $M$ směrem k $m$ a záporné znaménko vyjadřuje, že jde o přitažlivou sílu. Tj. $m$ je přitahováno k $M$.</p><h3 id="cavendishův-experiment">Cavendishův experiment</h3><p>Experimentální ověření tohoto zákona a určení hodnoty $G$ provedl roku 11798 HE britský fyzik Henry Cavendish. Cavendishův experiment používá torzní váhy tvořené lehkou tyčí, na jejíchž koncích jsou upevněny dvě malé koule. Tyto dvě koule jsou přitahovány ke dvěma jiným velkým koulím umístěným poblíž. Dosud udávaná oficiální hodnota $G$ je $6.673 \pm 0.010 \times 10^{-11} \mathrm{N\cdot m^2/kg^2}$.</p><blockquote class="prompt-tip"><p>Přestože je $G$ jednou z nejdéle známých fundamentálních konstant, známe ji jen s nižší přesností (precision) než většinu ostatních konstant, jako jsou $e$, $c$, $\hbar$. I dnes probíhá mnoho výzkumů, jejichž cílem je zjistit $G$ s vyšší přesností.</p></blockquote><h3 id="případ-těles-konečné-velikosti">Případ těles konečné velikosti</h3><p>Zákon ve tvaru ($\ref{eqn:law_of_gravitation}$) lze přísně vzato aplikovat pouze na <em>bodové částice (point particle)</em>. Pokud je jedno nebo obě tělesa objekt konečné velikosti, je třeba pro výpočet síly navíc předpokládat, že gravitační pole (gravitational force field) je <em>lineární pole (linear field)</em>. Tj. předpokládáme, že celková gravitace působící na jednu částici o hmotnosti $m$ od mnoha dalších částic se získá vektorovým součtem jednotlivých sil. Pro těleso se spojitým rozložením hmoty se součet přepíše jako integrál:</p>\[\mathbf{F} = -Gm\int_V \frac{dM}{r^2}\mathbf{e}_r = -Gm\int_V \frac{\rho(\mathbf{r^\prime})\mathbf{e}_r}{r^2} dv^{\prime} \label{eqn:integral_form}\tag{2}\]<ul><li>$\rho(\mathbf{r^{\prime}})$: hustota hmoty v bodě s polohovým vektorem $\mathbf{r^{\prime}}$ vzhledem k libovolně zvolenému počátku<li>$dv^{\prime}$: objemový element v bodě s polohovým vektorem $\mathbf{r^{\prime}}$ vzhledem k libovolně zvolenému počátku</ul><p>Pokud mají konečnou velikost jak těleso o hmotnosti $M$, tak těleso o hmotnosti $m$, je pro určení celkové gravitace potřeba ještě druhý objemový integrál i přes objem tělesa $m$.</p><h3 id="vektor-gravitačního-pole">Vektor gravitačního pole</h3><p><strong>Vektor gravitačního pole (gravitational field vector)</strong> $\mathbf{g}$ definujeme jako vektor síly na jednotku hmotnosti, kterou v poli vytvořeném tělesem o hmotnosti $M$ pociťuje částice:</p>\[\mathbf{g} = \frac{\mathbf{F}}{m} = - G \frac{M}{r^2}\mathbf{e}_r \label{eqn:g_vector}\tag{3}\]<p>nebo</p>\[\boxed{\mathbf{g} = - G \int_V \frac{\rho(\mathbf{r^\prime})\mathbf{e}_r}{r^2}dv^\prime} \tag{4}\]<p>kde se směr $\mathbf{e}_r$ mění v závislosti na $\mathbf{r^\prime}$.</p><p>Tato veličina $\mathbf{g}$ má rozměr <em>síly na jednotku hmotnosti</em> neboli <em>zrychlení</em>. Velikost vektoru gravitačního pole $\mathbf{g}$ poblíž zemského povrchu je rovna tomu, čemu říkáme <strong>konstanta tíhového zrychlení (gravitational acceleration constant)</strong>, a platí $|\mathbf{g}| \approx 9.80\mathrm{m/s^2}$.</p><h2 id="gravitační-potenciál">Gravitační potenciál</h2><h3 id="definice">Definice</h3><p>Vektor gravitačního pole $\mathbf{g}$ se mění jako $1/r^2$, a proto splňuje podmínku ($\nabla \times \mathbf{g} \equiv 0$), aby mohl být vyjádřen jako gradient nějaké skalární funkce (potenciálu). Můžeme tedy psát:</p>\[\mathbf{g} \equiv -\nabla \Phi \label{eqn:gradient_phi}\tag{5}\]<p>kde $\Phi$ nazýváme <strong>gravitační potenciál (gravitational potential)</strong>; má rozměr $($<em>síla na jednotku hmotnosti</em> $) \times ($<em>vzdálenost</em> $)$ neboli <em>energie na jednotku hmotnosti</em>.</p><p>Protože $\mathbf{g}$ závisí pouze na poloměru, závisí na $r$ i $\Phi$. Ze vztahů ($\ref{eqn:g_vector}$) a ($\ref{eqn:gradient_phi}$) plyne</p>\[\nabla\Phi = \frac{d\Phi}{dr}\mathbf{e}_r = G\frac{M}{r^2}\mathbf{e}_r\]<p>a integrací dostaneme</p>\[\boxed{\Phi = -G\frac{M}{r}} \label{eqn:g_potential}\tag{6}\]<p>Gravitační potenciál má smysl pouze přes relativní rozdíly; velikost absolutní hodnoty smysl nemá, proto lze integrační konstantu vynechat. Obvykle se pro odstranění neurčitosti (ambiguity) volí podmínka $\Phi \to 0$ pro $r \to \infty$ a vztah ($\ref{eqn:g_potential}$) ji také splňuje.</p><p>Pro spojité rozložení hmoty je gravitační potenciál</p>\[\Phi = -G\int_V \frac{\rho(\mathbf{r\prime})}{r}dv^\prime \label{eqn:g_potential_v}\tag{7}\]<p>Je-li hmota povrchově rozložena na tenké slupce, pak</p>\[\Phi = -G\int_S \frac{\rho_s}{r}da^\prime. \label{eqn:g_potential_s}\tag{8}\]<p>A pro lineární zdroj hmoty s lineární hustotou $\rho_l$ lze psát</p>\[\Phi = -G\int_\Gamma \frac{\rho_l}{r}ds^\prime. \label{eqn:g_potential_l}\tag{9}\]<h3 id="fyzikální-význam">Fyzikální význam</h3><p>Uvažujme práci na jednotku hmotnosti $dW^\prime$, kterou těleso vykoná při posunu o $d\mathbf{r}$ v gravitačním poli.</p>\[\begin{align*} dW^\prime &amp;= -\mathbf{g}\cdot d\mathbf{r} = (\nabla \Phi)\cdot d\mathbf{r} \\ &amp;= \sum_i \frac{\partial \Phi}{\partial x_i}dx_i = d\Phi \label{eqn:work}\tag{10} \end{align*}\]<p>V tomto vztahu je $\Phi$ funkcí pouze polohových souřadnic, tj. $\Phi=\Phi(x_1, x_2, x_3) = \Phi(x_i)$. Z toho plyne, že při přesunu tělesa z jednoho bodu do druhého je práce na jednotku hmotnosti rovna rozdílu potenciálů mezi těmito dvěma body.</p><p>Definujeme-li gravitační potenciál v nekonečně vzdáleném bodě jako $0$, lze $\Phi$ v libovolném bodě interpretovat jako práci na jednotku hmotnosti potřebnou k přesunu tělesa z nekonečna do daného bodu. Potenciální energie tělesa je rovna součinu jeho hmotnosti a gravitačního potenciálu $\Phi$, takže pro potenciální energii $U$ platí</p>\[U = m\Phi. \label{eqn:potential_e}\tag{11}\]<p>Proto gravitační sílu působící na těleso získáme jako záporný gradient jeho potenciální energie:</p>\[\mathbf{F} = -\nabla U \label{eqn:force_and_potential}\tag{12}\]<p>Je-li těleso umístěno do gravitačního pole vytvořeného nějakou hmotností, vždy vzniká určitá potenciální energie. Přísně vzato patří poli jako takovému, ale zvyklostí se o ní mluví jako o potenciální energii tělesa.</p><h2 id="příklad-gravitační-potenciál-uvnitř-a-vně-kulové-slupky-věta-o-kulové-slupce">Příklad: gravitační potenciál uvnitř a vně kulové slupky (věta o kulové slupce)</h2><h3 id="volba-souřadnic--vyjádření-gravitačního-potenciálu-integrálem">Volba souřadnic &amp; vyjádření gravitačního potenciálu integrálem</h3><p>Spočítejme gravitační potenciál uvnitř a vně homogenní kulové slupky (spherical shell) s vnitřním poloměrem $b$ a vnějším poloměrem $a$. Gravitační sílu od slupky lze získat i přímým výpočtem složek síly působících na jednotkovou hmotnost v poli, ale potenciálová metoda je jednodušší.</p><p><img src="/assets/img/gravitational-field-and-potential/spherical-shell.png" alt="Spherical shell" /></p><p>Vypočtěme potenciál v bodě $P$, který je ve vzdálenosti $R$ od středu. Při předpokladu homogenního rozložení hmoty ve slupce platí $\rho(r^\prime)=\rho$ a vzhledem k symetrii podle azimutu $\phi$ kolem přímky spojující střed koule s bodem $P$ dostaneme</p>\[\begin{align*} \Phi &amp;= -G\int_V \frac{\rho(r^\prime)}{r}dv^\prime \\ &amp;= -\rho G \int_0^{2\pi} \int_0^\pi \int_b^a \frac{1}{r}(dr^\prime)(r^\prime d\theta)(r^\prime \sin\theta\, d\phi) \\ &amp;= -\rho G \int_0^{2\pi} d\phi \int_b^a {r^\prime}^2 dr^\prime \int_0^\pi \frac{\sin\theta}{r}d\theta \\ &amp;= -2\pi\rho G \int_b^a {r^\prime}^2 dr^\prime \int_0^\pi \frac{\sin\theta}{r}d\theta. \label{eqn:spherical_shell_1}\tag{13} \end{align*}\]<p>Z kosinové věty plyne</p>\[r^2 = {r^\prime}^2 + R^2 - 2r^\prime R \cos\theta \label{eqn:law_of_cosines}\tag{14}\]<p>a protože $R$ je konstanta, diferenciací podle $r^\prime$ dostaneme</p>\[2rdr = 2r^\prime R \sin\theta d\theta\]<p>tedy</p>\[\frac{\sin\theta}{r}d\theta = \frac{dr}{r^\prime R} \tag{15}\]<p>Po dosazení do ($\ref{eqn:spherical_shell_1}$) vyjde</p>\[\Phi = -\frac{2\pi\rho G}{R} \int_b^a r^\prime dr^\prime \int_{r_\mathrm{min}}^{r_\mathrm{max}} dr. \label{eqn:spherical_shell_2}\tag{16}\]<p>kde $r_\mathrm{max}$ a $r_\mathrm{min}$ závisí na poloze bodu $P$.</p><h3 id="když-ra">Když $R&gt;a$</h3>\[\begin{align*} \Phi(R&gt;a) &amp;= -\frac{2\pi\rho G}{R} \int_b^a r^\prime dr^\prime \int_{R-r^\prime}^{R+r^\prime} dr \\ &amp;= - \frac{4\pi\rho G}{R} \int_b^a {r^\prime}^2 dr^\prime \\ &amp;= - \frac{4}{3}\frac{\pi\rho G}{R}(a^3 - b^3). \label{eqn:spherical_shell_outside_1}\tag{17} \end{align*}\]<p>Hmotnost kulové slupky $M$ je</p>\[M = \frac{4}{3}\pi\rho(a^3 - b^3) \label{eqn:mass_of_shell}\tag{18}\]<p>a tedy potenciál je</p>\[\boxed{\Phi(R&gt;a) = -\frac{GM}{R}} \label{eqn:spherical_shell_outside_2}\tag{19}\]<blockquote class="prompt-info"><p>Porovnáme-li vztah pro gravitační potenciál od hmotného bodu o hmotnosti $M$, tj. ($\ref{eqn:g_potential}$), s právě získaným výsledkem ($\ref{eqn:spherical_shell_outside_2}$), vidíme, že jsou totožné. To znamená, že při výpočtu gravitačního potenciálu v libovolném vnějším bodě od kulově symetrického rozložení hmoty (spherical symmetric distribution) lze bez újmy považovat veškerou hmotnost za soustředěnou ve středu. Patří sem většina kulových těles alespoň určité velikosti, jako je Země či Měsíc; lze je považovat za překryv nesčetně mnoha kulových slupek se stejným středem a různými průměry, podobně jako <a href="https://en.wikipedia.org/wiki/Matryoshka_doll">matrjoška</a>. To je také <a href="#newtonuv-zakon-vseobecne-gravitace">oprávnění pro předpoklad, že je výpočet správný i tehdy, když tělesa jako Země nebo Měsíc považujeme za hmotné body bez rozměrů</a>, jak bylo zmíněno v první části tohoto článku.</p></blockquote><h3 id="když-rb">Když $R&lt;b$</h3>\[\begin{align*} \Phi(R&lt;b) &amp;= -\frac{2\pi\rho G}{R} \int_b^a r^\prime dr^\prime \int_{r^\prime - R}^{r^\prime + R}dr \\ &amp;= -4\pi\rho G \int_b^a r^\prime dr^\prime \\ &amp;= -2\pi\rho G(a^2 - b^2). \label{eqn:spherical_shell_inside}\tag{20} \end{align*}\]<blockquote class="prompt-info"><p>Uvnitř kulově symetrické hmotné slupky je gravitační potenciál konstantní nezávisle na poloze a působící gravitace je $0$.</p></blockquote><blockquote class="prompt-tip"><p>A právě to je také jeden z hlavních důvodů, proč je „teorie duté Země“—typický příklad pseudovědy—nesmysl. Pokud by Země opravdu měla tvar kulové slupky a byla uvnitř prázdná, jak tato teorie tvrdí, pak by na všechny objekty uvnitř dutiny nepůsobila zemská gravitace. Když vezmeme v úvahu hmotnost a objem Země, je dutina takového rozsahu sama o sobě nereálná; a i kdyby existovala, případné organismy by nežily „na vnitřní stěně“ jako na zemi, ale volně by se vznášely v beztížném stavu jako na kosmické stanici.<br /> Je sice možné, že <a href="https://youtu.be/VD6xJq8NguY?si=szgtuLkuk6rPJag3">v hloubce několika kilometrů pod povrchem mohou žít mikroorganismy</a>, ale určitě ne v podobě, jakou předpokládá teorie duté Země. Román Julese Verna 《Cesta do středu Země (Voyage au centre de la Terre)》 i film „Cesta do středu Země (Journey to the Center of the Earth)“ mám také moc rád, ale fikce je fikce—neberme ji smrtelně vážně.</p></blockquote><h3 id="když-bra">Když $b&lt;R&lt;a$</h3>\[\begin{align*} \Phi(b&lt;R&lt;a) &amp;= -\frac{4\pi\rho G}{3R}(R^3 - b^3) - 2\pi\rho G(a^2 - R^2) \\ &amp;= -4\pi\rho G \left( \frac{a^2}{2} - \frac{b^3}{3R} - \frac{R^2}{6} \right) \label{eqn:within_spherical_shell}\tag{21} \end{align*}\]<h3 id="výsledek">Výsledek</h3><p>Gravitační potenciál $\Phi$ ve třech oblastech, a odpovídající velikost vektoru gravitačního pole $|\mathbf{g}|$, jako funkce vzdálenosti $R$:</p><p><img src="/physics-visualizations/figs/shell-theorem-gravitational-potential.png" alt="Gravitational Potential as a Function of R" /><br /> <img src="/physics-visualizations/figs/shell-theorem-field-vector.png" alt="Magnitude of the Field Vector as a Function of R" /></p><blockquote><ul><li>Kód vizualizace v Pythonu: <a href="https://github.com/yunseo-kim/physics-visualizations/blob/main/src/shell_theorem.py">repozitář yunseo-kim/physics-visualizations</a><li>licence: <a href="https://github.com/yunseo-kim/physics-visualizations?tab=readme-ov-file#license">See here</a></ul></blockquote><p>Je vidět, že gravitační potenciál i velikost vektoru gravitačního pole jsou spojité. Kdyby byl gravitační potenciál v nějakém bodě nespojitý, pak by v tomto bodě byl gradient potenciálu, tedy velikost gravitační síly, nekonečný; to není fyzikálně smysluplné, a proto musí být potenciálová funkce všude spojitá. Nicméně <em>derivace</em> vektoru gravitačního pole je na vnitřním a vnějším povrchu slupky nespojitá.</p><h2 id="příklad-rotační-křivky-galaxií">Příklad: rotační křivky galaxií</h2><p>Astronomická pozorování ukazují, že ve spirálních galaxiích rotujících kolem svého středu—například v Mléčné dráze nebo v galaxii Andromeda—je většina pozorovatelné hmoty soustředěna poblíž centrální oblasti. Přesto jsou oběžné rychlosti pozorovatelné hmoty ve spirálních galaxiích ve výrazném nesouladu s hodnotami teoreticky předpovězenými z pozorovatelného rozložení hmoty, a jak je vidět na následujícím grafu, ve větších vzdálenostech jsou téměř konstantní.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/b/b9/GalacticRotation2.svg" alt="Galactic Rotation" width="972" /></p><blockquote><p><em>Zdroj obrázku</em></p><ul><li>autor: uživatel Wikipedie <a href="https://en.wikipedia.org/wiki/User:PhilHibbs">PhilHibbs</a><li>licence: Public Domain</ul></blockquote><p> <video class="embed-video file" controls="" autoplay="" loop=""> <source src="https://cdn.jsdelivr.net/gh/yunseo-kim/yunseo-kim.github.io/assets/video/gravitational-field-and-potential/Galaxy_rotation_under_the_influence_of_dark_matter.webm" type="video/webm" /> <source src="https://cdn.jsdelivr.net/gh/yunseo-kim/yunseo-kim.github.io/assets/video/gravitational-field-and-potential/Galaxy_rotation_under_the_influence_of_dark_matter.ogg" type="video/ogg" /> Your browser does not support the video tag. Here is a <a href="https://cdn.jsdelivr.net/gh/yunseo-kim/yunseo-kim.github.io/assets/video/gravitational-field-and-potential/Galaxy_rotation_under_the_influence_of_dark_matter.webm">link to the video file</a> instead. </video> <em>Vlevo: rotace galaxie předpovězená z pozorovatelné hmoty | vpravo: skutečně pozorovaná rotace galaxie.</em></p><blockquote><p><em>Zdroj videa</em></p><ul><li>odkaz na původní soubor (Ogg Theora video): <a href="https://commons.wikimedia.org/wiki/File:Galaxy_rotation_under_the_influence_of_dark_matter.ogv">https://commons.wikimedia.org/wiki/File:Galaxy_rotation_under_the_influence_of_dark_matter.ogv</a><li>autor: <a href="https://beltoforion.de/en/index.php">Ingo Berg</a><li>licence: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a><li>použitá simulační metoda a kód: <a href="https://beltoforion.de/en/spiral_galaxy_renderer/">https://beltoforion.de/en/spiral_galaxy_renderer/</a></ul></blockquote><blockquote class="prompt-danger"><p>Dříve vložený obrázek <code class="language-plaintext highlighter-rouge">Rotation curve of spiral galaxy Messier 33 (Triangulum).png</code> byl smazán z Wikimedia Commons poté, co se ukázalo, že uživatel Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Accrama">Mario De Leo</a> jej <a href="https://commons.wikimedia.org/wiki/Commons:Deletion_requests/File:Rotation_curve_of_spiral_galaxy_Messier_33_(Triangulum).png">vytvořil jako odvozené dílo plagiující nevolně licencované dílo profesora Marka Whittlea z University of Virginia bez řádné citace</a>. Z tohoto důvodu byl odstraněn i z této stránky.</p></blockquote><p>Ověřme, že pokud je hmotnost galaxie soustředěna do středu, teoreticky předpovězená oběžná rychlost jako funkce vzdálenosti neodpovídá pozorování, a ukažme, že k vysvětlení pozorování musí hmotnost $M(R)$ rozložená uvnitř vzdálenosti $R$ od středu růst úměrně $R$.</p><p>Nejprve: je-li hmotnost galaxie $M$ soustředěna ve středu, oběžnou rychlost ve vzdálenosti $R$ dostaneme z</p>\[\frac{GMm}{R^2} = \frac{mv^2}{R}\] \[v = \sqrt{\frac{GM}{R}} \propto \frac{1}{\sqrt{R}}.\]<p>V tomto případě bychom (podle tečkované čáry v předchozích grafech) očekávali oběžnou rychlost klesající jako $1/\sqrt{R}$. Pozorování však ukazují, že oběžná rychlost $v$ je téměř konstantní nezávisle na vzdálenosti $R$, takže teorie a pozorování se neshodují. Tento výsledek lze vysvětlit pouze tehdy, když $M(R)\propto R$.</p><p>Zavedeme-li konstantu úměrnosti $k$ a položíme $M(R) = kR$, pak</p>\[v = \sqrt{\frac{GM(R)}{R}} = \sqrt{Gk}\ \text{(konstanta)}.\]<p>Z toho astrofyzikové vyvozují, že v mnoha galaxiích musí existovat dosud neobjevená „temná hmota (dark matter)“ a že tato temná hmota musí tvořit více než 90 % hmoty ve vesmíru. Povaha temné hmoty však zatím nebyla jednoznačně objasněna; existují také pokusy (byť nejde o hlavní proud) vysvětlit pozorování bez předpokladu temné hmoty, například pomocí modifikované newtonovské dynamiky (Modified Newtonian Dynamics, MOND). Dnes se tento výzkum nachází na samé špičce astrofyziky.</p>]]> </content> </entry> <entry><title xml:lang="cs">Metoda neurčených koeficientů</title><link href="https://www.yunseo.kim/cs/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="am" /><published>2025-04-20T00:00:00+09:00</published> <updated>2025-04-20T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/method-of-undetermined-coefficients/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="cs">Metoda neurčených koeficientů umožňuje jednoduše řešit úlohy s počátečními podmínkami pro určité typy nehomogenních lineárních ODR s konstantními koeficienty; v praxi je užitečná např. pro kmitavé soustavy a modely obvodů RLC.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Metoda neurčených koeficientů umožňuje jednoduše řešit úlohy s počátečními podmínkami pro určité typy nehomogenních lineárních ODR s konstantními koeficienty; v praxi je užitečná např. pro kmitavé soustavy a modely obvodů RLC.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li>Oblast použití <strong>metody neurčených koeficientů</strong>:<ul><li>má <strong>konstantní koeficienty $a$ a $b$</strong><li>vstup $r(x)$ je tvořen exponenciální funkcí, mocninami $x$, $\cos$ nebo $\sin$, případně součty a součiny těchto funkcí<li>lineární ODR $y^{\prime\prime} + ay^{\prime} + by = r(x)$</ul><li><strong>Výběrová pravidla pro metodu neurčených koeficientů</strong><ul><li><strong>(a) základní pravidlo (basic rule)</strong>: Pokud je v rovnici ($\ref{eqn:linear_ode_with_constant_coefficients}$) $r(x)$ jednou z funkcí v prvním sloupci tabulky, zvolíme $y_p$ ze stejného řádku a neznámé koeficienty určíme dosazením $y_p$ a jeho derivací do ($\ref{eqn:linear_ode_with_constant_coefficients}$).<li><strong>(b) modifikační pravidlo (modification rule)</strong>: Pokud zvolený člen $y_p$ je řešením odpovídající homogenní rovnice $y^{\prime\prime} + ay^{\prime} + by = 0$, vynásobíme tento člen $x$ (nebo $x^2$, pokud odpovídá dvojnásobnému kořeni charakteristické rovnice homogenní ODR).<li><strong>(c) pravidlo součtu (sum rule)</strong>: Je-li $r(x)$ součtem funkcí z prvního sloupce tabulky, zvolíme $y_p$ jako součet odpovídajících funkcí z druhého sloupce.</ul></ul><table><thead><tr><th style="text-align: left">člen v $r(x)$<th style="text-align: left">volba pro $y_p(x)$<tbody><tr><td style="text-align: left">$ke^{\gamma x}$<td style="text-align: left">$Ce^{\gamma x}$<tr><td style="text-align: left">$kx^n\ (n=0,1,\cdots)$<td style="text-align: left">$K_nx^n + K_{n-1}x^{n-1} + \cdots + K_1x + K_0$<tr><td style="text-align: left">$k\cos{\omega x}$<br />$k\sin{\omega x}$<td style="text-align: left">$K\cos{\omega x} + M\sin{\omega x}$<tr><td style="text-align: left">$ke^{\alpha x}\cos{\omega x}$<br />$ke^{\alpha x}\sin{\omega x}$<td style="text-align: left">$e^{\alpha x}(K\cos{\omega x} + M\sin{\omega x})$</table></blockquote><h2 id="předpoklady">Předpoklady</h2><ul><li><a href="/cs/posts/homogeneous-linear-odes-of-second-order/">Homogenní lineární ODR 2. řádu (Homogeneous Linear ODEs of Second Order)</a><li><a href="/cs/posts/homogeneous-linear-odes-with-constant-coefficients/">Homogenní lineární ODR 2. řádu s konstantními koeficienty</a><li><a href="/cs/posts/euler-cauchy-equation/">Eulerova–Cauchyho rovnice</a><li><a href="/cs/posts/wronskian-existence-and-uniqueness-of-solutions/">Wronskián (Wronskian), existence a jednoznačnost řešení</a><li><a href="/cs/posts/nonhomogeneous-linear-odes-of-second-order/">Nehomogenní lineární ODR 2. řádu (Nonhomogeneous Linear ODEs of Second Order)</a><li>vektorový prostor, lineární obal (lineární algebra)</ul><h2 id="metoda-neurčených-koeficientů">Metoda neurčených koeficientů</h2><p>Uvažujme nehomogenní lineární ODR 2. řádu s $r(x) \not\equiv 0$</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x) \label{eqn:nonhomogeneous_linear_ode}\tag{1}\]<p>a odpovídající homogenní rovnici</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode}\tag{2}\]<p>Jak jsme již viděli v článku <a href="/cs/posts/nonhomogeneous-linear-odes-of-second-order/">Nehomogenní lineární ODR 2. řádu (Nonhomogeneous Linear ODEs of Second Order)</a>, pro vyřešení úlohy s počátečními podmínkami k nehomogenní lineární ODR ($\ref{eqn:nonhomogeneous_linear_ode}$) je potřeba nejprve vyřešit homogenní ODR ($\ref{eqn:homogeneous_linear_ode}$), získat $y_h$, poté najít partikulární řešení $y_p$ rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) a dostat obecné řešení</p>\[y(x) = y_h(x) + y_p(x) \label{eqn:general_sol}\tag{3}\]<p>Jak tedy $y_p$ najít? Obecnou metodou je <strong>metoda variace parametrů (method of variation of parameters)</strong>, ale v některých případech lze použít výrazně jednodušší <strong>metodu neurčených koeficientů (method of undetermined coefficients)</strong>. Ta je obzvlášť často využívaná v inženýrské praxi, protože se hodí pro kmitavé soustavy a modely elektrických obvodů RLC.</p><p>Metoda neurčených koeficientů je vhodná pro lineární ODR se <strong>stálými koeficienty $a$ a $b$</strong>, kde vstup $r(x)$ je tvořen exponenciální funkcí, mocninami $x$, $\cos$ nebo $\sin$, případně součty a součiny těchto funkcí:</p>\[y^{\prime\prime} + ay^{\prime} + by = r(x) \label{eqn:linear_ode_with_constant_coefficients}\tag{4}\]<p>Klíč je v tom, že takové $r(x)$ má derivace podobného tvaru. Pro použití metody neurčených koeficientů zvolíme $y_p$ podobného tvaru jako $r(x)$, avšak s neznámými koeficienty, které určíme dosazením $y_p$ a jeho derivací do dané ODR. Pravidla pro volbu vhodného $y_p$ pro prakticky důležité tvary $r(x)$ jsou následující.</p><blockquote class="prompt-info"><p><strong>Výběrová pravidla pro metodu neurčených koeficientů</strong><br /> <strong>(a) základní pravidlo (basic rule)</strong>: Pokud je v rovnici ($\ref{eqn:linear_ode_with_constant_coefficients}$) $r(x)$ jednou z funkcí v prvním sloupci tabulky, zvolíme $y_p$ ze stejného řádku a neznámé koeficienty určíme dosazením $y_p$ a jeho derivací do ($\ref{eqn:linear_ode_with_constant_coefficients}$).<br /> <strong>(b) modifikační pravidlo (modification rule)</strong>: Pokud zvolený člen $y_p$ je řešením odpovídající homogenní rovnice $y^{\prime\prime} + ay^{\prime} + by = 0$, vynásobíme tento člen $x$ (nebo $x^2$, pokud odpovídá dvojnásobnému kořeni charakteristické rovnice homogenní ODR).<br /> <strong>(c) pravidlo součtu (sum rule)</strong>: Je-li $r(x)$ součtem funkcí z prvního sloupce tabulky, zvolíme $y_p$ jako součet odpovídajících funkcí z druhého sloupce.</p><table><thead><tr><th style="text-align: left">člen v $r(x)$<th style="text-align: left">volba pro $y_p(x)$<tbody><tr><td style="text-align: left">$ke^{\gamma x}$<td style="text-align: left">$Ce^{\gamma x}$<tr><td style="text-align: left">$kx^n\ (n=0,1,\cdots)$<td style="text-align: left">$K_nx^n + K_{n-1}x^{n-1} + \cdots + K_1x + K_0$<tr><td style="text-align: left">$k\cos{\omega x}$<br />$k\sin{\omega x}$<td style="text-align: left">$K\cos{\omega x} + M\sin{\omega x}$<tr><td style="text-align: left">$ke^{\alpha x}\cos{\omega x}$<br />$ke^{\alpha x}\sin{\omega x}$<td style="text-align: left">$e^{\alpha x}(K\cos{\omega x} + M\sin{\omega x})$</table></blockquote><p>Tato metoda je nejen jednoduchá, ale má i výhodu určité „samokontrolovatelnosti“. Pokud $y_p$ zvolíme špatně nebo zvolíme příliš málo členů, narazíme na rozpor; pokud naopak zvolíme členů příliš mnoho, koeficienty nadbytečných členů vyjdou jako $0$ a dostaneme správný výsledek. I když se při použití metody neurčených koeficientů něco pokazí, obvykle to během výpočtu přirozeně odhalíme, takže pokud podle výše uvedených pravidel zvolíte rozumné $y_p$, můžete metodu bez obav vyzkoušet.</p><h3 id="důkaz-pravidla-součtu">Důkaz pravidla součtu</h3><p>Uvažujme nehomogenní lineární ODR tvaru $r(x) = r_1(x) + r_2(x)$:</p>\[y^{\prime\prime} + ay^{\prime} + by = r_1(x) + r_2(x)\]<p>Nyní uvažujme následující dvě rovnice se stejnou levou stranou a vstupy $r_1$, $r_2$:</p>\[\begin{gather*} y^{\prime\prime} + ay^{\prime} + by = r_1(x) \\ y^{\prime\prime} + ay^{\prime} + by = r_2(x) \end{gather*}\]<p>Nechť mají řešení ${y_p}_1$, ${y_p}_2$. Označme levou stranu jako $L[y]$. Díky linearitě $L[y]$ pak pro $y_p = {y_p}_1 + {y_p}_2$ platí následující, čímž je pravidlo součtu dokázáno:</p>\[L[y_p] = L[{y_p}_1 + {y_p}_2] = L[{y_p}_1] + L[{y_p}_2] = r_1 + r_2 = r. \ \blacksquare\]<h2 id="příklad-yprimeprime--ayprime--by--kegamma-x">Příklad: $y^{\prime\prime} + ay^{\prime} + by = ke^{\gamma x}$</h2><p>Podle základního pravidla (a) položíme $y_p = Ce^{\gamma x}$ a dosadíme do dané rovnice $y^{\prime\prime} + ay^{\prime} + by = ke^{\gamma x}$:</p>\[\gamma^2 Ce^{\gamma x} + \gamma aCe^{\gamma x} + bCe^{\gamma x} = ke^{\gamma x}\] \[C(\gamma^2 + a\gamma + b)e^{\gamma x} = ke^{\gamma x}\] \[C(\gamma^2 + a\gamma + b) = k.\]<h3 id="případ-kdy-gamma2--agamma--b-neq-0">Případ, kdy $\gamma^2 + a\gamma + b \neq 0$</h3><p>Neurčený koeficient $C$ lze určit následovně a dostaneme $y_p$:</p>\[C = \frac{k}{\gamma^2 + a\gamma + b}\] \[y_p = Ce^{\gamma x} = \frac{k}{\gamma^2 + a\gamma + b} e^{\gamma x}.\]<h3 id="případ-kdy-gamma2--agamma--b--0">Případ, kdy $\gamma^2 + a\gamma + b = 0$</h3><p>V tomto případě musíme použít modifikační pravidlo (b). Nejprve využijeme $b = -\gamma^2 - a\gamma = -\gamma(a + \gamma)$ a určeme kořeny charakteristické rovnice homogenní ODR $y^{\prime\prime} + ay^{\prime} + by = 0$.</p>\[y^{\prime\prime} + ay^{\prime} - \gamma(a + \gamma)y = 0\] \[\lambda^2 + a\lambda - \gamma(a + \gamma) = 0\] \[(\lambda + (a + \gamma))(\lambda - \gamma) = 0\] \[\lambda = \gamma, -a -\gamma.\]<p>Odtud získáme bázi řešení homogenní ODR:</p>\[y_1 = e^{\gamma x}, \quad y_2 = e^{(-a - \gamma)x}\]<h4 id="případ-kdy-gamma-neq--a-gamma">Případ, kdy $\gamma \neq -a-\gamma$</h4><p>Protože zvolené $Ce^{\gamma x}$ odpovídá kořeni, který není dvojnásobný, použijeme podle modifikačního pravidla (b) násobení $x$ a položíme $y_p = Cxe^{\gamma x}$.</p><p>Dosadíme takto upravené $y_p$ zpět do dané rovnice $y^{\prime\prime} + ay^{\prime} - \gamma(a + \gamma)y = ke^{\gamma x}$:</p>\[C(2\gamma + \gamma^2 x)e^{\gamma x} + aC(1 + \gamma x)e^{\gamma x} - \gamma(a + \gamma)Cxe^{\gamma x} = ke^{\gamma x}\] \[C \left[\left\{\gamma^2 + a\gamma -\gamma(a + \gamma)\right\}x + 2\gamma + a \right]e^{\gamma x} = ke^{\gamma x}\] \[C(2\gamma + a)e^{\gamma x} = ke^{\gamma x}\] \[C(2\gamma + a) = k\] \[\therefore C = \frac{k}{2\gamma + a}, \quad y_p = Cxe^{\gamma x} = \frac{k}{2\gamma + a}xe^{\gamma x}.\]<h4 id="případ-kdy-gamma---a-gamma">Případ, kdy $\gamma = -a-\gamma$</h4><p>V tomto případě je $Ce^{\gamma x}$ dvojnásobným kořenem pro odpovídající homogenní ODR, takže podle modifikačního pravidla (b) násobíme $x^2$ a položíme $y_p = Cx^2 e^{\gamma x}$.</p><p>Dosadíme takto upravené $y_p$ zpět do dané rovnice $y^{\prime\prime} - 2\gamma y^{\prime} + \gamma^2 y = ke^{\gamma x}$:</p>\[C(2 + 4\gamma x + \gamma^2 x^2)e^{\gamma x} + C(-4\gamma x - 2\gamma^2 x^2)e^{\gamma x} + C(\gamma^2 x^2)e^{\gamma x} = ke^{\gamma x}\] \[2Ce^{\gamma x} = ke^{\gamma x}\] \[2C = k\] \[\therefore C = \frac{k}{2}, \quad y_p = Cx^2 e^{\gamma x} = \frac{k}{2}x^2 e^{\gamma x}.\]<h2 id="rozšíření-metody-neurčených-koeficientů-rx-jako-součin-funkcí">Rozšíření metody neurčených koeficientů: $r(x)$ jako součin funkcí</h2><p>Uvažujme nehomogenní lineární ODR, kde $r(x) = k x^n e^{\alpha x}\cos(\omega x)$:</p>\[y^{\prime\prime} + ay^{\prime} + by = C x^n e^{\alpha x}\cos(\omega x)\]<p>Ukážeme, že pokud je $r(x)$ součinem a součtem exponenciálních funkcí $e^{\alpha x}$, mocnin $x^m$, $\cos{\omega x}$ nebo $\sin{\omega x}$ (zde pro jednoduchost předpokládáme $\cos$, aniž bychom ztratili obecnost), tj. lze jej vyjádřit jako součet a součin funkcí z prvního sloupce předchozí tabulky, pak existuje partikulární řešení $y_p$ jako součet a součin odpovídajících funkcí z druhého sloupce téže tabulky.</p><blockquote class="prompt-tip"><p>Pro striktní důkaz je část textu napsána s využitím lineární algebry; takové pasáže jsou označeny * . Tyto části můžete přeskočit a pro přibližné pochopení stačí číst zbytek.</p></blockquote><h3 id="definice-vektorového-prostoru-v">Definice vektorového prostoru $V$*</h3><p>Pro $r(x)$ tvaru</p>\[\begin{align*} r(x) &amp;= C_1x^{n_1}e^{\alpha_1 x} \times C_2x^{n_2}e^{\alpha_2 x}\cos(\omega x) \times \cdots \\ &amp;= C x^n e^{\alpha x}\cos(\omega x) \end{align*}\]<p>lze zvolit vektorový prostor $V$ tak, aby $r(x) \in V$, například takto:</p>\[V = \mathrm{span}\left\{x^k e^{\alpha x}\cos(\omega x), \; x^k e^{\alpha x}\sin(\omega x) \bigm| k=0,1,\dots,n \right\}\]<h3 id="tvary-derivací-exponenciálních-polynomiálních-a-goniometrických-funkcí">Tvary derivací exponenciálních, polynomiálních a goniometrických funkcí</h3><p>Tvary derivací základních funkcí uvedených v prvním sloupci tabulky jsou následující:</p><ul><li>exponenciální funkce: $\cfrac{d}{dx}e^{\alpha x} = \alpha e^{\alpha x}$<li>polynomiální funkce: $\cfrac{d}{dx}x^m = mx^{m-1}$<li>goniometrické funkce: $\cfrac{d}{dx}\cos\omega x = -\omega\sin\omega x, \quad \cfrac{d}{dx}\sin\omega x = \omega\cos\omega x$</ul><p>Derivace získané derivováním těchto funkcí lze opět vyjádřit jako <u>součet funkcí stejného typu</u>.</p><p>Proto, jsou-li $f$ a $g$ výše uvedené funkce nebo jejich součty, pak pro $r(x) = f(x)g(x)$ platí (pravidlo pro derivaci součinu):</p>\[\begin{align*} (fg)^{\prime} &amp;= f^{\prime}g + fg^{\prime}, \\ (fg)^{\prime\prime} &amp;= f^{\prime\prime}g + 2f^{\prime}g^{\prime} + fg^{\prime\prime} \end{align*}\]<p>a zde jsou $f$, $f^{\prime}$, $f^{\prime\prime}$ i $g$, $g^{\prime}$, $g^{\prime\prime}$ vždy součty či konstantní násobky exponenciálních, polynomiálních a goniometrických funkcí. Tedy také $r^{\prime}(x) = (fg)^{\prime}$ a $r^{\prime\prime}(x) = (fg)^{\prime\prime}$ lze stejně jako $r(x)$ vyjádřit jako součty a součiny těchto funkcí.</p><h3 id="invariance-v-vůči-derivačnímu-operátoru-d-a-lineárnímu-zobrazení-l">Invariance $V$ vůči derivačnímu operátoru $D$ a lineárnímu zobrazení $L$*</h3><p>Jinými slovy, nejen $r(x)$ samotné, ale i $r^{\prime}(x)$ a $r^{\prime\prime}(x)$ jsou lineární kombinace členů tvaru $x^k e^{\alpha x}\cos(\omega x)$ a $x^k e^{\alpha x}\sin(\omega x)$, takže</p>\[r(x) \in V \implies r^{\prime}(x) \in V,\ r^{\prime\prime}(x) \in V.\]<p>Zavedeme-li derivační operátor $D$ obecně pro všechny prvky $V$, dostaneme: <em>vektorový prostor $V$ je uzavřený vůči derivaci $D$</em>. Označíme-li levou stranu dané rovnice $y^{\prime\prime} + ay^{\prime} + by$ jako $L[y]$, pak <em>$V$ je invariantní vůči $L$ (invariant)</em>.</p>\[D^2(V)\subseteq V,\quad aD(V)\subseteq V,\quad b\,V\subseteq V \implies L(V)\subseteq V.\]<p>Protože $r(x) \in V$ a $V$ je invariantní vůči $L$, existuje další prvek $y_p \in V$ splňující $L[y_p] = r$:</p>\[\exists y_p \in V: L[y_p] = r\]<h3 id="ansatz">Ansatz</h3><p>Proto, zvolíme-li vhodné $y_p$ s neurčenými koeficienty $A_0, A_1, \dots, A_n$ a $K$, $M$ tak, aby tvořilo součet všech možných členů součinového typu, můžeme podle základního pravidla (a) a modifikačního pravidla (b) určit neurčené koeficienty dosazením $y_p$ (nebo $xy_p$, $x^2y_p$) a jeho derivací do dané rovnice. Číslo $n$ se zvolí podle stupně $r(x)$ vzhledem k $x$.</p>\[y_p = e^{\alpha x}(A_nx^n + A_{n-1}x^{n-1} + \cdots + A_1x + A_0)(K\cos{\omega x} + M \sin{\omega x}).\]<p>$\blacksquare$</p><blockquote class="prompt-warning"><p>Pokud daný vstup $r(x)$ obsahuje více různých hodnot $\alpha_i$ a $\omega_j$, je potřeba zvolit $y_p$ tak, aby pro každou kombinaci $\alpha_i$, $\omega_j$ zahrnovalo všechny možné členy tvaru $x^{k}e^{\alpha_i x}\cos(\omega_j x)$ a $x^{k}e^{\alpha_i x}\sin(\omega_j x)$, bez výjimek.<br /> Výhodou metody neurčených koeficientů je její jednoduchost; pokud se ansatz příliš zkomplikuje a tato výhoda se vytrácí, může být lepší použít (později probíranou) metodu variace parametrů.</p></blockquote><h2 id="rozšíření-metody-neurčených-koeficientů-eulerovacauchyho-rovnice">Rozšíření metody neurčených koeficientů: Eulerova–Cauchyho rovnice</h2><p>Metodu neurčených koeficientů lze použít nejen pro <a href="/cs/posts/homogeneous-linear-odes-with-constant-coefficients/">homogenní lineární ODR 2. řádu s konstantními koeficienty</a>, ale také pro <a href="/cs/posts/euler-cauchy-equation/">Eulerovu–Cauchyho rovnici</a></p>\[x^2y^{\prime\prime} + axy^{\prime} + by = r(x) \label{eqn:euler_cauchy}\tag{5}\]<h3 id="substituce-proměnné">Substituce proměnné</h3><p>Pokud provedeme <a href="/cs/posts/euler-cauchy-equation/#transformace-na-homogenni-linearni-odr-2-radu-s-konstantnimi-koeficienty">substituci $x = e^t$ a převedeme na homogenní lineární ODR 2. řádu s konstantními koeficienty</a>,</p>\[\frac{d}{dx} = \frac{1}{x}\frac{d}{dt}, \quad \frac{d^2}{dx^2} = \frac{1}{x^2}\left(\frac{d^2}{dt^2} - \frac{d}{dt} \right)\]<p>a jak jsme si již ukázali, Eulerova–Cauchyho rovnice se dá přepsat na lineární ODR s konstantními koeficienty v proměnné $t$:</p>\[y^{\prime\prime} + (a-1)y^{\prime} + by = r(e^t). \label{eqn:substituted}\tag{6}\]<p>Nyní stačí na rovnici ($\ref{eqn:substituted}$) aplikovat stejným způsobem <a href="#metoda-neurcenych-koeficientu">dříve probíranou metodu neurčených koeficientů</a>, vyřešit ji pro $t$ a nakonec s využitím $t = \ln x$ získat řešení v proměnné $x$.</p><h3 id="případ-kdy-je-rx-mocnina-x-přirozený-logaritmus-nebo-součetsoučin-takových-funkcí">Případ, kdy je $r(x)$ mocnina $x$, přirozený logaritmus nebo součet/součin takových funkcí</h3><p>Zejména pokud je vstup $r(x)$ tvořen mocninami $x$, přirozeným logaritmem nebo součty a součiny takových funkcí, lze podle následujících výběrových pravidel (pro Eulerovu–Cauchyho rovnici) přímo zvolit vhodné $y_p$.</p><blockquote class="prompt-info"><p><strong>Výběrová pravidla pro metodu neurčených koeficientů: Eulerova–Cauchyho rovnice</strong><br /> <strong>(a) základní pravidlo (basic rule)</strong>: Pokud je v rovnici ($\ref{eqn:euler_cauchy}$) $r(x)$ jednou z funkcí v prvním sloupci tabulky, zvolíme $y_p$ ze stejného řádku a neznámé koeficienty určíme dosazením $y_p$ a jeho derivací do ($\ref{eqn:euler_cauchy}$).<br /> <strong>(b) modifikační pravidlo (modification rule)</strong>: Pokud zvolený člen $y_p$ je řešením odpovídající homogenní rovnice $x^2y^{\prime\prime} + axy^{\prime} + by = 0$, vynásobíme tento člen $\ln{x}$ (nebo $(\ln{x})^2$, pokud odpovídá dvojnásobnému kořeni charakteristické rovnice homogenní ODR).<br /> <strong>(c) pravidlo součtu (sum rule)</strong>: Je-li $r(x)$ součtem funkcí z prvního sloupce tabulky, zvolíme $y_p$ jako součet odpovídajících funkcí z druhého sloupce.</p><table><thead><tr><th style="text-align: left">člen v $r(x)$<th style="text-align: left">volba pro $y_p(x)$<tbody><tr><td style="text-align: left">$kx^m\ (m=0,1,\cdots)$<td style="text-align: left">$Ax^m$<tr><td style="text-align: left">$kx^m \ln{x}\ (m=0,1,\cdots)$<td style="text-align: left">$x^m(B\ln x + C)$<tr><td style="text-align: left">$k(\ln{x})^s\ (s=0,1,\cdots)$<td style="text-align: left">$D_0 + D_1\ln{x} + \cdots + D_{s-1}(\ln{x})^{s-1} + D_s(\ln{x})^s$<tr><td style="text-align: left">$kx^m (\ln{x})^s$<br />$(m=0,1,\cdots ;\; s=0,1,\cdots)$<td style="text-align: left">$x^m \left( D_0 + D_1\ln{x} + \cdots + D_{s-1}(\ln{x})^{s-1} + D_s(\ln{x})^s \right)$</table></blockquote><p>Tímto způsobem lze pro prakticky důležité tvary vstupu $r(x)$ najít stejné $y_p$ jako při použití <a href="#substituce-promenne">substituce proměnné</a>, ale rychleji a pohodlněji. Tato pravidla pro Eulerovu–Cauchyho rovnici lze odvodit tak, že v <a href="#metoda-neurcenych-koeficientu">původních výběrových pravidlech</a> nahradíme $x$ výrazem $\ln{x}$.</p>]]> </content> </entry> <entry><title xml:lang="cs">Nehomogenní lineární ODR druhého řádu (Nonhomogeneous Linear ODEs of Second Order)</title><link href="https://www.yunseo.kim/cs/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="am" /><published>2025-04-16T00:00:00+09:00</published> <updated>2025-04-16T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/nonhomogeneous-linear-odes-of-second-order/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="cs">Ukážeme tvar obecného řešení nehomogenní lineární ODR 2. řádu ve vztahu k příslušné homogenní rovnici a dokážeme existenci obecného řešení i neexistenci singulárního řešení.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Ukážeme tvar obecného řešení nehomogenní lineární ODR 2. řádu ve vztahu k příslušné homogenní rovnici a dokážeme existenci obecného řešení i neexistenci singulárního řešení.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li><strong>Obecné řešení</strong> nehomogenní lineární ODR 2. řádu $y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x)$:<ul><li>$y(x) = y_h(x) + y_p(x)$<li>$y_h$: obecné řešení homogenní ODR $y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0$, tj. $y_h = c_1y_1 + c_2y_2$<li>$y_p$: partikulární řešení dané nehomogenní ODR</ul><li>Složka odezvy $y_p$ je určena pouze vstupem $r(x)$; pro tutéž nehomogenní ODR se $y_p$ nemění ani při změně počátečních podmínek. Rozdíl dvou partikulárních řešení téže nehomogenní ODR je řešením odpovídající homogenní ODR.<li><strong>Existence obecného řešení</strong>: jsou-li koeficienty $p(x)$, $q(x)$ a vstupní funkce $r(x)$ spojité, pak obecné řešení vždy existuje<li><strong>Neexistence singulárního řešení</strong>: obecné řešení obsahuje všechna řešení rovnice (tj. singulární řešení neexistuje)</ul></blockquote><h2 id="předpoklady">Předpoklady</h2><ul><li><a href="/cs/posts/homogeneous-linear-odes-of-second-order/">Homogenní lineární ODR druhého řádu (Homogeneous Linear ODEs of Second Order)</a><li><a href="/cs/posts/wronskian-existence-and-uniqueness-of-solutions/">Wronskián, existence a jednoznačnost řešení</a></ul><h2 id="obecné-a-partikulární-řešení-nehomogenní-lineární-odr-2-řádu">Obecné a partikulární řešení nehomogenní lineární ODR 2. řádu</h2><p>Uvažujme nehomogenní lineární ODR druhého řádu</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x) \label{eqn:nonhomogeneous_linear_ode}\tag{1}\]<p>kde $r(x) \not\equiv 0$. Na otevřeném intervalu $I$ má <strong>obecné řešení</strong> rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) tvar součtu obecného řešení odpovídající homogenní rovnice</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode}\tag{2}\]<p>tj. $y_h = c_1y_1 + c_2y_2$, a partikulárního řešení $y_p$ rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$):</p>\[y(x) = y_h(x) + y_p(x) \label{eqn:general_sol}\tag{3}\]<p>Dále, <strong>partikulární řešení</strong> rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) na intervalu $I$ je řešení získané z ($\ref{eqn:general_sol}$) dosazením konkrétních hodnot za libovolné konstanty $c_1$ a $c_2$ v $y_h$.</p><p>Jinými slovy: pokud k homogenní ODR ($\ref{eqn:homogeneous_linear_ode}$) přidáme vstup $r(x)$ závislý pouze na nezávislé proměnné $x$, pak se v odezvě objeví odpovídající člen $y_p$. Tento přidaný člen odezvy $y_p$ je, nezávisle na počátečních podmínkách, určen výhradně vstupem $r(x)$. Jak uvidíme dále, vezmeme-li rozdíl dvou libovolných řešení $y_1$ a $y_2$ rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) (tj. rozdíl dvou partikulárních řešení pro dvě různé počáteční podmínky), pak se část $y_p$ nezávislá na počátečních podmínkách vyruší a zůstane pouze rozdíl ${y_h}_1$ a ${y_h}_2$. Ten je podle <a href="/cs/posts/homogeneous-linear-odes-of-second-order/#princip-superpozice">principu superpozice</a> řešením rovnice ($\ref{eqn:homogeneous_linear_ode}$).</p><h2 id="vztah-mezi-řešeními-nehomogenní-odr-a-řešeními-odpovídající-homogenní-odr">Vztah mezi řešeními nehomogenní ODR a řešeními odpovídající homogenní ODR</h2><blockquote class="prompt-info"><p><strong>Věta 1: vztah mezi řešeními nehomogenní ODR ($\ref{eqn:nonhomogeneous_linear_ode}$) a homogenní ODR ($\ref{eqn:homogeneous_linear_ode}$)</strong><br /> <strong>(a)</strong> Na libovolném otevřeném intervalu $I$ je součet řešení $y$ nehomogenní ODR ($\ref{eqn:nonhomogeneous_linear_ode}$) a řešení $\tilde{y}$ homogenní ODR ($\ref{eqn:homogeneous_linear_ode}$) opět řešením rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) na $I$. Zejména výraz ($\ref{eqn:general_sol}$) je řešením rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) na $I$.<br /> <strong>(b)</strong> Rozdíl dvou řešení nehomogenní ODR ($\ref{eqn:nonhomogeneous_linear_ode}$) na $I$ je řešením homogenní ODR ($\ref{eqn:homogeneous_linear_ode}$) na $I$.</p></blockquote><h3 id="důkaz">Důkaz</h3><h4 id="a">(a)</h4><p>Levé strany rovnic ($\ref{eqn:nonhomogeneous_linear_ode}$) a ($\ref{eqn:homogeneous_linear_ode}$) označme $L[y]$. Potom pro libovolné řešení $y$ rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) a libovolné řešení $\tilde{y}$ rovnice ($\ref{eqn:homogeneous_linear_ode}$) na intervalu $I$ platí:</p>\[L[y + \tilde{y}] = L[y] + L[\tilde{y}] = r + 0 = r.\]<h4 id="b">(b)</h4><p>Pro libovolná dvě řešení $y$ a $y^*$ rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) na intervalu $I$ platí:</p>\[L[y - y^*] = L[y] - L[y^*] = r - r = 0.\ \blacksquare\]<h2 id="obecné-řešení-nehomogenní-odr-obsahuje-všechna-řešení">Obecné řešení nehomogenní ODR obsahuje všechna řešení</h2><p>Pro homogenní ODR ($\ref{eqn:homogeneous_linear_ode}$) již <a href="/cs/posts/wronskian-existence-and-uniqueness-of-solutions/#obecne-reseni-obsahuje-vsechna-reseni">víme, že obecné řešení obsahuje všechna řešení</a>. Ukažme, že totéž platí i pro nehomogenní ODR ($\ref{eqn:nonhomogeneous_linear_ode}$).</p><blockquote class="prompt-info"><p><strong>Věta 2: obecné řešení nehomogenní ODR obsahuje všechna řešení</strong><br /> Jestliže jsou koeficienty $p(x)$, $q(x)$ a vstupní funkce $r(x)$ rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) spojité na nějakém otevřeném intervalu $I$, pak lze každé řešení rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) na $I$ získat z obecného řešení ($\ref{eqn:general_sol}$) vhodnou volbou hodnot konstant $c_1$ a $c_2$ v části $y_h$.</p></blockquote><h3 id="důkaz-1">Důkaz</h3><p>Nechť $y^*$ je nějaké řešení rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$) na $I$ a nechť $x_0$ je nějaký bod z intervalu $I$. Podle <a href="/cs/posts/wronskian-existence-and-uniqueness-of-solutions/#existence-obecneho-reseni">věty o existenci obecného řešení homogenní ODR se spojitými proměnnými koeficienty</a> existuje $y_h = c_1y_1 + c_2y_2$; a protože (jak uvidíme později) existuje také $y_p$ díky <strong>metodě variace parametrů (method of variation of parameters)</strong>, existuje na intervalu $I$ i obecné řešení ($\ref{eqn:general_sol}$) rovnice ($\ref{eqn:nonhomogeneous_linear_ode}$). Nyní podle právě dokázané věty <a href="#vztah-mezi-resenimi-nehomogenni-odr-a-resenimi-odpovidajici-homogenni-odr">1(b)</a> je $Y = y^* - y_p$ řešením homogenní ODR ($\ref{eqn:homogeneous_linear_ode}$) na $I$ a v bodě $x_0$ platí</p>\[\begin{gather*} Y(x_0) = y^*(x_0) - y_p(x_0) \\ Y^{\prime}(x_0) = {y^*}^{\prime}(x_0) - y_p^{\prime}(x_0) \end{gather*}\]<p>Podle <a href="/cs/posts/wronskian-existence-and-uniqueness-of-solutions/#veta-o-existenci-a-jedinecnosti-reseni-pocatecni-uloha">věty o existenci a jednoznačnosti řešení počáteční úlohy</a> existuje na intervalu $I$ právě jedno řešení $Y$ homogenní ODR ($\ref{eqn:homogeneous_linear_ode}$), které lze získat z $y_h$ vhodnou volbou konstant $c_1$, $c_2$ tak, aby splňovalo výše uvedené počáteční podmínky. Protože $y^* = Y + y_p$, ukázali jsme, že libovolné partikulární řešení $y^*$ nehomogenní ODR ($\ref{eqn:nonhomogeneous_linear_ode}$) lze získat z obecného řešení ($\ref{eqn:general_sol}$). $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="cs">Wronskián (Wronskian), existence a jednoznačnost řešení</title><link href="https://www.yunseo.kim/cs/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="am" /><published>2025-04-06T00:00:00+09:00</published> <updated>2025-04-06T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/wronskian-existence-and-uniqueness-of-solutions/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="cs">Pro homogenní lineární ODR 2. řádu se spojitými proměnnými koeficienty odvodíme větu o existenci a jednoznačnosti, použijeme Wronskián k určení (ne)závislosti řešení a ukážeme, že neexistují singulární řešení.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Pro homogenní lineární ODR 2. řádu se spojitými proměnnými koeficienty odvodíme větu o existenci a jednoznačnosti, použijeme Wronskián k určení (ne)závislosti řešení a ukážeme, že neexistují singulární řešení.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><p>Pro homogenní lineární ODR 2. řádu s libovolnými spojitými proměnnými koeficienty $p$ a $q$ na intervalu $I$</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0\]<p>a s počátečními podmínkami</p>\[y(x_0)=K_0, \qquad y^{\prime}(x_0)=K_1\]<p>platí následující 4 tvrzení.</p><ol><li><strong>Věta o existenci a jednoznačnosti řešení počáteční úlohy</strong>: počáteční úloha daná rovnicí a počátečními podmínkami má na intervalu $I$ jediné řešení $y(x)$.<li><strong>Rozhodování lineární závislosti/nezávislosti pomocí Wronskiánu (Wronskian)</strong>: pro dvě řešení $y_1$ a $y_2$ platí: existuje-li v intervalu $I$ bod $x_0$ takový, že <strong>Wronskián (Wronskian)</strong> $W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime}$ nabývá hodnoty $0$, pak jsou řešení lineárně závislá. A pokud existuje $x_1\in I$ takové, že $W\neq 0$, pak jsou lineárně nezávislá.<li><strong>Existence obecného řešení</strong>: daná rovnice má na intervalu $I$ obecné řešení.<li><strong>Neexistence singulárního řešení</strong>: toto obecné řešení zahrnuje všechna řešení rovnice (tj. neexistuje singulární řešení).</ol></blockquote><h2 id="prerequisites">Prerequisites</h2><ul><li><a href="/cs/posts/Solution-of-First-Order-Linear-ODE/">Řešení lineárních ODR prvního řádu</a><li><a href="/cs/posts/homogeneous-linear-odes-of-second-order/">Lineární homogenní ODR druhého řádu (Homogeneous Linear ODEs of Second Order)</a><li><a href="/cs/posts/homogeneous-linear-odes-with-constant-coefficients/">Homogenní lineární ODR druhého řádu s konstantními koeficienty</a><li><a href="/cs/posts/euler-cauchy-equation/">Eulerova–Cauchyho rovnice</a><li>inverzní matice a singulární matice, determinant</ul><h2 id="homogenní-lineární-odr-se-spojitými-proměnnými-koeficienty">Homogenní lineární ODR se spojitými proměnnými koeficienty</h2><p>Dříve jsme si určili obecné řešení pro <a href="/cs/posts/homogeneous-linear-odes-with-constant-coefficients/">homogenní lineární ODR druhého řádu s konstantními koeficienty</a> a pro <a href="/cs/posts/euler-cauchy-equation/">Eulerovu–Cauchyho rovnici</a>. V tomto článku rozšíříme diskusi na obecnější případ: homogenní lineární ODR druhého řádu s libovolnými spojitými <strong>proměnnými koeficienty (variable coefficients)</strong> $p$ a $q$</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode_with_var_coefficients}\tag{1}\]<p>a budeme zkoumat existenci a tvar jejího obecného řešení. Dále se podíváme i na jednoznačnost <a href="/cs/posts/homogeneous-linear-odes-of-second-order/#pocatecni-uloha-a-pocatecni-podminky">počáteční úlohy</a> složené z ODR ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) a následujících dvou počátečních podmínek</p>\[y(x_0)=K_0, \qquad y^{\prime}(x_0)=K_1 \label{eqn:initial_conditions}\tag{2}\]<p>Ještě předem: klíčovým závěrem je, že <u>lineární</u> ODR se spojitými koeficienty nemá <em>singulární řešení (singular solution)</em> (tj. řešení, které nelze získat z obecného řešení).</p><h2 id="věta-o-existenci-a-jednoznačnosti-řešení-počáteční-úlohy">Věta o existenci a jednoznačnosti řešení počáteční úlohy</h2><blockquote class="prompt-info"><p><strong>Věta o existenci a jednoznačnosti řešení počáteční úlohy (Existence and Uniqueness Theorem for Initial Value Problems)</strong><br /> Jsou-li $p(x)$ a $q(x)$ spojité funkce na nějakém otevřeném intervalu $I$ a $x_0\in I$, pak počáteční úloha daná rovnicemi ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) a ($\ref{eqn:initial_conditions}$) má na intervalu $I$ jediné řešení $y(x)$.</p></blockquote><p>Důkaz existence zde řešit nebudeme a podíváme se pouze na důkaz jednoznačnosti. Obvykle je dokazování jednoznačnosti jednodušší než dokazování existence.<br /> Pokud vás důkaz nezajímá, můžete tuto část přeskočit a přejít na <a href="#linearni-zavislost-a-nezavislost-reseni">Lineární závislost a nezávislost řešení</a>.</p><h3 id="důkaz-jednoznačnosti">Důkaz jednoznačnosti</h3><p>Předpokládejme, že počáteční úloha složená z ODR ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) a počátečních podmínek ($\ref{eqn:initial_conditions}$) má na intervalu $I$ dvě řešení $y_1(x)$ a $y_2(x)$. Uvažujme jejich rozdíl</p>\[y(x) = y_1(x) - y_2(x)\]<p>Pokud ukážeme, že na intervalu $I$ je identicky roven nule, tj. že $y(x)\equiv 0$ na $I$, pak z toho plyne $y_1 \equiv y_2$ na $I$, což znamená jednoznačnost.</p><p>Protože rovnice ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) je homogenní lineární ODR, je její řešení i libovolná lineární kombinace řešení; tedy $y$ je na $I$ rovněž řešením. Jelikož $y_1$ a $y_2$ splňují stejné počáteční podmínky ($\ref{eqn:initial_conditions}$), platí pro $y$ podmínky</p>\[\begin{align*} &amp; y(x_0) = y_1(x_0) - y_2(x_0) = 0, \\ &amp; y^{\prime}(x_0) = y_1^{\prime}(x_0) - y_2^{\prime}(x_0) = 0 \end{align*} \label{eqn:initial_conditions_*}\tag{3}\]<p>Nyní uvažujme funkci</p>\[z(x) = y(x)^2 + y^{\prime}(x)^2\]<p>a její derivaci</p>\[z^{\prime} = 2yy^{\prime} + 2y^{\prime}y^{\prime\prime}\]<p>Z ODR dostaneme</p>\[y^{\prime\prime} = -py^{\prime} - qy\]<p>a po dosazení do výrazu pro $z^{\prime}$ získáme</p>\[z^{\prime} = 2yy^{\prime} - 2p{y^{\prime}}^2 - 2qyy^{\prime} \label{eqn:z_prime}\tag{4}\]<p>Protože $y$ a $y^{\prime}$ jsou reálné, platí</p>\[(y\pm y^{\prime})^2 = y^2 \pm 2yy^{\prime} + {y^{\prime}}^2 \geq 0\]<p>Z toho a z definice $z$ plyne dvojice nerovností</p>\[(a)\ 2yy^{\prime} \leq y^2 + {y^{\prime}}^2 = z, \qquad (b)\ 2yy^{\prime} \geq -(y^2 + {y^{\prime}}^2) = -z \label{eqn:inequalities}\tag{5}\]<p>Odtud vidíme, že $|2yy^{\prime}|\leq z$, a tedy pro poslední člen v ($\ref{eqn:z_prime}$) platí</p>\[\pm2qyy^{\prime} \leq |\pm 2qyy^{\prime}| = |q||2yy^{\prime}| \leq |q|z.\]<p>Spolu s $-p \leq |p|$ a použitím ($\ref{eqn:inequalities}$a) na člen $2yy^{\prime}$ v ($\ref{eqn:z_prime}$) dostáváme</p>\[z^{\prime} \leq z + 2|p|{y^{\prime}}^2 + |q|z\]<p>Protože ${y^{\prime}}^2 \leq y^2 + {y^{\prime}}^2 = z$, plyne</p>\[z^{\prime} \leq (1 + 2|p| + |q|)z\]<p>Označme funkci v závorce jako $h = 1 + 2|p| + |q|$. Potom</p>\[z^{\prime} \leq hz \quad \forall x \in I \label{eqn:inequality_6a}\tag{6a}\]<p>Stejným postupem z ($\ref{eqn:z_prime}$) a ($\ref{eqn:inequalities}$) získáme</p>\[\begin{align*} -z^{\prime} &amp;= -2yy^{\prime} + 2p{y^{\prime}}^2 + 2qyy^{\prime} \\ &amp;\leq z + 2|p|z + |q|z = hz \end{align*} \label{eqn:inequality_6b}\tag{6b}\]<p>Nerovnosti ($\ref{eqn:inequality_6a}$) a ($\ref{eqn:inequality_6b}$) jsou ekvivalentní s</p>\[z^{\prime} - hz \leq 0, \qquad z^{\prime} + hz \geq 0 \label{eqn:inequalities_7}\tag{7}\]<p>a <a href="/cs/posts/Solution-of-First-Order-Linear-ODE/#nehomogenni-linearni-odr">integrační faktor</a> pro levou stranu těchto nerovností je</p>\[F_1 = e^{-\int h(x)\ dx} \qquad \text{a} \qquad F_2 = e^{\int h(x)\ dx}\]<p>Protože $h$ je spojitá, neurčitý integrál $\int h(x)\ dx$ existuje; navíc $F_1$ a $F_2$ jsou kladné, takže z ($\ref{eqn:inequalities_7}$) plyne</p>\[F_1(z^{\prime} - hz) = (F_1 z)^{\prime} \leq 0, \qquad F_2(z^{\prime} + hz) = (F_2 z)^{\prime} \geq 0\]<p>To znamená: na intervalu $I$ funkce $F_1 z$ neroste a $F_2 z neklesá. Jelikož z ($\ref{eqn:initial_conditions_*}$) máme $z(x_0)=0$, dostáváme</p>\[\begin{cases} \left(F_1 z \geq (F_1 z)_{x_0} = 0\right)\ \&amp; \ \left(F_2 z \leq (F_2 z)_{x_0} = 0\right) &amp; (x \leq x_0) \\ \left(F_1 z \leq (F_1 z)_{x_0} = 0\right)\ \&amp; \ \left(F_2 z \geq (F_2 z)_{x_0} = 0\right) &amp; (x \geq x_0) \end{cases}\]<p>Nakonec po vydělení obou stran kladnými $F_1$ a $F_2$ dostaneme</p>\[(z \leq 0) \ \&amp; \ (z \geq 0) \quad \forall x \in I\]<p>tedy</p>\[z = y^2 + {y^{\prime}}^2 = 0 \quad \forall x \in I\]<p>a proto</p>\[\therefore y \equiv y_1 - y_2 \equiv 0 \quad \forall x \in I. \ \blacksquare\]<h2 id="lineární-závislost-a-nezávislost-řešení">Lineární závislost a nezávislost řešení</h2><p>Připomeňme si stručně obsah z článku <a href="/cs/posts/homogeneous-linear-odes-of-second-order/#baze-a-obecne-reseni">Lineární homogenní ODR druhého řádu</a>. Obecné řešení na otevřeném intervalu $I$ je vytvořeno z <strong>báze (basis)</strong> $y_1$, $y_2$, tj. z dvojice lineárně nezávislých řešení. Říci, že $y_1$ a $y_2$ jsou na intervalu $I$ <strong>lineárně nezávislé (linearly independent)</strong>, znamená: pro všechna $x$ v daném intervalu platí</p>\[k_1y_1(x) + k_2y_2(x) = 0 \Leftrightarrow k_1=0\text{ a }k_2=0 \label{eqn:linearly_independent}\tag{8}\]<p>Pokud tomu tak není a existují konstanty $k_1$, $k_2$ (alespoň jedna z nich nenulová), pro něž platí $k_1y_1(x) + k_2y_2(x) = 0$, pak jsou $y_1$ a $y_2$ na intervalu $I$ <strong>lineárně závislé (linearly dependent)</strong>. V takovém případě pro všechna $x\in I$ platí</p>\[\text{(a) } y_1 = ky_2 \quad \text{nebo} \quad \text{(b) } y_2 = ly_1 \label{eqn:linearly_dependent}\tag{9}\]<p>tedy $y_1$ a $y_2$ jsou navzájem proporcionální.</p><p>Nyní si ukážeme kritérium pro rozhodnutí lineární (ne)závislosti.</p><blockquote class="prompt-info"><p><strong>Rozhodování lineární závislosti/nezávislosti pomocí Wronskiánu (Wronskian)</strong><br /> <strong>i.</strong> Má-li ODR ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) na otevřeném intervalu $I$ spojité koeficienty $p(x)$ a $q(x)$, pak nutnou a postačující podmínkou pro to, aby dvě řešení $y_1$ a $y_2$ byly na $I$ lineárně závislé, je, aby jejich <em>Wronskiho determinant (Wronski determinant)</em>, zkráceně <strong>Wronskián (Wronskian)</strong>,</p>\[W(y_1, y_2) = \begin{vmatrix} y_1 &amp; y_2 \\ y_1^{\prime} &amp; y_2^{\prime} \\ \end{vmatrix} = y_1y_2^{\prime} - y_2y_1^{\prime} \label{eqn:wronskian}\tag{10}\]<p>byl v nějakém bodě $x_0\in I$ roven nule.</p>\[\exists x_0 \in I: W(x_0)=0 \iff y_1 \text{ a } y_2 \text{ jsou lineárně závislá}\]<p><strong>ii.</strong> Pokud v nějakém bodě $x=x_0$ z intervalu $I$ platí $W=0$, pak platí $W=0$ pro všechna $x\in I$.</p>\[\exists x_0 \in I: W(x_0)=0 \implies \forall x \in I: W(x)=0\]<p>Jinými slovy: existuje-li v $I$ bod $x_1$ takový, že $W\neq 0$, pak jsou $y_1$, $y_2$ na $I$ lineárně nezávislá.</p>\[\begin{align*} \exists x_1 \in I: W(x_1)\neq 0 &amp;\implies \forall x \in I: W(x)\neq 0 \\ &amp;\implies y_1 \text{ a } y_2 \text{ jsou lineárně nezávislá} \end{align*}\]</blockquote><blockquote class="prompt-tip"><p>Wronskián byl poprvé zaveden polským matematikem Józefem Mariou Hoene-Wrońským (Józef Maria Hoene-Wroński) a po jeho smrti mu v roce 11882 HE dal dnešní název skotský matematik Sir Thomas Muir (Sir Thomas Muir).</p></blockquote><h3 id="důkaz">Důkaz</h3><h4 id="i-a">i. (a)</h4><p>Nechť jsou $y_1$ a $y_2$ na intervalu $I$ lineárně závislá. Pak na $I$ platí buď ($\ref{eqn:linearly_dependent}$a), nebo ($\ref{eqn:linearly_dependent}$b). Platí-li ($\ref{eqn:linearly_dependent}$a), potom</p>\[W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime} = ky_2ky_2^{\prime} - y_2ky_2^{\prime} = 0\]<p>a stejně tak, platí-li ($\ref{eqn:linearly_dependent}$b),</p>\[W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime} = y_1ly_1^{\prime} - ly_1y_1^{\prime} = 0\]<p>Tedy ověříme, že <u>pro všechna $x$ na intervalu $I$</u> platí $W(y_1,y_2)=0$.</p><h4 id="i-b">i. (b)</h4><p>Naopak předpokládejme, že pro nějaké $x=x_0$ platí $W(y_1,y_2)=0$. Ukážeme, že pak jsou $y_1$ a $y_2$ na intervalu $I$ lineárně závislá. Uvažujme soustavu lineárních rovnic pro neznámé $k_1$, $k_2$:</p>\[\begin{gather*} k_1y_1(x_0) + k_2y_2(x_0) = 0 \\ k_1y_1^{\prime}(x_0) + k_2y_2^{\prime}(x_0) = 0 \end{gather*} \label{eqn:linear_system}\tag{11}\]<p>Tu lze zapsat jako vektorovou rovnici</p>\[\left[\begin{matrix} y_1(x_0) &amp; y_2(x_0) \\ y_1^{\prime}(x_0) &amp; y_2^{\prime}(x_0) \end{matrix}\right] \left[\begin{matrix} k_1 \\ k_2 \end{matrix}\right] = 0 \label{eqn:vector_equation}\tag{12}\]<p>Koeficientní matice je</p>\[A = \left[\begin{matrix} y_1(x_0) &amp; y_2(x_0) \\ y_1^{\prime}(x_0) &amp; y_2^{\prime}(x_0) \end{matrix}\right]\]<p>a její determinant je právě $W(y_1(x_0), y_2(x_0))$. Protože $\det(A)=W=0$, matice $A$ nemá <strong>inverzní matici (inverse matrix)</strong>, je to tedy <strong>singulární matice (singular matrix)</strong>, a soustava ($\ref{eqn:linear_system}$) má netriviální řešení $(c_1,c_2)\neq(0,0)$, tj. alespoň jedna z konstant $c_1$, $c_2$ je nenulová.</p><p>Zaveďme funkci</p>\[y(x) = c_1y_1(x) + c_2y_2(x)\]<p>Protože rovnice ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) je homogenní lineární, plyne z <a href="/cs/posts/homogeneous-linear-odes-of-second-order/#princip-superpozice">principu superpozice</a>, že tato funkce je na $I$ řešením ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$). Ze soustavy ($\ref{eqn:linear_system}$) vidíme, že toto řešení splňuje počáteční podmínky $y(x_0)=0$, $y^{\prime}(x_0)=0$.</p><p>Zároveň existuje triviální řešení $y^*\equiv 0$, které splňuje stejné počáteční podmínky $y^*(x_0)=0$, ${y^*}^{\prime}(x_0)=0$. Protože koeficienty $p$ a $q$ jsou spojité, z <a href="#veta-o-existenci-a-jednoznacnosti-reseni-pocatecni-ulohy">věty o existenci a jednoznačnosti řešení počáteční úlohy</a> plyne jednoznačnost, a tedy $y\equiv y^*$. Jinými slovy, na $I$ platí</p>\[c_1y_1 + c_2y_2 \equiv 0\]<p>A jelikož alespoň jedna z konstant $c_1$, $c_2$ je nenulová, neplatí ($\ref{eqn:linearly_independent}$), což znamená, že $y_1$, $y_2$ jsou na intervalu $I$ lineárně závislá.</p><h4 id="ii">ii.</h4><p>Pokud v nějakém bodě $x_0\in I$ platí $W(x_0)=0$, pak podle <a href="#i-b">i.(b)</a> jsou $y_1$, $y_2$ na $I$ lineárně závislá, a tedy podle <a href="#i-a">i.(a)</a> platí $W\equiv 0$. Proto existuje-li alespoň jeden bod $x_1\in I$ takový, že $W(x_1)\neq 0$, musí být $y_1$ a $y_2$ lineárně nezávislá. $\blacksquare$</p><h2 id="obecné-řešení-zahrnuje-všechna-řešení">Obecné řešení zahrnuje všechna řešení</h2><h3 id="existence-obecného-řešení">Existence obecného řešení</h3><blockquote class="prompt-info"><p>Jsou-li $p(x)$ a $q(x)$ na otevřeném intervalu $I$ spojité, pak má rovnice ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) na intervalu $I$ obecné řešení.</p></blockquote><h4 id="důkaz-1">Důkaz</h4><p>Z <a href="#veta-o-existenci-a-jednoznacnosti-reseni-pocatecni-ulohy">věty o existenci a jednoznačnosti řešení počáteční úlohy</a> plyne, že ODR ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) má na $I$ řešení $y_1(x)$ splňující počáteční podmínky</p>\[y_1(x_0) = 1, \qquad y_1^{\prime}(x_0) = 0\]<p>a také řešení $y_2(x)$ splňující na $I$ počáteční podmínky</p>\[y_2(x_0) = 0, \qquad y_2^{\prime}(x_0) = 1\]<p>Wronskián těchto dvou řešení v bodě $x=x_0$ nabývá nenulové hodnoty</p>\[W(y_1(x_0), y_2(x_0)) = y_1(x_0)y_2^{\prime}(x_0) - y_2(x_0)y_1^{\prime}(x_0) = 1\cdot 1 - 0\cdot 0 = 1\]<p>a proto jsou podle kritéria z části <a href="#linearni-zavislost-a-nezavislost-reseni">Lineární závislost a nezávislost řešení</a> funkce $y_1$ a $y_2$ na $I$ lineárně nezávislé. Tedy tvoří bázi řešení na $I$ a obecné řešení tvaru $y=c_1y_1+c_2y_2$ (pro libovolné konstanty $c_1$, $c_2$) na $I$ nutně existuje. $\blacksquare$</p><h3 id="neexistence-singulárního-řešení">Neexistence singulárního řešení</h3><blockquote class="prompt-info"><p>Má-li ODR ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) na nějakém otevřeném intervalu $I$ spojité koeficienty $p(x)$ a $q(x)$, pak lze každé její řešení $y=Y(x)$ na $I$ zapsat ve tvaru</p>\[Y(x) = C_1y_1(x) + C_2y_2(x) \label{eqn:particular_solution}\tag{13}\]<p>kde $y_1$, $y_2$ tvoří bázi řešení rovnice ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) na $I$ a $C_1$, $C_2$ jsou vhodné konstanty.<br /> Jinými slovy: rovnice ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) nemá <strong>singulární řešení (singular solution)</strong>, tj. řešení, které by nešlo získat z obecného řešení.</p></blockquote><h4 id="důkaz-2">Důkaz</h4><p>Nechť $y=Y(x)$ je nějaké řešení rovnice ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) na intervalu $I$. Z <a href="#existence-obecneho-reseni">věty o existenci obecného řešení</a> víme, že tato ODR má na $I$ obecné řešení</p>\[y(x) = c_1y_1(x) + c_2y_2(x) \label{eqn:general_solution}\tag{14}\]<p>Nyní musíme ukázat, že pro libovolné $Y(x)$ existují konstanty $c_1$, $c_2$ tak, aby na $I$ platilo $y(x)=Y(x)$. Nejprve ukážeme, že pro libovolně zvolené $x_0\in I$ lze najít $c_1$, $c_2$ tak, aby platilo $y(x_0)=Y(x_0)$ a $y^{\prime}(x_0)=Y^{\prime}(x_0)$. Z ($\ref{eqn:general_solution}$) plyne</p>\[\begin{gather*} \left[\begin{matrix} y_1(x_0) &amp; y_2(x_0) \\ y_1^{\prime}(x_0) &amp; y_2^{\prime}(x_0) \end{matrix}\right] \left[\begin{matrix} c_1 \\ c_2 \end{matrix}\right] = \left[\begin{matrix} Y(x_0) \\ Y^{\prime}(x_0) \end{matrix}\right] \end{gather*} \label{eqn:vector_equation_2}\tag{15}\]<p>Protože $y_1$, $y_2$ tvoří bázi, je determinant koeficientní matice $W(y_1(x_0),y_2(x_0))\neq 0$, takže soustavu ($\ref{eqn:vector_equation_2}$) lze vyřešit pro $c_1$, $c_2$. Označme její řešení jako $(c_1,c_2)=(C_1,C_2)$. Dosazením do ($\ref{eqn:general_solution}$) dostaneme partikulární řešení</p>\[y^*(x) = C_1y_1(x) + C_2y_2(x).\]<p>Protože $C_1$, $C_2$ jsou řešením ($\ref{eqn:vector_equation_2}$), platí</p>\[y^*(x_0) = Y(x_0), \qquad {y^*}^{\prime}(x_0) = Y^{\prime}(x_0)\]<p>Z jednoznačnosti v <a href="#veta-o-existenci-a-jednoznacnosti-reseni-pocatecni-ulohy">větě o existenci a jednoznačnosti řešení počáteční úlohy</a> plyne, že pro všechna $x\in I$ je $y^*\equiv Y$. $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="cs">Eulerova–Cauchyho rovnice</title><link href="https://www.yunseo.kim/cs/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="am" /><published>2025-03-28T00:00:00+09:00</published> <updated>2025-03-28T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/euler-cauchy-equation/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="cs">Podle znaménka diskriminantu pomocné rovnice ukážeme, jaký tvar má obecné řešení Eulerovy–Cauchyho rovnice v jednotlivých případech.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Podle znaménka diskriminantu pomocné rovnice ukážeme, jaký tvar má obecné řešení Eulerovy–Cauchyho rovnice v jednotlivých případech.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li>Eulerova–Cauchyho rovnice: $x^2y^{\prime\prime} + axy^{\prime} + by = 0$<li><strong>Pomocná rovnice (auxiliary equation)</strong>: $m^2 + (a-1)m + b = 0$<li>Podle znaménka diskriminantu pomocné rovnice $(1-a)^2 - 4b$ lze tvar obecného řešení rozdělit do tří případů (viz tabulka)</ul><table><thead><tr><th style="text-align: center">Případ<th style="text-align: center">Řešení pomocné rovnice<th style="text-align: center">Báze řešení Eulerovy–Cauchyho rovnice<th style="text-align: center">Obecné řešení Eulerovy–Cauchyho rovnice<tbody><tr><td style="text-align: center">I<td style="text-align: center">dva různé reálné kořeny<br />$m_1$, $m_2$<td style="text-align: center">$x^{m_1}$, $x^{m_2}$<td style="text-align: center">$y = c_1 x^{m_1} + c_2 x^{m_2}$<tr><td style="text-align: center">II<td style="text-align: center">dvojnásobný reálný kořen<br /> $m = \cfrac{1-a}{2}$<td style="text-align: center">$x^{(1-a)/2}$, $x^{(1-a)/2}\ln{x}$<td style="text-align: center">$y = (c_1 + c_2 \ln x)x^m$<tr><td style="text-align: center">III<td style="text-align: center">komplexně sdružené kořeny<br /> $m_1 = \cfrac{1}{2}(1-a) + i\omega$, <br /> $m_2 = \cfrac{1}{2}(1-a) - i\omega$<td style="text-align: center">$x^{(1-a)/2}\cos{(\omega \ln{x})}$, <br /> $x^{(1-a)/2}\sin{(\omega \ln{x})}$<td style="text-align: center">$y = x^{(1-a)/2}[A\cos{(\omega \ln{x})} + B\sin{(\omega \ln{x})}]$</table></blockquote><h2 id="prerequisites">Prerequisites</h2><ul><li><a href="/cs/posts/homogeneous-linear-odes-of-second-order/">Lineární homogenní ODR druhého řádu (Homogeneous Linear ODEs of Second Order)</a><li><a href="/cs/posts/homogeneous-linear-odes-with-constant-coefficients/">Lineární homogenní ODR druhého řádu s konstantními koeficienty</a><li>Eulerův vzorec</ul><h2 id="pomocná-rovnice-auxiliary-equation">Pomocná rovnice (auxiliary equation)</h2><p><strong>Eulerova–Cauchyho rovnice (Euler-Cauchy equation)</strong> je obyčejná diferenciální rovnice tvaru</p>\[x^2y^{\prime\prime} + axy^{\prime} + by = 0 \label{eqn:euler_cauchy_eqn}\tag{1}\]<p>kde $a$ a $b$ jsou dané konstanty a $y(x)$ je hledaná funkce.</p><p>Dosadíme-li do rovnice ($\ref{eqn:euler_cauchy_eqn}$)</p>\[y=x^m, \qquad y^{\prime}=mx^{m-1}, \qquad y^{\prime\prime}=m(m-1)x^{m-2}\]<p>dostaneme</p>\[x^2m(m-1)x^{m-2} + axmx^{m-1} + bx^m = 0,\]<p>tj.</p>\[[m(m-1) + am + b]x^m = 0.\]<p>Odtud získáme pomocnou rovnici</p>\[m^2 + (a-1)m + b = 0 \label{eqn:auxiliary_eqn}\tag{2}\]<p>a nutná a postačující podmínka, aby $y=x^m$ bylo řešením Eulerovy–Cauchyho rovnice ($\ref{eqn:euler_cauchy_eqn}$), je, aby $m$ bylo řešením pomocné rovnice ($\ref{eqn:auxiliary_eqn}$).</p><p>Vyřešíme-li kvadratickou rovnici ($\ref{eqn:auxiliary_eqn}$), dostaneme</p>\[\begin{align*} m_1 &amp;= \frac{1}{2}\left[(1-a) + \sqrt{(1-a)^2 - 4b} \right], \\ m_2 &amp;= \frac{1}{2}\left[(1-a) - \sqrt{(1-a)^2 - 4b} \right] \end{align*}\label{eqn:m1_and_m2}\tag{3}\]<p>a z toho plyne, že dvě funkce</p>\[y_1 = x^{m_1}, \quad y_2 = x^{m_2}\]<p>jsou řešeními rovnice ($\ref{eqn:euler_cauchy_eqn}$).</p><p>Stejně jako v článku <a href="/cs/posts/homogeneous-linear-odes-with-constant-coefficients/">Lineární homogenní ODR druhého řádu s konstantními koeficienty</a> můžeme podle znaménka diskriminantu $(1-a)^2 - 4b$ pomocné rovnice ($\ref{eqn:auxiliary_eqn}$) rozlišit tři případy:</p><ul><li>$(1-a)^2 - 4b &gt; 0$: dva různé reálné kořeny<li>$(1-a)^2 - 4b = 0$: dvojnásobný reálný kořen<li>$(1-a)^2 - 4b &lt; 0$: komplexně sdružené kořeny</ul><h2 id="tvar-obecného-řešení-podle-znaménka-diskriminantu-pomocné-rovnice">Tvar obecného řešení podle znaménka diskriminantu pomocné rovnice</h2><h3 id="i-dva-různé-reálné-kořeny-m_1-a-m_2">I. Dva různé reálné kořeny $m_1$ a $m_2$</h3><p>V tomto případě je na libovolném intervalu bází řešení rovnice ($\ref{eqn:euler_cauchy_eqn}$)</p>\[y_1 = x^{m_1}, \quad y_2 = x^{m_2}\]<p>a odpovídající obecné řešení je</p>\[y = c_1 x^{m_1} + c_2 x^{m_2} \label{eqn:general_sol_1}\tag{4}\]<p>.</p><h3 id="ii-dvojnásobný-reálný-kořen-m--cfrac1-a2">II. Dvojnásobný reálný kořen $m = \cfrac{1-a}{2}$</h3><p>Je-li $(1-a)^2 - 4b = 0$, tj. $b=\cfrac{(1-a)^2}{4}$, má kvadratická rovnice ($\ref{eqn:auxiliary_eqn}$) jediné řešení $m = m_1 = m_2 = \cfrac{1-a}{2}$. Jedno řešení tvaru $y=x^m$ je tedy</p>\[y_1 = x^{(1-a)/2}\]<p>a Eulerova–Cauchyho rovnice ($\ref{eqn:euler_cauchy_eqn}$) nabývá tvaru</p>\[y^{\prime\prime} + \frac{a}{x}y^{\prime} + \frac{(1-a)^2}{4x^2}y = 0 \label{eqn:standard_form}\tag{5}\]<p>Nyní najděme další lineárně nezávislé řešení $y_2$ pomocí metody <a href="/cs/posts/homogeneous-linear-odes-of-second-order/#snížení-řádu-reduction-of-order">snížení řádu</a>.</p><p>Položíme-li druhé řešení ve tvaru $y_2=uy_1$, dostaneme</p>\[u = \int U, \qquad U = \frac{1}{y_1^2}\exp\left(-\int \frac{a}{x}\ dx \right).\]<p>Protože $\exp \left(-\int \cfrac{a}{x}\ dx \right) = \exp (-a\ln x) = \exp(\ln{x^{-a}}) = x^{-a}$, máme</p>\[U = \frac{x^{-a}}{y_1^2} = \frac{x^{-a}}{x^{(1-a)}} = \frac{1}{x},\]<p>a po integraci dostaneme $u = \ln x$.</p><p>Tedy $y_2 = uy_1 = y_1 \ln x$ a protože jejich podíl není konstanta, jsou $y_1$ a $y_2$ lineárně nezávislé. Obecné řešení odpovídající bázi $y_1$, $y_2$ je</p>\[y = (c_1 + c_2 \ln x)x^m \label{eqn:general_sol_2}\tag{6}\]<p>.</p><h3 id="iii-komplexně-sdružené-kořeny">III. Komplexně sdružené kořeny</h3><p>V tomto případě jsou kořeny pomocné rovnice ($\ref{eqn:auxiliary_eqn}$) rovny $m = \cfrac{1}{2}(1-a) \pm i\sqrt{b - \frac{1}{4}(1-a)^2}$. Odpovídající dvě komplexní řešení rovnice ($\ref{eqn:euler_cauchy_eqn}$) lze s využitím $x=e^{\ln x}$ zapsat takto:</p>\[\begin{align*} x^{m_1} &amp;= x^{(1-a)/2 + i\sqrt{b - \frac{1}{4}(1-a)^2}} \\ &amp;= x^{(1-a)/2}(e^{\ln x})^{i\sqrt{b - \frac{1}{4}(1-a)^2}} \\ &amp;= x^{(1-a)/2}e^{i(\sqrt{b - \frac{1}{4}(1-a)^2}\ln x)}, \\ x^{m_2} &amp;= x^{(1-a)/2 - i\sqrt{b - \frac{1}{4}(1-a)^2}} \\ &amp;= x^{(1-a)/2}(e^{\ln x})^{-i\sqrt{b - \frac{1}{4}(1-a)^2}} \\ &amp;= x^{(1-a)/2}e^{i(-\sqrt{b - \frac{1}{4}(1-a)^2}\ln x)}. \end{align*} \tag{7}\]<p>Položíme-li $t=\sqrt{b - \frac{1}{4}(1-a)^2}\ln x$ a použijeme Eulerův vzorec $e^{it} = \cos{t} + i\sin{t}$, dostaneme</p>\[\begin{align*} x^{m_1} &amp;= x^{(1-a)/2}\left[\cos\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) + i\sin\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) \right], \\ x^{m_2} &amp;= x^{(1-a)/2}\left[\cos\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) - i\sin\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) \right] \end{align*} \tag{8}\]<p>a odtud dvě reálná řešení</p>\[\begin{align*} \frac{x^{m_1} + x^{m_2}}{2} &amp;= x^{(1-a)/2}\cos\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right), \\ \frac{x^{m_1} - x^{m_2}}{2i} &amp;= x^{(1-a)/2}\sin\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) \end{align*} \tag{9}\]<p>.</p><p>Protože jejich podíl $\cos\left(\sqrt{b - \frac{1}{4}(1-a)^2}\ln x \right)$ není konstanta, jsou tato dvě řešení lineárně nezávislá, a tedy podle <a href="/cs/posts/homogeneous-linear-odes-of-second-order/#princip-superpozice">principu superpozice</a> tvoří bázi řešení Eulerovy–Cauchyho rovnice ($\ref{eqn:euler_cauchy_eqn}$). Z toho získáme následující reálné obecné řešení:</p>\[y = x^{(1-a)/2} \left[ A\cos\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) + B\sin\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) \right]. \label{eqn:general_sol_3}\tag{10}\]<p>Je však třeba poznamenat, že případ komplexně sdružených kořenů pomocné rovnice nemá u Eulerovy–Cauchyho rovnice zpravidla příliš velký praktický význam.</p><h2 id="převedení-na-lineární-homogenní-odr-2-řádu-s-konstantními-koeficienty">Převedení na lineární homogenní ODR 2. řádu s konstantními koeficienty</h2><p>Eulerovu–Cauchyho rovnici lze vhodnou substitucí převést na <a href="/cs/posts/homogeneous-linear-odes-with-constant-coefficients/">lineární homogenní ODR druhého řádu s konstantními koeficienty</a>.</p><p>Provedeme-li substituci $x = e^t$, pak platí</p>\[\frac{d}{dx} = \frac{1}{x}\frac{d}{dt}, \quad \frac{d^2}{dx^2} = \frac{1}{x^2}\left(\frac{d^2}{dt^2} - \frac{d}{dt} \right)\]<p>a Eulerova–Cauchyho rovnice ($\ref{eqn:euler_cauchy_eqn}$) se změní na homogenní lineární ODR s konstantními koeficienty (v proměnné $t$):</p>\[y^{\prime\prime}(t) + (a-1)y^{\prime}(t) + by(t) = 0. \label{eqn:substituted}\tag{11}\]<p>Vyřešíme-li rovnici ($\ref{eqn:substituted}$) pro $t$ metodou z článku <a href="/cs/posts/homogeneous-linear-odes-with-constant-coefficients/">lineární homogenní ODR druhého řádu s konstantními koeficienty</a> a pak převedeme řešení zpět na proměnnou $x$ s využitím $t = \ln{x}$, dostaneme <a href="#tvar-obecného-řešení-podle-znaménka-diskriminantu-pomocné-rovnice">stejný výsledek jako výše</a>.</p>]]> </content> </entry> <entry><title xml:lang="cs">Testování konvergence/divergence řady (Testing for Convergence or Divergence of a Series)</title><link href="https://www.yunseo.kim/cs/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="am" /><published>2025-03-18T00:00:00+09:00</published> <updated>2025-03-18T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/testing-for-convergence-or-divergence-of-a-series/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Calculus" /> <summary xml:lang="cs">Přehled metod pro testování konvergence a divergence nekonečných řad, včetně srovnávacích, integrálních, podílových a odmocninových testů.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Přehled metod pro testování konvergence a divergence nekonečných řad, včetně srovnávacích, integrálních, podílových a odmocninových testů.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li><strong>Test n-tého členu (test divergence; $n$th-term test for divergence)</strong>: $\lim_{n\to\infty} a_n \neq 0 \Rightarrow \text{řada }\sum a_n \text{ diverguje}$<li><strong>Konvergence/divergence geometrické řady</strong>: geometrická řada $\sum ar^{n-1}$:<ul><li>konverguje, pokud $|r| &lt; 1$<li>diverguje, pokud $|r| \geq 1$</ul><li><strong>Konvergence/divergence $p$-řady</strong>: $p$-řada $\sum \cfrac{1}{n^p}$:<ul><li>konverguje, pokud $p&gt;1$<li>diverguje, pokud $p\leq 1$</ul><li><strong>Srovnávací test (Comparison Test)</strong>: když $0 \leq a_n \leq b_n$, pak<ul><li>$\sum b_n &lt; \infty \ \Rightarrow \ \sum a_n &lt; \infty$<li>$\sum a_n = \infty \ \Rightarrow \ \sum b_n = \infty$</ul><li><strong>Limitní srovnávací test (Limit Comparison Test)</strong>: pokud $\lim_{n\to\infty} \frac{a_n}{b_n} = c \text{ (}c\text{ je konečné kladné číslo)}$, pak obě řady $\sum a_n$ a $\sum b_n$ buď obě konvergují, nebo obě divergují<li>Pro řadu s kladnými členy $\sum a_n$ a kladné $\epsilon &lt; 1$ platí:<ul><li>jestliže pro všechna $n$ platí $\sqrt[n]{a_n}&lt; 1-\epsilon$, pak řada $\sum a_n$ konverguje<li>jestliže pro všechna $n$ platí $\sqrt[n]{a_n}&gt; 1+\epsilon$, pak řada $\sum a_n$ diverguje</ul><li><strong>Odmocninový test (Root Test)</strong>: je-li u řady s kladnými členy $\sum a_n$ definována limita $\lim_{n\to\infty} \sqrt[n]{a_n} =: r$, pak:<ul><li>pokud $r&lt;1$, řada $\sum a_n$ konverguje<li>pokud $r&gt;1$, řada $\sum a_n$ diverguje</ul><li><strong>Podílový test (Ratio Test)</strong>: pro kladnou posloupnost $(a_n)$ a $0 &lt; r &lt; 1$:<ul><li>jestliže pro všechna $n$ platí $a_{n+1}/a_n \leq r$, pak řada $\sum a_n$ konverguje<li>jestliže pro všechna $n$ platí $a_{n+1}/a_n \geq 1$, pak řada $\sum a_n$ diverguje</ul><li>Existuje-li u kladné posloupnosti $(a_n)$ limita $\rho := \lim_{n\to\infty} \cfrac{a_{n+1}}{a_n}$, pak:<ul><li>pokud $\rho &lt; 1$, řada $\sum a_n$ konverguje<li>pokud $\rho &gt; 1$, řada $\sum a_n$ diverguje</ul><li><strong>Integrální test (Integral Test)</strong>: je-li spojitá funkce $f: \left[1,\infty \right) \rightarrow \mathbb{R}$ klesající a pro všechna $x$ platí $f(x)&gt;0$, pak řada $\sum f(n)$ konverguje právě tehdy, když konverguje integrál $\int_1^\infty f(x)\ dx := \lim_{b\to\infty} \int_1^b f(x)\ dx$<li><strong>Test střídavé řady (Alternating Series Test)</strong>: střídavá řada $\sum a_n$ konverguje, pokud platí:<ol><li>pro všechna $n$ mají $a_n$ a $a_{n+1}$ opačné znaménko<li>pro všechna $n$ platí $|a_n| \geq |a_{n+1}|$<li>$\lim_{n\to\infty} a_n = 0$</ol><li>Absolutně konvergentní řada je konvergentní. Obráceně to neplatí.</ul></blockquote><h2 id="prerequisites">Prerequisites</h2><ul><li><a href="/cs/posts/sequences-and-series/">Posloupnosti a řady</a></ul><h2 id="úvod">Úvod</h2><p>V článku <a href="/cs/posts/sequences-and-series/#konvergence-a-divergence-rady">Posloupnosti a řady</a> jsme si definovali konvergenci a divergenci řad. V tomto textu shrnu různé metody, které lze použít při testování konvergence/divergence řady. Obecně je testování konvergence/divergence řady mnohem snazší než přesné určení jejího součtu.</p><h2 id="test-n-tého-členu">Test n-tého členu</h2><p>Pro řadu $\sum a_n$ nazýváme $a_n$ jejím <strong>obecným členem</strong>.</p><p>Následující věta umožňuje snadno zjistit, že některé řady zjevně divergují; proto je rozumné při testování konvergence/divergence řady nejprve ověřit právě tuto podmínku, aby se předešlo zbytečné ztrátě času.</p><blockquote class="prompt-info"><p><strong>Test n-tého členu (test divergence; $n$th-term test for divergence)</strong><br /> Jestliže řada $\sum a_n$ konverguje, pak</p>\[\lim_{n\to\infty} a_n=0\]<p>Tedy:</p>\[\lim_{n\to\infty} a_n \neq 0 \Rightarrow \text{řada }\sum a_n \text{ diverguje}\]<p>.</p></blockquote><h3 id="důkaz">Důkaz</h3><p>Označme součet konvergentní řady $\sum a_n$ jako $l$ a její $n$-tý částečný součet jako</p>\[s_n := a_1 + a_2 + \cdots + a_n\]<p>Pak platí</p>\[\forall \epsilon &gt; 0,\, \exists N \in \mathbb{N}\ (n &gt; N \Rightarrow |s_n - l| &lt; \epsilon).\]<p>Proto pro dostatečně velké ($&gt;N$) $n$:</p>\[|a_n| = |s_n - s_{n-1}| = |(s_n - l) - (s_{n-1} - l)| \leq |s_n - l| + |s_{n-1} - l| \leq \epsilon + \epsilon = 2\epsilon\]<p>a tedy z definice konvergence posloupnosti:</p>\[\lim_{n\to\infty} |a_n| = 0. \quad \blacksquare\]<h3 id="poznámka">Poznámka</h3><p>Obrácení této věty obecně neplatí. Typickým příkladem je <strong>harmonická řada (harmonic series)</strong>.</p><p>Harmonická řada je řada získaná z posloupnosti, jejíž členy jsou převrácené hodnoty členů <strong>aritmetické posloupnosti</strong> (tj. z <strong>harmonické posloupnosti</strong>). Klasickým příkladem je:</p>\[H_n := 1 + \frac{1}{2} + \cdots + \frac{1}{n} \quad (n=1,2,3,\dots)\]<p>Tato řada diverguje, což lze ukázat následovně:</p>\[\begin{align*} \lim_{n\to\infty} H_n &amp;= 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{4} + \frac{1}{5} + \frac{1}{6} + \frac{1}{7} + \frac{1}{8} + \frac{1}{9} + \cdots + \frac{1}{16} + \cdots \\ &amp;&gt; 1 + \frac{1}{2} + \frac{1}{4} + \frac{1}{4} + \frac{1}{8} + \frac{1}{8} + \frac{1}{8} + \frac{1}{8} + \frac{1}{16} + \cdots + \frac{1}{16} + \cdots \\ &amp;= 1 + \frac{1}{2} \qquad\, + \frac{1}{2} \qquad\qquad\qquad\ \ + \frac{1}{2} \qquad\qquad\quad + \frac{1}{2} + \cdots \\ &amp;= \infty. \end{align*}\]<p>I když tedy řada $H_n$ diverguje, její obecný člen $1/n$ zjevně konverguje k nule.</p><blockquote class="prompt-danger"><p>Jestliže $\lim_{n\to\infty} a_n \neq 0$, pak řada $\sum a_n$ nutně diverguje. Avšak z $\lim_{n\to\infty} a_n = 0$ ještě neplyne, že řada $\sum a_n$ konverguje — v takovém případě je třeba použít jiné metody testování konvergence/divergence.</p></blockquote><h2 id="geometrická-řada">Geometrická řada</h2><p><strong>Geometrická řada (geometric series)</strong> získaná z geometrické posloupnosti s prvním členem 1 a <strong>kvocientem</strong> $r$:</p>\[1 + r + r^2 + r^3 + \cdots \label{eqn:geometric_series}\tag{5}\]<p>je <u>nejdůležitější a nejzákladnější řada</u>. Z identity</p>\[(1-r)(1+r+\cdots + r^{n-1}) = 1 - r^n\]<p>dostaneme</p>\[1 + r + \cdots + r^{n-1} = \frac{1-r^n}{1-r} = \frac{1}{1-r} - \frac{r^n}{1-r} \qquad (r \neq 1) \label{eqn:sum_of_geometric_series}\tag{6}\]<p>Dále platí</p>\[\lim_{n\to\infty} r^n = 0 \quad \Leftrightarrow \quad |r| &lt; 1\]<p>a proto je nutnou a postačující podmínkou konvergence geometrické řady ($\ref{eqn:geometric_series}$) nerovnost $|r| &lt; 1$.</p><blockquote class="prompt-info"><p><strong>Konvergence/divergence geometrické řady</strong><br /> Geometrická řada $\sum ar^{n-1}$:</p><ul><li>konverguje, pokud $|r| &lt; 1$<li>diverguje, pokud $|r| \geq 1$</ul></blockquote><p>Odtud plyne</p>\[1 + r + r^2 + r^3 + \cdots = \frac{1}{1-r} \qquad (|r| &lt; 1) \label{eqn:sum_of_inf_geometric_series}\tag{7}\]<h3 id="geometrická-řada-a-aproximace">Geometrická řada a aproximace</h3><p>Identita ($\ref{eqn:sum_of_geometric_series}$) je pro $|r| &lt; 1$ užitečná k získání aproximace hodnoty $\cfrac{1}{1-r}$.</p><p>Dosadíme-li do ní $r=-\epsilon$, $n=2$, dostaneme</p>\[\frac{1}{1+\epsilon} - (1 - \epsilon) = \frac{\epsilon^2}{1 + \epsilon}\]<p>Tedy pro $0 &lt; \epsilon &lt; 1$ platí</p>\[0 &lt; \frac{1}{1 + \epsilon} - (1 - \epsilon) &lt; \epsilon^2\]<p>a proto</p>\[\frac{1}{1 + \epsilon} \approx (1 - \epsilon) \pm \epsilon^2 \qquad (0 &lt; \epsilon &lt; 1)\]<p>Z toho plyne, že pro dostatečně malé kladné $\epsilon$ lze $\cfrac{1}{1 + \epsilon}$ aproximovat výrazem $1 - \epsilon$.</p><h2 id="test-p-řady-p-series-test">Test $p$-řady ($p$-Series Test)</h2><p>Pro kladné reálné $p$ nazýváme řadu tvaru</p>\[\sum_{n=1}^{\infty} \frac{1}{n^p}\]<p><strong>$p$-řadou</strong>.</p><blockquote class="prompt-info"><p><strong>Konvergence/divergence $p$-řady</strong><br /> $p$-řada $\sum \cfrac{1}{n^p}$:</p><ul><li>konverguje, pokud $p&gt;1$<li>diverguje, pokud $p\leq 1$</ul></blockquote><p>Pro $p=1$ dostaneme harmonickou řadu, u níž jsme výše ukázali divergenci.<br /> Pro $p=2$ se problém určení hodnoty $p$-řady $\sum \cfrac{1}{n^2}$ nazývá „bazilejský (Basel) problém“ podle místa spojeného s rodinou Bernoulliů, která dala světu několik slavných matematiků a která jako první prokázala konvergenci této řady. Je známo, že odpověď je $\cfrac{\pi^2}{6}$.</p><p>Obecněji se pro $p$-řadu s $p&gt;1$ používá označení <strong>zeta funkce (zeta function)</strong>. Jde o speciální funkci zavedenou Leonhardem Eulerem (Leonhard Euler) v roce 11740 <a href="https://en.wikipedia.org/wiki/Holocene_calendar">holocenního kalendáře</a> a později pojmenovanou Riemannem; definuje se jako</p>\[\zeta(s) := \sum_{n=1}^{\infty} \frac{1}{n^s} \qquad (s&gt;1)\]<p>To už s tématem tohoto článku příliš nesouvisí a upřímně: jsem spíš „inženýrský typ“ než matematik, takže se tomu zde věnovat nebudu. Euler však ukázal, že zeta funkci lze vyjádřit také jako nekonečný součin přes prvočísla (prime number) — tzv. <strong>Eulerův součin (Euler Product)</strong> — a zeta funkce pak zaujímá klíčové místo v řadě oblastí analytické teorie čísel. Patří sem i <strong>Riemannova zeta funkce (Riemann zeta function)</strong>, tj. rozšíření definičního oboru na komplexní čísla, a s ní související slavný nevyřešený problém <strong>Riemannova hypotéza (Riemann hypothesis)</strong>.</p><p>Zpět k původnímu tématu: k důkazu testu $p$-řady budeme potřebovat níže uvedený <a href="#srovnavaci-test">srovnávací test</a> a <a href="#integralni-test">integrální test</a>. Konvergenci/divergenci $p$-řady jsem však záměrně zařadil dopředu, protože se společně s geometrickou řadou hodí hned v <a href="#srovnavaci-test">srovnávacím testu</a>, který následuje.</p><h3 id="důkaz-1">Důkaz</h3><h4 id="i-pro-p1">i) Pro $p&gt;1$</h4><p>Protože integrál</p>\[\int_1^\infty \frac{1}{x^p}\ dx = \left[\frac{1}{-p+1}\frac{1}{x^{p-1}} \right]^\infty_1 = \frac{1}{p-1}\]<p>konverguje, plyne z <a href="#integralni-test">integrálního testu</a>, že konverguje i řada $\sum \cfrac{1}{n^p}$.</p><h4 id="ii-pro-pleq-1">ii) Pro $p\leq 1$</h4><p>V tomto případě platí</p>\[0 \leq \frac{1}{n} \leq \frac{1}{n^p}\]<p>Protože víme, že harmonická řada $\sum \cfrac{1}{n}$ diverguje, dostaneme ze <a href="#srovnavaci-test">srovnávacího testu</a>, že $\sum \cfrac{1}{n^p}$ také diverguje.</p><h4 id="závěr">Závěr</h4><p>Z i) a ii) plyne: $p$-řada $\sum \cfrac{1}{n^p}$ konverguje pro $p&gt;1$ a diverguje pro $p \leq 1$. $\blacksquare$</p><h2 id="srovnávací-test">Srovnávací test</h2><p>Při testování konvergence/divergence řad s nezápornými reálnými členy, tj. <strong>řad s kladnými členy (series of positive terms)</strong>, je užitečný <strong>srovnávací test (Comparison Test)</strong> Jakoba Bernoulliho (Jakob Bernoulli).</p><p>Řada s kladnými členy $\sum a_n$ má rostoucí částečné součty, takže pokud nediverguje do nekonečna ($\sum a_n = \infty$), musí konvergovat. Proto výraz typu</p>\[\sum a_n &lt; \infty\]<p>znamená <u>konverguje</u>.</p><blockquote class="prompt-info"><p><strong>Srovnávací test (Comparison Test)</strong><br /> Když $0 \leq a_n \leq b_n$, pak:</p><ul><li>$\sum b_n &lt; \infty \ \Rightarrow \ \sum a_n &lt; \infty$<li>$\sum a_n = \infty \ \Rightarrow \ \sum b_n = \infty$</ul></blockquote><p>Zejména u řad s kladnými členy jako $\sum \cfrac{1}{n^2 + n}$, $\sum \cfrac{\log n}{n^3}$, $\sum \cfrac{1}{2^n + 3^n}$, $\sum \cfrac{1}{\sqrt{n}}$, $\sum \sin{\cfrac{1}{n}}$ apod., které mají podobný tvar jako geometrická řada $\sum ar^{n-1}$ či $p$-řada $\sum \cfrac{1}{n^p}$, je vhodné srovnávací test aktivně vyzkoušet.</p><p>Všechny další testy konvergence/divergence uvedené níže lze odvodit právě ze <strong>srovnávacího testu</strong>; v tomto smyslu jej lze považovat za nejdůležitější.</p><h3 id="limitní-srovnávací-test">Limitní srovnávací test</h3><p>Pro dvě řady s kladnými členy $\sum a_n$ a $\sum b_n$ předpokládejme, že v podílu obecných členů $a_n/b_n$ se dominantní členy v čitateli a jmenovateli vyruší a že platí $\lim_{n\to\infty} \cfrac{a_n}{b_n}=c \text{ (}c\text{ je konečné kladné číslo)}$. Známe-li konvergenci/divergenci řady $\sum b_n$, můžeme použít následující <strong>limitní srovnávací test (Limit Comparison Test)</strong>.</p><blockquote class="prompt-info"><p><strong>Limitní srovnávací test (Limit Comparison Test)</strong><br /> Jestliže</p>\[\lim_{n\to\infty} \frac{a_n}{b_n} = c \text{ (}c\text{ je konečné kladné číslo)}\]<p>pak řady $\sum a_n$ a $\sum b_n$ buď obě konvergují, nebo obě divergují. Tj. $ \sum a_n &lt; \infty \ \Leftrightarrow \ \sum b_n &lt; \infty$.</p></blockquote><h2 id="odmocninový-test">Odmocninový test</h2><blockquote class="prompt-info"><p><strong>Věta</strong><br /> Pro řadu s kladnými členy $\sum a_n$ a kladné $\epsilon &lt; 1$ platí:</p><ul><li>jestliže pro všechna $n$ platí $\sqrt[n]{a_n}&lt; 1-\epsilon$, pak řada $\sum a_n$ konverguje<li>jestliže pro všechna $n$ platí $\sqrt[n]{a_n}&gt; 1+\epsilon$, pak řada $\sum a_n$ diverguje</ul></blockquote><blockquote class="prompt-info"><p><strong>Důsledek: odmocninový test (Root Test)</strong><br /> Nechť u řady s kladnými členy $\sum a_n$ existuje limita</p>\[\lim_{n\to\infty} \sqrt[n]{a_n} =: r\]<p>Pak:</p><ul><li>pokud $r&lt;1$, řada $\sum a_n$ konverguje<li>pokud $r&gt;1$, řada $\sum a_n$ diverguje</ul></blockquote><blockquote class="prompt-warning"><p>Pokud je v uvedeném důsledku $r=1$, nelze rozhodnout o konvergenci/divergenci, a je třeba použít jiné metody.</p></blockquote><h2 id="podílový-test">Podílový test</h2><blockquote class="prompt-info"><p><strong>Podílový test (Ratio Test)</strong><br /> Pro kladnou posloupnost $(a_n)$ a $0 &lt; r &lt; 1$:</p><ul><li>jestliže pro všechna $n$ platí $a_{n+1}/a_n \leq r$, pak řada $\sum a_n$ konverguje<li>jestliže pro všechna $n$ platí $a_{n+1}/a_n \geq 1$, pak řada $\sum a_n$ diverguje</ul></blockquote><blockquote class="prompt-info"><p><strong>Důsledek</strong><br /> Nechť u kladné posloupnosti $(a_n)$ existuje limita $\rho := \lim_{n\to\infty} \cfrac{a_{n+1}}{a_n}$. Pak:</p><ul><li>pokud $\rho &lt; 1$, řada $\sum a_n$ konverguje<li>pokud $\rho &gt; 1$, řada $\sum a_n$ diverguje</ul></blockquote><h2 id="integrální-test">Integrální test</h2><p>Pomocí integrálu lze testovat konvergenci/divergenci řad složených z klesající kladné posloupnosti.</p><blockquote class="prompt-info"><p><strong>Integrální test (Integral Test)</strong><br /> Nechť je spojitá funkce $f: \left[1,\infty \right) \rightarrow \mathbb{R}$ klesající a pro všechna $x$ platí $f(x)&gt;0$. Pak řada $\sum f(n)$ konverguje právě tehdy, když konverguje integrál</p>\[\int_1^\infty f(x)\ dx := \lim_{b\to\infty} \int_1^b f(x)\ dx\]<p>.</p></blockquote><h3 id="důkaz-2">Důkaz</h3><p>Protože $f(x)$ je spojitá, klesající a všude kladná, platí nerovnost</p>\[f(n+1) \leq \int_n^{n+1} f(x)\ dx \leq f(n)\]<p>Sečteme-li tyto nerovnosti pro $n=1$ až po obecné $n$, dostaneme</p>\[f(2) + \cdots + f(n+1) \leq \int_1^{n+1} f(x)\ dx \leq f(1) + \cdots + f(n)\]<p>Aplikací <a href="#srovnavaci-test">srovnávacího testu</a> získáme požadovaný výsledek. $\blacksquare$</p><h2 id="střídavé-řady">Střídavé řady</h2><p>Řadu $\sum a_n$, v níž je obecný člen nenulový a znaménko každého členu $a_n$ je opačné než znaménko následujícího členu $a_{n+1}$ (tj. kladné a záporné členy se střídají), nazýváme <strong>střídavou řadou (alternating series)</strong>.</p><p>Pro střídavé řady lze pro testování konvergence/divergence užitečně využít následující větu, kterou objevil německý matematik Gottfried Wilhelm Leibniz (Gottfried Wilhelm Leibniz).</p><blockquote class="prompt-info"><p><strong>Test střídavé řady (Alternating Series Test)</strong><br /> Jestliže:</p><ol><li>pro všechna $n$ mají $a_n$ a $a_{n+1}$ opačné znaménko,<li>pro všechna $n$ platí $|a_n| \geq |a_{n+1}|$,<li>$\lim_{n\to\infty} a_n = 0$,</ol><p>pak střídavá řada $\sum a_n$ konverguje.</p></blockquote><h2 id="absolutně-konvergentní-řady">Absolutně konvergentní řady</h2><p>Pro řadu $\sum a_n$ říkáme, že <strong>konverguje absolutně (converge absolutely)</strong>, jestliže konverguje řada $\sum |a_n|$.</p><p>Pak platí následující věta.</p><blockquote class="prompt-info"><p><strong>Věta</strong><br /> Absolutně konvergentní řada je konvergentní.</p></blockquote><blockquote class="prompt-warning"><p>Obrácení předchozí věty neplatí.<br /> Pokud řada konverguje, ale není absolutně konvergentní, říkáme, že konverguje <strong>podmíněně (converge conditionally)</strong>.</p></blockquote><h3 id="důkaz-3">Důkaz</h3><p>Pro reálné $a$ definujme</p>\[\begin{align*} a^+ &amp;:= \max\{a,0\} = \frac{1}{2}(|a| + a), \\ a^- &amp;:= -\min\{a,0\} = \frac{1}{2}(|a| - a) \end{align*}\]<p>Pak platí</p>\[a = a^+ - a^-, \qquad |a| = a^+ + a^-\]<p>Protože $0 \leq a^\pm \leq |a|$, plyne ze <a href="#srovnavaci-test">srovnávacího testu</a>, že pokud řada $\sum |a_n|$ konverguje, pak konvergují i řady $\sum a_n^+$ a $\sum a_n^-$. Následně ze <a href="/cs/posts/sequences-and-series/#zakladni-vlastnosti-konvergentnich-rad">základních vlastností konvergentních řad</a> dostaneme</p>\[\sum a_n = \sum (a_n^+ - a_n^-) = \sum a_n^+ - \sum a_n^-\]<p>a tedy $\sum a_n$ konverguje. $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="cs">Posloupnosti a řady</title><link href="https://www.yunseo.kim/cs/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="am" /><published>2025-03-16T00:00:00+09:00</published> <updated>2026-02-02T08:31:26+09:00</updated> <id>https://www.yunseo.kim/cs/posts/sequences-and-series/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Calculus" /> <summary xml:lang="cs">Probereme základní pojmy z kalkulu: definici posloupností a řad, jejich konvergenci a divergenci, a také definici čísla e jako základu přirozeného logaritmu.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Probereme základní pojmy z kalkulu: definici posloupností a řad, jejich konvergenci a divergenci, a také definici čísla e jako základu přirozeného logaritmu.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="posloupnosti">Posloupnosti</h2><p><strong>Posloupnost (sequence)</strong>, se kterou se v kalkulu pracuje, obvykle znamená nekonečnou posloupnost. Jinými slovy, posloupnost je funkce definovaná na množině všech <strong>přirozených čísel (natural number)</strong></p>\[\mathbb{N} := \{1,2,3,\dots\}\]<p>.* Pokud jsou hodnoty této funkce reálná čísla (real number), mluvíme o „reálné posloupnosti“, pokud jsou to komplexní čísla (complex number), o „komplexní posloupnosti“, pokud jsou to body (point), o „posloupnosti bodů“, pokud jsou to matice (matrix), o „posloupnosti matic“, pokud jsou to funkce (function), o „posloupnosti funkcí“, pokud jsou to množiny (set), o „posloupnosti množin“ atd. Všechna tato označení však lze zjednodušeně shrnout jako „posloupnost“.</p><p>Obvykle pro <strong>těleso reálných čísel (the field of real numbers)</strong> $\mathbb{R}$, u posloupnosti $\mathbf{a}: \mathbb{N} \to \mathbb{R}$ klademe</p>\[a_1 := \mathbf{a}(1), \quad a_2 := \mathbf{a}(2), \quad a_3 := \mathbf{a}(3)\]<p>apod. a tuto posloupnost zapisujeme jako</p>\[a_1,\, a_2,\, a_3,\, \dots\]<p>nebo</p>\[\begin{gather*} (a_1,a_2,a_3,\dots), \\ (a_n: n=1,2,3,\dots), \\ (a_n)_{n=1}^{\infty}, \qquad (a_n) \end{gather*}\]<p>atd.</p><blockquote class="prompt-info"><p>*Při definování posloupnosti lze místo oboru přirozených čísel $\mathbb{N}$ vzít množinu celých čísel nezáporných</p>\[\mathbb{N}_0 := \{0\} \cup \mathbb{N} = \{0,1,2,\dots\}\]<p>nebo</p>\[\{2,3,4,\dots \}\]<p>apod. Například při studiu teorie mocninných řad je přirozenější, když je oborem definice $\mathbb{N}_0$.</p></blockquote><h2 id="konvergence-a-divergence">Konvergence a divergence</h2><p>Jestliže posloupnost $(a_n)$ konverguje k reálnému číslu $l$, píšeme</p>\[\lim_{n\to \infty} a_n = l\]<p>a číslo $l$ se nazývá <strong>limita</strong> posloupnosti $(a_n)$.</p><blockquote class="prompt-info"><p>Přísná definice pomocí <strong>epsilon-delta argumentu (epsilon-delta argument)</strong> je následující.</p>\[\lim_{n\to \infty} a_n = l \overset{def}\Longleftrightarrow \forall \epsilon &gt; 0,\, \exists N \in \mathbb{N}\ (n &gt; N \Rightarrow |a_n - l| &lt; \epsilon)\]<p>Tj. pro libovolně malé kladné $\epsilon$ vždy existuje přirozené číslo $N$ takové, že pro $n&gt;N$ platí $|a_n - l | &lt; \epsilon$. To znamená, že pro dostatečně velká $n$ se rozdíl mezi $a_n$ a $l$ stává libovolně malým; posloupnost $(a_n)$ pak podle definice konverguje k reálnému číslu $l$.</p></blockquote><p>Posloupnost, která nekonverguje, se nazývá <strong>divergentní</strong>. <em>Konvergence či divergence posloupnosti se nezmění, i když změníme konečný počet jejích členů.</em></p><p>Pokud jednotlivé členy posloupnosti $(a_n)$ rostou bez omezení, píšeme</p>\[\lim_{n\to \infty} a_n = \infty\]<p>a říkáme, že <em>diverguje k plus nekonečnu</em>. Podobně, pokud členy posloupnosti $(a_n)$ klesají bez omezení, píšeme</p>\[\lim_{n\to \infty} a_n = -\infty\]<p>a říkáme, že <em>diverguje k minus nekonečnu</em>.</p><h2 id="základní-vlastnosti-konvergentních-posloupností">Základní vlastnosti konvergentních posloupností</h2><p>Jestliže posloupnosti $(a_n)$ a $(b_n)$ obě konvergují (tj. mají limitu), potom posloupnosti $(a_n + b_n)$ a $(a_n \cdot b_n)$ také konvergují a platí</p>\[\lim_{n\to \infty} (a_n + b_n) = \lim_{n\to \infty} a_n + \lim_{n\to \infty} b_n \label{eqn:props_of_conv_series_1}\tag{1}\] \[\lim_{n\to \infty} (a_n \cdot b_n) = \left(\lim_{n\to \infty} a_n \right) \cdot \left(\lim_{n\to \infty} b_n \right) \label{eqn:props_of_conv_series_2}\tag{2}\]<p>Dále pro libovolné reálné číslo $t$ platí</p>\[\lim_{n\to \infty} (t a_n) = t\left(\lim_{n\to \infty} a_n \right) \label{eqn:props_of_conv_series_3}\tag{3}\]<p>Tyto vlastnosti se nazývají <strong>základní vlastnosti konvergentních posloupností</strong> nebo také <strong>základní vlastnosti limity</strong>.</p><h2 id="základ-přirozeného-logaritmu-e">Základ přirozeného logaritmu $e$</h2><p><strong>Základ přirozeného logaritmu</strong> je definován jako</p>\[e := \lim_{n\to \infty} \left(1+\frac{1}{n} \right)^n \approx 2.718\]<p>Jde o jednu z nejdůležitějších konstant v matematice.</p><blockquote class="prompt-tip"><p>Zvláštností je, že prakticky jen v Koreji se poměrně často používá výraz „přirozená konstanta“, avšak nejde o standardní termín. Korejská matematická společnost uvádí v oficiálním slovníku jako termín <a href="https://www.kms.or.kr/mathdict/list.html?key=kname&amp;keyword=%EC%9E%90%EC%97%B0%EB%A1%9C%EA%B7%B8%EC%9D%98+%EB%B0%91">‘základ přirozeného logaritmu’</a> a výraz „přirozená konstanta“ se v něm vůbec nevyskytuje. Dokonce ani ve standardním slovníku Národního institutu korejského jazyka nelze heslo „přirozená konstanta“ najít; ve <a href="https://stdict.korean.go.kr/search/searchView.do?pageSize=10&amp;searchKeyword=%EC%9E%90%EC%97%B0%EB%A1%9C%EA%B7%B8">slovníkovém výkladu k „přirozenému logaritmu“</a> se pouze uvádí „určité číslo, které se často značí e“.<br /> Ani v anglicky mluvících zemích a v Japonsku pro to neexistuje přímý odpovídající termín; v angličtině se obvykle používá „the base of the natural logarithm“, zkráceně „natural base“, případně „Euler’s number“ nebo „the number $e$“.<br /> Jelikož původ je nejasný, Korejská matematická společnost to nikdy neuznala jako oficiální termín a mimo Koreu se to prakticky nikde nepoužívá, není žádný důvod na takovém názvu trvat. Proto zde dál budu používat označení „základ přirozeného logaritmu“, případně prostě $e$.</p></blockquote><h2 id="řady">Řady</h2><p>Pro posloupnost</p>\[\mathbf{a} = (a_1, a_2, a_3, \dots)\]<p>nazveme <strong>řadou</strong> posloupnosti $\mathbf{a}$ jinou posloupnost tvořenou jejími částečnými součty</p>\[a_1, \quad a_1 + a_2, \quad a_1 + a_2 + a_3, \quad \dots\]<p>Řadu posloupnosti $(a_n)$ zapisujeme například jako</p>\[\begin{gather*} a_1 + a_2 + a_3 + \cdots, \qquad \sum_{n=1}^{\infty}a_n, \\ \sum_{n\geq 1} a_n, \qquad \sum_n a_n, \qquad \sum a_n \end{gather*}\]<p>atd.</p><h2 id="konvergence-a-divergence-řad">Konvergence a divergence řad</h2><p>Řada získaná z posloupnosti $(a_n)$,</p>\[a_1, \quad a_1 + a_2, \quad a_1 + a_2 + a_3, \quad \dots\]<p>konverguje k nějakému reálnému číslu $l$, jestliže</p>\[\sum_{n=1}^{\infty} a_n = l\]<p>V tomto případě se limita $l$ nazývá <strong>součet</strong> řady $\sum a_n$. Symbol</p>\[\sum a_n\]<p>může podle kontextu označovat buď <u>řadu</u>, nebo její <u>součet</u>.</p><p>Řada, která nekonverguje, se nazývá <strong>divergentní</strong>.</p><h2 id="základní-vlastnosti-konvergentních-řad">Základní vlastnosti konvergentních řad</h2><p>Ze <a href="#základní-vlastnosti-konvergentních-posloupností">základních vlastností konvergentních posloupností</a> plyne následující: pro reálné číslo $t$ a dvě konvergentní řady $\sum a_n$, $\sum b_n$ platí</p>\[\sum(a_n + b_n) = \sum a_n + \sum b_n, \qquad \sum ta_n = t\sum a_n \tag{4}\]<p>Konvergence řady není ovlivněna změnou konečného počtu členů. Tj. pro dvě posloupnosti $(a_n)$, $(b_n)$: pokud pro všechna $n$ až na konečně mnoho výjimek platí $a_n=b_n$, pak řada $\sum a_n$ konverguje právě tehdy, když konverguje řada $\sum b_n$.</p>]]> </content> </entry> <entry><title xml:lang="cs">Newtonovy zákony pohybu</title><link href="https://www.yunseo.kim/cs/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="am" /><published>2025-03-10T00:00:00+09:00</published> <updated>2025-03-10T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/newtons-laws-of-motion/</id> <author> <name>Yunseo Kim</name> </author> <category term="Physics" /> <category term="Classical Dynamics" /> <summary xml:lang="cs">Probereme Newtonovy zákony pohybu, význam tří zákonů, definice setrvačné a gravitační hmotnosti a princip ekvivalence, důležitý nejen v klasické mechanice, ale i v obecné teorii relativity.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Probereme Newtonovy zákony pohybu, význam tří zákonů, definice setrvačné a gravitační hmotnosti a princip ekvivalence, důležitý nejen v klasické mechanice, ale i v obecné teorii relativity.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><p><strong>Newtonovy zákony pohybu (Newton’s laws of motion)</strong></p><ol><li>Pokud na těleso nepůsobí žádná vnější síla, těleso setrvává v klidu nebo v rovnoměrném přímočarém pohybu.<li>Časová změna hybnosti tělesa se rovná síle, která na něj působí.<ul><li>$\vec{F} = \cfrac{d\vec{p}}{dt} = \cfrac{d}{dt}(m\vec{v}) = m\vec{a}$</ul><li>Když na sebe dvě tělesa působí silami, mají tyto síly stejnou velikost a opačný směr.<ul><li>$\vec{F_1} = -\vec{F_2}$</ul></ol></blockquote><blockquote class="prompt-info"><p><strong>Princip ekvivalence (principle of equivalence)</strong></p><ul><li>Setrvačná hmotnost: hmotnost, která určuje zrychlení tělesa při působení dané síly<li>Gravitační hmotnost: hmotnost, která určuje gravitační působení mezi tělesem a jiným tělesem<li>V současnosti je známo, že setrvačná a gravitační hmotnost se zjevně shodují s chybou řádu $10^{-12}$<li>Tvrzení, že setrvačná a gravitační hmotnost jsou přesně stejné, se nazývá <strong>princip ekvivalence</strong></ul></blockquote><h2 id="newtonovy-zákony-pohybu">Newtonovy zákony pohybu</h2><p>Newtonovy zákony pohybu jsou tři zákony, které Isaac Newton(Issac Newton) publikoval v roce 11687 <a href="https://en.wikipedia.org/wiki/Holocene_calendar">holocénního kalendáře</a> ve svém díle <em>Philosophiæ Naturalis Principia Mathematica</em> (Matematické principy přírodní filosofie, zkráceně „Principia“). Tvoří základ newtonovské mechaniky (Newtonian mechanics).</p><ol><li>Pokud na těleso nepůsobí žádná vnější síla, těleso setrvává v klidu nebo v rovnoměrném přímočarém pohybu.<li>Časová změna hybnosti tělesa se rovná síle, která na něj působí.<li>Když na sebe dvě tělesa působí silami, mají tyto síly stejnou velikost a opačný směr.</ol><h3 id="newtonův-první-zákon">Newtonův první zákon</h3><blockquote><p>I. Pokud na těleso nepůsobí žádná vnější síla, těleso setrvává v klidu nebo v rovnoměrném přímočarém pohybu.</p></blockquote><p>Těleso v takovém stavu, kdy na něj nepůsobí vnější síla, se nazývá <strong>volné těleso (free body)</strong> nebo <strong>volná částice (free particle)</strong>. Samotný první zákon však dává pouze kvalitativní (nikoli kvantitativní) pojem síly.</p><h3 id="newtonův-druhý-zákon">Newtonův druhý zákon</h3><blockquote><p>II. Časová změna hybnosti tělesa se rovná síle, která na něj působí.</p></blockquote><p>Newton definoval <strong>hybnost (momentum)</strong> jako součin hmotnosti a rychlosti</p>\[\vec{p} \equiv m\vec{v} \label{eqn:momentum}\tag{1}\]<p>Z toho lze Newtonův druhý zákon vyjádřit takto:</p>\[\vec{F} = \frac{d\vec{p}}{dt} = \frac{d}{dt}(m\vec{v}) = m\vec{a}. \label{eqn:2nd_law}\tag{2}\]<p>Newtonův první a druhý zákon jsou navzdory názvu ve skutečnosti spíše „definicemi“ síly než „zákony“. Zároveň je vidět, že definice síly závisí na definici „hmotnosti“.</p><h3 id="newtonův-třetí-zákon">Newtonův třetí zákon</h3><blockquote><p>III. Když na sebe dvě tělesa působí silami, mají tyto síly stejnou velikost a opačný směr.</p></blockquote><p>Jde o fyzikální zákon známý také jako „zákon akce a reakce“. Platí v případě, kdy síla, kterou jedno těleso působí na druhé, směřuje ve směru přímky spojující oba body působení. Taková síla se nazývá <strong>centrální síla (central force)</strong> a třetí zákon platí bez ohledu na to, zda je centrální síla přitažlivá, nebo odpudivá. Gravitační síla či elektrostatická síla mezi dvěma klidovými tělesy a také pružná síla jsou příklady centrálních sil. Naproti tomu síly mezi pohybujícími se náboji, gravitační síly mezi pohybujícími se tělesy apod., tedy síly závislé na rychlostech interagujících těles, patří mezi necentrální síly; v takových případech nelze třetí zákon použít.</p><p>S ohledem na výše uvedenou definici hmotnosti lze třetí zákon přepsat takto:</p><blockquote><p>III$^\prime$. Pokud dvě tělesa tvoří ideální izolovanou soustavu, jejich zrychlení mají opačné směry a poměr jejich velikostí se rovná převrácenému poměru jejich hmotností.</p></blockquote><p>Podle Newtonova třetího zákona platí</p>\[\vec{F_1} = -\vec{F_2} \label{eqn:3rd_law}\tag{3}\]<p>a dosazením druhého zákona ($\ref{eqn:2nd_law}$) dostaneme</p>\[\frac{d\vec{p_1}}{dt} = -\frac{d\vec{p_2}}{dt} \label{eqn:3rd-1_law}\tag{4}\]<p>Z toho plyne, že při izolované interakci dvou částic je hybnost zachována.</p>\[\frac{d}{dt}(\vec{p_1}+\vec{p_2}) = 0 \label{eqn:conservation_of_momentum}\tag{5}\]<p>Dále ze vztahu ($\ref{eqn:3rd-1_law}$) a z toho, že $\vec{p}=m\vec{v}$ a hmotnost $m$ je konstanta, vyplývá:</p>\[m_1\left(\frac{d\vec{v_1}}{dt} \right) = m_2\left(-\frac{d\vec{v_2}}{dt} \right) \tag{6a}\] \[m_1(\vec{a_1}) = m_2(-\vec{a_2}) \tag{6b}\]<p>a tedy:</p>\[\frac{m_2}{m_1} = -\frac{a_1}{a_2}. \tag{7}\]<p>Ačkoli Newtonův třetí zákon popisuje případ, kdy dvě tělesa tvoří izolovanou soustavu, v praxi je nemožné takové ideální podmínky realizovat; Newtonovo tvrzení v rámci třetího zákona tak lze v jistém smyslu považovat za dosti odvážné. Navzdory tomu, že šlo o závěr odvozený z omezených pozorování, díky Newtonovu hlubokému fyzikálnímu vhlednu zaujímala newtonovská mechanika po téměř 300 let pevné postavení, aniž by se v ověřováních různými experimenty našly chyby. Teprve ve 11900. letech se stala možnou natolik přesná měření, aby se dala prokázat odchylka mezi předpověďmi Newtonovy teorie a skutečností, z čehož se zrodila teorie relativity a kvantová mechanika.</p><h2 id="setrvačná-hmotnost-a-gravitační-hmotnost">Setrvačná hmotnost a gravitační hmotnost</h2><p>Jedním ze způsobů, jak určit hmotnost tělesa, je porovnat jeho tíhu se standardní závaží pomocí nástroje, jako jsou váhy. Tato metoda využívá faktu, že tíha tělesa v gravitačním poli se rovná velikosti gravitační síly působící na těleso; v takovém případě má druhý zákon $\vec{F}=m\vec{a}$ tvar $\vec{W}=m\vec{g}$. Tato metoda stojí na základním předpokladu, že hmotnost $m$ definovaná v III$^\prime$ je stejná jako hmotnost $m$ vystupující v gravitační rovnici. Tyto dvě hmotnosti se nazývají <strong>setrvačná hmotnost (inertial mass)</strong> a <strong>gravitační hmotnost (gravitational mass)</strong> a definují se takto:</p><ul><li>Setrvačná hmotnost: hmotnost, která určuje zrychlení tělesa při působení dané síly<li>Gravitační hmotnost: hmotnost, která určuje gravitační působení mezi tělesem a jiným tělesem</ul><p>Ačkoli jde o později vymyšlený příběh, který nesouvisí s Galileem Galileim (Galileo Galilei), experiment s pádem z šikmé věže v Pise je myšlenkovým experimentem, který poprvé naznačil, že setrvačná a gravitační hmotnost by mohly být stejné. Newton se rovněž pokusil ukázat, že mezi oběma hmotnostmi není rozdíl, měřením period kyvadel stejné délky, ale s různými hmotnostmi závaží; kvůli hrubé metodice a přesnosti však v přesném prokázání neuspěl.</p><p>Na konci 11800. let provedl maďarský fyzik Eötvös Loránd Ágoston(Eötvös Loránd Ágoston) Eötvösův experiment, aby přesně změřil rozdíl mezi setrvačnou a gravitační hmotností, a prokázal jejich shodu s poměrně vysokou přesností (chyba do 1/20 000 000).</p><p>V novějších experimentech, které prováděli mimo jiné Robert Henry Dicke (Robert Henry Dicke), se přesnost dále zvýšila; dnes je známo, že setrvačná a gravitační hmotnost se zjevně shodují s chybou řádu $10^{-12}$. Tento výsledek má v obecné teorii relativity mimořádně důležitý význam a tvrzení, že setrvačná a gravitační hmotnost jsou přesně stejné, se nazývá <strong>princip ekvivalence (principle of equivalence)</strong>.</p>]]> </content> </entry> <entry><title xml:lang="cs">Homogenní lineární ODR druhého řádu s konstantními koeficienty</title><link href="https://www.yunseo.kim/cs/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="am" /><published>2025-02-22T00:00:00+09:00</published> <updated>2025-02-22T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/homogeneous-linear-odes-with-constant-coefficients/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="cs">Ukážeme, jak se podle znaménka diskriminantu charakteristické rovnice mění tvar obecného řešení homogenní lineární ODR 2. řádu s konstantními koeficienty.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Ukážeme, jak se podle znaménka diskriminantu charakteristické rovnice mění tvar obecného řešení homogenní lineární ODR 2. řádu s konstantními koeficienty.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li>Homogenní lineární ODR druhého řádu s konstantními koeficienty: $y^{\prime\prime} + ay^{\prime} + by = 0$<li><strong>Charakteristická rovnice (characteristic equation)</strong>: $\lambda^2 + a\lambda + b = 0$<li>Podle znaménka diskriminantu charakteristické rovnice $a^2 - 4b$ lze tvar obecného řešení rozdělit do tří případů jako v tabulce</ul><table><thead><tr><th style="text-align: center">Případ<th style="text-align: center">Kořeny charakteristické rovnice<th style="text-align: center">Báze řešení ODR<th style="text-align: center">Obecné řešení ODR<tbody><tr><td style="text-align: center">I<td style="text-align: center">dva různé reálné kořeny<br />$\lambda_1$, $\lambda_2$<td style="text-align: center">$e^{\lambda_1 x}$, $e^{\lambda_2 x}$<td style="text-align: center">$y = c_1e^{\lambda_1 x} + c_2e^{\lambda_2 x}$<tr><td style="text-align: center">II<td style="text-align: center">reálný dvojnásobný kořen<br /> $\lambda = -\cfrac{1}{2}a$<td style="text-align: center">$e^{-ax/2}$, $xe^{-ax/2}$<td style="text-align: center">$y = (c_1 + c_2 x)e^{-ax/2}$<tr><td style="text-align: center">III<td style="text-align: center">komplexně sdružené kořeny<br /> $\lambda_1 = -\cfrac{1}{2}a + i\omega$, <br /> $\lambda_2 = -\cfrac{1}{2}a - i\omega$<td style="text-align: center">$e^{-ax/2}\cos{\omega x}$, <br /> $e^{-ax/2}\sin{\omega x}$<td style="text-align: center">$y = e^{-ax/2}(A\cos{\omega x} + B\sin{\omega x})$</table></blockquote><h2 id="prerequisites">Prerequisites</h2><ul><li><a href="/cs/posts/Bernoulli-Equation/">Bernoulliho rovnice (Bernoulli Equation)</a><li><a href="/cs/posts/homogeneous-linear-odes-of-second-order/">Lineární homogenní ODR druhého řádu (Homogeneous Linear ODEs of Second Order)</a><li>Eulerův vzorec</ul><h2 id="charakteristická-rovnice-characteristic-equation">Charakteristická rovnice (characteristic equation)</h2><p>Podívejme se na homogenní lineární ODR druhého řádu s konstantními koeficienty $a$ a $b$:</p>\[y^{\prime\prime} + ay^{\prime} + by = 0 \label{eqn:ode_with_constant_coefficients}\tag{1}\]<p>Rovnice tohoto typu se důležitě uplatňují například v mechanických a elektrických kmitech.</p><p>Dříve jsme v článku <a href="/cs/posts/Bernoulli-Equation/">Bernoulliho rovnice (Bernoulli Equation)</a> našli obecné řešení logistické rovnice; podle něj má lineární ODR prvního řádu s konstantním koeficientem $k$</p>\[y^\prime + ky = 0\]<p>řešení v podobě exponenciální funkce $y = ce^{-kx}$. (V daném článku jde o případ $A=-k$, $B=0$ v rovnici (4).)</p><p>Proto lze i pro rovnici podobného tvaru, tj. ($\ref{eqn:ode_with_constant_coefficients}$), nejprve zkusit řešení ve tvaru</p>\[y=e^{\lambda x}\label{eqn:general_sol}\tag{2}\]<blockquote class="prompt-info"><p>Samozřejmě jde pouze o domněnku a vůbec není zaručeno, že obecné řešení bude skutečně tohoto tvaru. Nicméně jakmile se nám podaří najít dvě lineárně nezávislá řešení, můžeme — jak bylo rozebráno v článku <a href="/cs/posts/homogeneous-linear-odes-of-second-order/#baze-a-obecne-reseni">Lineární homogenní ODR druhého řádu</a> — díky <a href="/cs/posts/homogeneous-linear-odes-of-second-order/#princip-superpozice">principu superpozice</a> zapsat obecné řešení.<br /> Jak uvidíme za chvíli, existují i případy, kdy je nutné <a href="#ii-realny-dvojnasobny-koren-lambda---cfrac-a2">hledat řešení jiného tvaru</a>.</p></blockquote><p>Dosadíme-li výraz ($\ref{eqn:general_sol}$) a jeho derivace</p>\[y^\prime = \lambda e^{\lambda x}, \quad y^{\prime\prime} = \lambda^2 e^{\lambda x}\]<p>do rovnice ($\ref{eqn:ode_with_constant_coefficients}$), dostaneme</p>\[(\lambda^2 + a\lambda + b)e^{\lambda x} = 0.\]<p>Tedy pokud je $\lambda$ kořenem <strong>charakteristické rovnice (characteristic equation)</strong></p>\[\lambda^2 + a\lambda + b = 0 \label{eqn:characteristic_eqn}\tag{3}\]<p>pak exponenciální funkce ($\ref{eqn:general_sol}$) je řešením ODR ($\ref{eqn:ode_with_constant_coefficients}$). Kořeny kvadratické rovnice ($\ref{eqn:characteristic_eqn}$) jsou</p>\[\begin{align*} \lambda_1 &amp;= \frac{1}{2}\left(-a + \sqrt{a^2 - 4b}\right), \\ \lambda_2 &amp;= \frac{1}{2}\left(-a - \sqrt{a^2 - 4b}\right) \end{align*}\label{eqn:lambdas}\tag{4}\]<p>a z toho plyne, že dvě funkce</p>\[y_1 = e^{\lambda_1 x}, \quad y_2 = e^{\lambda_2 x} \tag{5}\]<p>jsou řešeními rovnice ($\ref{eqn:ode_with_constant_coefficients}$).</p><blockquote class="prompt-tip"><p>Pojmy <strong>charakteristická rovnice (characteristic equation)</strong> a <strong>pomocná rovnice (auxiliary equation)</strong> se často zaměňují; významově jsou však úplně totožné. Můžete použít kterýkoli z nich.</p></blockquote><p>Nyní můžeme podle znaménka diskriminantu charakteristické rovnice ($\ref{eqn:characteristic_eqn}$), tj. $a^2 - 4b$, rozlišit tři případy:</p><ul><li>$a^2 - 4b &gt; 0$: dva různé reálné kořeny<li>$a^2 - 4b = 0$: reálný dvojnásobný kořen<li>$a^2 - 4b &lt; 0$: komplexně sdružené kořeny</ul><h2 id="tvar-obecného-řešení-podle-znaménka-diskriminantu-charakteristické-rovnice">Tvar obecného řešení podle znaménka diskriminantu charakteristické rovnice</h2><h3 id="i-dva-různé-reálné-kořeny-lambda_1-a-lambda_2">I. Dva různé reálné kořeny $\lambda_1$ a $\lambda_2$</h3><p>V tomto případě je báze (fundamentální systém) řešení rovnice ($\ref{eqn:ode_with_constant_coefficients}$) na libovolném intervalu dána funkcemi</p>\[y_1 = e^{\lambda_1 x}, \quad y_2 = e^{\lambda_2 x},\]<p>a odpovídající obecné řešení je</p>\[y = c_1 e^{\lambda_1 x} + c_2 e^{\lambda_2 x} \label{eqn:general_sol_1}\tag{6}\]<h3 id="ii-reálný-dvojnásobný-kořen-lambda---cfraca2">II. Reálný dvojnásobný kořen $\lambda = -\cfrac{a}{2}$</h3><p>Je-li $a^2 - 4b = 0$, má kvadratická rovnice ($\ref{eqn:characteristic_eqn}$) jediný kořen $\lambda = \lambda_1 = \lambda_2 = -\cfrac{a}{2}$. Potom z tvaru $y = e^{\lambda x}$ získáme pouze jedno řešení</p>\[y_1 = e^{-(a/2)x}.\]<p>Abychom dostali bázi, musíme najít druhé řešení $y_2$ jiného tvaru, které je na $y_1$ nezávislé.</p><p>V takové situaci lze použít postup, který jsme už probírali: <a href="/cs/posts/homogeneous-linear-odes-of-second-order/#snizeni-radu-reduction-of-order">snížení řádu</a>. Druhé řešení položme jako $y_2=uy_1$ a pak</p>\[\begin{align*} y_2 &amp;= uy_1, \\ y_2^{\prime} &amp;= u^{\prime}y_1 + uy_1^{\prime}, \\ y_2^{\prime\prime} &amp;= u^{\prime\prime}y_1 + 2u^{\prime}y_1^{\prime} + uy_1^{\prime\prime} \end{align*}\]<p>Dosazením do rovnice ($\ref{eqn:ode_with_constant_coefficients}$) dostaneme</p>\[(u^{\prime\prime}y_1 + 2u^\prime y_1^\prime + uy_1^{\prime\prime}) + a(u^\prime y_1 + uy_1^\prime) + buy_1 = 0.\]<p>Seskládáním členů podle $u^{\prime\prime}$, $u^\prime$ a $u$ získáme</p>\[y_1u^{\prime\prime} + (2y_1^\prime + ay_1)u^\prime + (y_1^{\prime\prime} + ay_1^\prime + by_1)u = 0.\]<p>Protože $y_1$ je řešením rovnice ($\ref{eqn:ode_with_constant_coefficients}$), je výraz v poslední závorce roven $0$, a navíc platí</p>\[2y_1^\prime = -ae^{-ax/2} = -ay_1,\]<p>takže i výraz v první závorce je $0$. Zůstává tedy pouze $u^{\prime\prime}y_1 = 0$, a odtud $u^{\prime\prime}=0$. Dvojnásobnou integrací dostaneme $u = c_1x + c_2$. Protože integrační konstanty $c_1$ a $c_2$ mohou být libovolné, můžeme pro jednoduchost zvolit $c_1=1$, $c_2=0$ a položit $u=x$. Potom $y_2 = uy_1 = xy_1$. Jelikož $y_1$ a $y_2$ jsou lineárně nezávislé, tvoří bázi. Tedy v případě dvojnásobného kořene má báze řešení rovnice ($\ref{eqn:ode_with_constant_coefficients}$) na libovolném intervalu tvar</p>\[e^{-ax/2}, \quad xe^{-ax/2},\]<p>a odpovídající obecné řešení je</p>\[y = (c_1 + c_2x)e^{-ax/2} \label{eqn:general_sol_2}\tag{7}\]<h3 id="iii-komplexně-sdružené-kořeny--cfrac12a--iomega-a--cfrac12a---iomega">III. Komplexně sdružené kořeny $-\cfrac{1}{2}a + i\omega$ a $-\cfrac{1}{2}a - i\omega$</h3><p>V tomto případě platí $a^2 - 4b &lt; 0$ a $\sqrt{-1} = i$, takže ze vztahů ($\ref{eqn:lambdas}$) máme</p>\[\cfrac{1}{2}\sqrt{a^2 - 4b} = \cfrac{1}{2}\sqrt{-(4b - a^2)} = \sqrt{-(b-\frac{1}{4}a^2)} = i\sqrt{b - \frac{1}{4}a^2},\]<p>kde zavedeme reálné číslo $\sqrt{b-\cfrac{1}{4}a^2} = \omega$.</p><p>S touto definicí je řešením charakteristické rovnice ($\ref{eqn:characteristic_eqn}$) dvojice komplexně sdružených kořenů $\lambda = -\cfrac{1}{2}a \pm i\omega$, a odpovídající dvě komplexní řešení rovnice ($\ref{eqn:ode_with_constant_coefficients}$) jsou</p>\[\begin{align*} e^{\lambda_1 x} &amp;= e^{-(a/2)x + i\omega x}, \\ e^{\lambda_2 x} &amp;= e^{-(a/2)x - i\omega x}. \end{align*}\]<p>I v tomto případě však můžeme z těchto komplexních řešení získat bázi reálných řešení následovně.</p><p>Eulerův vzorec (Euler formula)</p>\[e^{it} = \cos t + i\sin t \label{eqn:euler_formula}\tag{8}\]<p>a rovnice, kterou dostaneme dosazením $-t$ místo $t$,</p>\[e^{-it} = \cos t - i\sin t,\]<p>po sečtení a odečtení po stranách dávají</p>\[\begin{align*} \cos t &amp;= \frac{1}{2}(e^{it} + e^{-it}), \\ \sin t &amp;= \frac{1}{2i}(e^{it} - e^{-it}). \end{align*} \label{eqn:cos_and_sin}\tag{9}\]<p>Komplexní exponenciální funkci $e^z$ pro komplexní proměnnou $z = r + it$ (s reálnou částí $r$ a imaginární částí $it$) lze definovat pomocí reálných funkcí $e^r$, $\cos t$ a $\sin t$ takto:</p>\[e^z = e^{r + it} = e^r e^{it} = e^r(\cos t + i\sin t) \label{eqn:complex_exp}\tag{10}\]<p>Položíme-li $r=-\cfrac{1}{2}ax$, $t=\omega x$, můžeme psát</p>\[\begin{align*} e^{\lambda_1 x} &amp;= e^{-(a/2)x + i\omega x} = e^{-(a/2)x}(\cos{\omega x} + i\sin{\omega x}), \\ e^{\lambda_2 x} &amp;= e^{-(a/2)x - i\omega x} = e^{-(a/2)x}(\cos{\omega x} - i\sin{\omega x}). \end{align*}\]<p>Podle <a href="/cs/posts/homogeneous-linear-odes-of-second-order/#princip-superpozice">principu superpozice</a> je součet těchto komplexních řešení i jejich násobky konstantou opět řešením. Sečteme-li obě rovnosti po stranách a vynásobíme-li $\cfrac{1}{2}$, získáme první reálné řešení $y_1$:</p>\[y_1 = e^{-(a/2)x} \cos{\omega x}. \label{eqn:basis_1}\tag{11}\]<p>Stejně tak odečtením druhé rovnosti od první (po stranách) a vynásobením $\cfrac{1}{2i}$ dostaneme druhé reálné řešení $y_2$:</p>\[y_2 = e^{-(a/2)x} \sin{\omega x}. \label{eqn:basis_2}\tag{12}\]<p>Protože $\cfrac{y_1}{y_2} = \cot{\omega x}$ není konstanta, jsou $y_1$ a $y_2$ lineárně nezávislé na každém intervalu, a tedy tvoří bázi reálných řešení rovnice ($\ref{eqn:ode_with_constant_coefficients}$). Odtud dostáváme obecné řešení</p>\[y = e^{-ax/2}(A\cos{\omega x} + B\sin{\omega x}) \quad \text{(}A,\, B\text{ jsou libovolné konstanty)} \label{eqn:general_sol_3}\tag{13}\] ]]> </content> </entry> <entry><title xml:lang="cs">Jak přidat vícejazyčnou podporu do Jekyll blogu pomocí Polyglot (3) – troubleshooting: selhání buildu tématu Chirpy a chyba vyhledávání</title><link href="https://www.yunseo.kim/cs/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="am" /><published>2025-02-05T00:00:00+09:00</published> <updated>2025-02-05T00:00:00+09:00</updated> <id>https://www.yunseo.kim/cs/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Web Dev" /> <summary xml:lang="cs">Popisuji, jak jsem na Jekyll blogu založeném na &apos;jekyll-theme-chirpy&apos; nasadil plugin Polyglot pro vícejazyčný web. 3. díl: příčiny chyb při buildu Chirpy a problém vyhledávání a jejich řešení.</summary> <content type="html" xml:lang="cs"> <![CDATA[<p>Popisuji, jak jsem na Jekyll blogu založeném na 'jekyll-theme-chirpy' nasadil plugin Polyglot pro vícejazyčný web. 3. díl: příčiny chyb při buildu Chirpy a problém vyhledávání a jejich řešení.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="přehled">Přehled</h2><p>Na začátku července 12024 jsem na tento blog (hostovaný přes Github Pages a postavený na Jekyllu) nasadil plugin <a href="https://github.com/untra/polyglot">Polyglot</a> a doplnil podporu více jazyků.<br /> Tato série sdílí bugy, které se objevily při aplikaci Polyglot na téma Chirpy, jejich řešení, a také postup tvorby HTML hlavičky a <code class="language-plaintext filepath highlighter-rouge">sitemap.xml</code> s ohledem na SEO.<br /> Série má 3 články a tento, který právě čtete, je třetí díl.</p><ul><li><ol><li>díl: <a href="/cs/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-1">Nasazení pluginu Polyglot &amp; úprava HTML hlavičky a sitemap</a></ol><li><ol><li>díl: <a href="/cs/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-2">Implementace tlačítka volby jazyka &amp; lokalizace jazyka layoutu</a></ol><li><ol><li>díl: Troubleshooting selhání buildu tématu Chirpy a chyby vyhledávání (tento článek)</ol></ul><blockquote class="prompt-info"><p>Původně to měly být jen 2 díly, ale později jsem obsah několikrát doplnil, rozsah výrazně narostl, a proto jsem sérii přepracoval na 3 díly.</p></blockquote><h2 id="požadavky">Požadavky</h2><ul class="task-list"><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Musí být možné poskytovat build (webové stránky) odděleně podle jazyka pomocí cest (např. <code class="language-plaintext filepath highlighter-rouge">/posts/ko/</code>, <code class="language-plaintext filepath highlighter-rouge">/posts/ja/</code>).<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Aby se minimalizoval dodatečný čas a práce kvůli vícejazyčnosti, při buildu se musí jazyk automaticky rozpoznat podle lokální cesty souboru (např. <code class="language-plaintext filepath highlighter-rouge">/_posts/ko/</code>, <code class="language-plaintext filepath highlighter-rouge">/_posts/ja/</code>) bez nutnosti ručně vyplňovat tagy <code class="language-plaintext highlighter-rouge">lang</code> a <code class="language-plaintext highlighter-rouge">permalink</code> ve YAML front matter každého markdown souboru.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Hlavička každé stránky musí obsahovat vhodný meta tag Content-Language, alternativní tagy hreflang a canonical link tak, aby splnila Google SEO doporučení pro vícejazyčné vyhledávání.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Pro každou jazykovou verzi musí být v <code class="language-plaintext filepath highlighter-rouge">sitemap.xml</code> poskytnuty odkazy bez vynechání; zároveň samotný <code class="language-plaintext filepath highlighter-rouge">sitemap.xml</code> nesmí být duplicitní a musí existovat pouze jednou v root cestě.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Všechny funkce poskytované <a href="https://github.com/cotes2020/jekyll-theme-chirpy">tématem Chirpy</a> musí fungovat korektně na stránkách všech jazyků; pokud ne, je potřeba je upravit tak, aby fungovaly.<ul class="task-list"><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Funkce „Recently Updated“ a „Trending Tags“ fungují správně<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Během buildu přes GitHub Actions nevznikají chyby<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Vyhledávání příspěvků vpravo nahoře funguje správně</ul></ul><h2 id="než-začnete">Než začnete</h2><p>Tento článek navazuje na <a href="/cs/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-1">1. díl</a> a <a href="/cs/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-2">2. díl</a>. Pokud jste je ještě nečetli, doporučuji nejdřív přečíst předchozí části.</p><h2 id="troubleshooting-relative_url_regex-target-of-repeat-operator-is-not-specified">Troubleshooting („relative_url_regex“: target of repeat operator is not specified)</h2><p>(+ aktualizace 12025.10.08.) <a href="https://polyglot.untra.io/2025/09/20/polyglot.1.11.0/">Tento bug byl opraven ve verzi Polyglot 1.11</a>.</p><p>Po dokončení předchozích kroků jsem spustil <code class="language-plaintext highlighter-rouge">bundle exec jekyll serve</code> pro otestování buildu, ale build selhal s chybou <code class="language-plaintext highlighter-rouge">'relative_url_regex': target of repeat operator is not specified</code>.</p><div class="language-shell highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre><td class="rouge-code"><pre>...<span class="o">(</span>vynecháno<span class="o">)</span>
                    <span class="nt">------------------------------------------------</span>
      Jekyll 4.3.4   Please append <span class="sb">`</span><span class="nt">--trace</span><span class="sb">`</span> to the <span class="sb">`</span>serve<span class="sb">`</span> <span class="nb">command 
                     </span><span class="k">for </span>any additional information or backtrace. 
                    <span class="nt">------------------------------------------------</span>
/Users/yunseo/.gem/ruby/3.2.2/gems/jekyll-polyglot-1.8.1/lib/jekyll/polyglot/
patches/jekyll/site.rb:234:in <span class="sb">`</span>relative_url_regex<span class="s1">': target of repeat operator 
is not specified: /href="?\/((?:(?!*.gem)(?!*.gemspec)(?!tools)(?!README.md)(
?!LICENSE)(?!*.config.js)(?!rollup.config.js)(?!package*.json)(?!.sass-cache)
(?!.jekyll-cache)(?!gemfiles)(?!Gemfile)(?!Gemfile.lock)(?!node_modules)(?!ve
ndor\/bundle\/)(?!vendor\/cache\/)(?!vendor\/gems\/)(?!vendor\/ruby\/)(?!en\/
)(?!ko\/)(?!es\/)(?!pt-BR\/)(?!ja\/)(?!fr\/)(?!de\/)[^,'</span><span class="s2">"</span><span class="se">\s\/</span><span class="s2">?.]+</span><span class="se">\.</span><span class="s2">?)*(?:</span><span class="se">\/</span><span class="s2">[^
</span><span class="se">\]\[</span><span class="s2">)("</span><span class="s1">'\s]*)?)"/ (RegexpError)

...(zkráceno)
</span></pre></div></div><p>Když jsem hledal, zda už někdo hlásil podobný problém, zjistil jsem, že v repozitáři Polyglot už existuje <a href="https://github.com/untra/polyglot/issues/204">naprosto stejný issue</a> a také řešení.</p><p>V souboru <a href="https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_config.yml">Chirpy tématu <code class="language-plaintext filepath highlighter-rouge">_config.yml</code></a> použitým na tomto blogu je mimo jiné následující část:</p><div file="\_config.yml" class="language-yml highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
</pre><td class="rouge-code"><pre><span class="na">exclude</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s2">"</span><span class="s">*.gem"</span>
  <span class="pi">-</span> <span class="s2">"</span><span class="s">*.gemspec"</span>
  <span class="pi">-</span> <span class="s">docs</span>
  <span class="pi">-</span> <span class="s">tools</span>
  <span class="pi">-</span> <span class="s">README.md</span>
  <span class="pi">-</span> <span class="s">LICENSE</span>
  <span class="pi">-</span> <span class="s2">"</span><span class="s">*.config.js"</span>
  <span class="pi">-</span> <span class="s">package*.json</span>
</pre></div></div><p>Příčina problému je v tom, že regulární výrazy ve dvou funkcích níže v souboru <a href="https://github.com/untra/polyglot/blob/master/lib/jekyll/polyglot/patches/jekyll/site.rb">Polyglot <code class="language-plaintext filepath highlighter-rouge">site.rb</code></a> neumí správně zpracovat globbing patterny s wildcardy jako <code class="language-plaintext highlighter-rouge">"*.gem"</code>, <code class="language-plaintext highlighter-rouge">"*.gemspec"</code>, <code class="language-plaintext highlighter-rouge">"*.config.js"</code>.</p><div file="(polyglot root path)/lib/jekyll/polyglot/patches/jekyll/site.rb" class="language-ruby highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre><td class="rouge-code"><pre>    <span class="c1"># a regex that matches relative urls in a html document</span>
    <span class="c1"># matches href="baseurl/foo/bar-baz" href="/cs/foo/bar-baz" and others like it</span>
    <span class="c1"># avoids matching excluded files.  prepare makes sure</span>
    <span class="c1"># that all @exclude dirs have a trailing slash.</span>
    <span class="k">def</span> <span class="nf">relative_url_regex</span><span class="p">(</span><span class="n">disabled</span> <span class="o">=</span> <span class="kp">false</span><span class="p">)</span>
      <span class="n">regex</span> <span class="o">=</span> <span class="s1">''</span>
      <span class="k">unless</span> <span class="n">disabled</span>
        <span class="vi">@exclude</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">x</span><span class="si">}</span><span class="s2">)"</span>
        <span class="k">end</span>
        <span class="vi">@languages</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">x</span><span class="si">}</span><span class="se">\/</span><span class="s2">)"</span>
        <span class="k">end</span>
      <span class="k">end</span>
      <span class="n">start</span> <span class="o">=</span> <span class="n">disabled</span> <span class="p">?</span> <span class="s1">'ferh'</span> <span class="p">:</span> <span class="s1">'href'</span>
      <span class="sr">%r{</span><span class="si">#{</span><span class="n">start</span><span class="si">}</span><span class="sr">="?</span><span class="si">#{</span><span class="vi">@baseurl</span><span class="si">}</span><span class="sr">/((?:</span><span class="si">#{</span><span class="n">regex</span><span class="si">}</span><span class="sr">[^,'"</span><span class="se">\s</span><span class="sr">/?.]+</span><span class="se">\.</span><span class="sr">?)*(?:/[^</span><span class="se">\]\[</span><span class="sr">)("'</span><span class="se">\s</span><span class="sr">]*)?)"}</span>
    <span class="k">end</span>

    <span class="c1"># a regex that matches absolute urls in a html document</span>
    <span class="c1"># matches href="http://baseurl/foo/bar-baz" and others like it</span>
    <span class="c1"># avoids matching excluded files.  prepare makes sure</span>
    <span class="c1"># that all @exclude dirs have a trailing slash.</span>
    <span class="k">def</span> <span class="nf">absolute_url_regex</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">disabled</span> <span class="o">=</span> <span class="kp">false</span><span class="p">)</span>
      <span class="n">regex</span> <span class="o">=</span> <span class="s1">''</span>
      <span class="k">unless</span> <span class="n">disabled</span>
        <span class="vi">@exclude</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">x</span><span class="si">}</span><span class="s2">)"</span>
        <span class="k">end</span>
        <span class="vi">@languages</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">x</span><span class="si">}</span><span class="se">\/</span><span class="s2">)"</span>
        <span class="k">end</span>
      <span class="k">end</span>
      <span class="n">start</span> <span class="o">=</span> <span class="n">disabled</span> <span class="p">?</span> <span class="s1">'ferh'</span> <span class="p">:</span> <span class="s1">'href'</span>
      <span class="sr">%r{(?&lt;!hreflang="</span><span class="si">#{</span><span class="vi">@default_lang</span><span class="si">}</span><span class="sr">" )</span><span class="si">#{</span><span class="n">start</span><span class="si">}</span><span class="sr">="?</span><span class="si">#{</span><span class="n">url</span><span class="si">}#{</span><span class="vi">@baseurl</span><span class="si">}</span><span class="sr">/((?:</span><span class="si">#{</span><span class="n">regex</span><span class="si">}</span><span class="sr">[^,'"</span><span class="se">\s</span><span class="sr">/?.]+</span><span class="se">\.</span><span class="sr">?)*(?:/[^</span><span class="se">\]\[</span><span class="sr">)("'</span><span class="se">\s</span><span class="sr">]*)?)"}</span>
    <span class="k">end</span>
</pre></div></div><p>Jak to opravit? Jsou dvě možnosti.</p><h3 id="1-polyglot-forknout-a-upravit-problematickou-část">1. Polyglot forknout a upravit problematickou část</h3><p>K datu psaní tohoto článku (12024.11.) <a href="https://jekyllrb.com/docs/configuration/options/#global-configuration">oficiální dokumentace Jekyll</a> uvádí, že volba <code class="language-plaintext highlighter-rouge">exclude</code> podporuje globbing patterny Ruby <code class="language-plaintext highlighter-rouge">File.fnmatch</code>.</p><blockquote><p>“This configuration option supports Ruby’s File.fnmatch filename globbing patterns to match multiple entries to exclude.”</p></blockquote><p>Jinými slovy: problém není v tématu Chirpy, ale ve dvou funkcích Polyglotu <code class="language-plaintext highlighter-rouge">relative_url_regex()</code>, <code class="language-plaintext highlighter-rouge">absolute_url_regex()</code>. Fundamentální řešení je upravit je tak, aby nezpůsobovaly chybu.</p><p><del>V době, kdy jsem problém řešil, tento bug v Polyglotu ještě opraven nebyl,</del> ale jak už bylo zmíněno výše, <a href="https://polyglot.untra.io/2025/09/20/polyglot.1.11.0/">od verze Polyglot 1.11 je to opraveno</a>. V době výskytu jsem se řídil <del><a href="https://hionpu.com/posts/github_blog_4#4-polyglot-%EC%9D%98%EC%A1%B4%EC%84%B1-%EB%AC%B8%EC%A0%9C">tímto blog postem</a>(web už neexistuje) a</del> <a href="https://github.com/untra/polyglot/issues/204#issuecomment-2143270322">odpovědí v uvedeném GitHub issue</a>: forknout Polyglot a upravit problémové místo takto, a používat upravenou verzi místo originálu.</p><div file="(polyglot root path)/lib/jekyll/polyglot/patches/jekyll/site.rb" class="language-ruby highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre><td class="rouge-code"><pre>    <span class="k">def</span> <span class="nf">relative_url_regex</span><span class="p">(</span><span class="n">disabled</span> <span class="o">=</span> <span class="kp">false</span><span class="p">)</span>
      <span class="n">regex</span> <span class="o">=</span> <span class="s1">''</span>
      <span class="k">unless</span> <span class="n">disabled</span>
        <span class="vi">@exclude</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">escaped_x</span> <span class="o">=</span> <span class="no">Regexp</span><span class="p">.</span><span class="nf">escape</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">escaped_x</span><span class="si">}</span><span class="s2">)"</span>
        <span class="k">end</span>
        <span class="vi">@languages</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">escaped_x</span> <span class="o">=</span> <span class="no">Regexp</span><span class="p">.</span><span class="nf">escape</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">escaped_x</span><span class="si">}</span><span class="se">\/</span><span class="s2">)"</span>
        <span class="k">end</span>
      <span class="k">end</span>
      <span class="n">start</span> <span class="o">=</span> <span class="n">disabled</span> <span class="p">?</span> <span class="s1">'ferh'</span> <span class="p">:</span> <span class="s1">'href'</span>
      <span class="sr">%r{</span><span class="si">#{</span><span class="n">start</span><span class="si">}</span><span class="sr">="?</span><span class="si">#{</span><span class="vi">@baseurl</span><span class="si">}</span><span class="sr">/((?:</span><span class="si">#{</span><span class="n">regex</span><span class="si">}</span><span class="sr">[^,'"</span><span class="se">\s</span><span class="sr">/?.]+</span><span class="se">\.</span><span class="sr">?)*(?:/[^</span><span class="se">\]\[</span><span class="sr">)("'</span><span class="se">\s</span><span class="sr">]*)?)"}</span>
    <span class="k">end</span>

    <span class="k">def</span> <span class="nf">absolute_url_regex</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">disabled</span> <span class="o">=</span> <span class="kp">false</span><span class="p">)</span>
      <span class="n">regex</span> <span class="o">=</span> <span class="s1">''</span>
      <span class="k">unless</span> <span class="n">disabled</span>
        <span class="vi">@exclude</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">escaped_x</span> <span class="o">=</span> <span class="no">Regexp</span><span class="p">.</span><span class="nf">escape</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">escaped_x</span><span class="si">}</span><span class="s2">)"</span>
        <span class="k">end</span>
        <span class="vi">@languages</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">escaped_x</span> <span class="o">=</span> <span class="no">Regexp</span><span class="p">.</span><span class="nf">escape</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">escaped_x</span><span class="si">}</span><span class="se">\/</span><span class="s2">)"</span>
        <span class="k">end</span>
      <span class="k">end</span>
      <span class="n">start</span> <span class="o">=</span> <span class="n">disabled</span> <span class="p">?</span> <span class="s1">'ferh'</span> <span class="p">:</span> <span class="s1">'href'</span>
      <span class="sr">%r{(?&lt;!hreflang="</span><span class="si">#{</span><span class="vi">@default_lang</span><span class="si">}</span><span class="sr">" )</span><span class="si">#{</span><span class="n">start</span><span class="si">}</span><span class="sr">="?</span><span class="si">#{</span><span class="n">url</span><span class="si">}#{</span><span class="vi">@baseurl</span><span class="si">}</span><span class="sr">/((?:</span><span class="si">#{</span><span class="n">regex</span><span class="si">}</span><span class="sr">[^,'"</span><span class="se">\s</span><span class="sr">/?.]+</span><span class="se">\.</span><span class="sr">?)*(?:/[^</span><span class="se">\]\[</span><span class="sr">)("'</span><span class="se">\s</span><span class="sr">]*)?)"}</span>
    <span class="k">end</span>
</pre></div></div><h3 id="2-v-tématu-chirpy-nahradit-globbing-patterny-v-_configyml-konkrétními-názvy-souborů">2. V tématu Chirpy nahradit globbing patterny v <code class="language-plaintext highlighter-rouge">\_config.yml</code> konkrétními názvy souborů</h3><p>Správné a ideální by bylo, aby se výše uvedený patch dostal do mainstream Polyglotu. Do té doby by ale bylo nutné používat fork, což je nepohodlné: při každém update upstream Polyglotu je otravné hlídat změny a přenášet je. Proto jsem zvolil jiný přístup.</p><p>Když se v repozitáři <a href="https://github.com/cotes2020/jekyll-theme-chirpy">Chirpy</a> podíváte na soubory v rootu projektu, které odpovídají patternům <code class="language-plaintext highlighter-rouge">"*.gem"</code>, <code class="language-plaintext highlighter-rouge">"*.gemspec"</code>, <code class="language-plaintext highlighter-rouge">"*.config.js"</code>, jsou to stejně jen tyto tři:</p><ul><li><code class="language-plaintext filepath highlighter-rouge">jekyll-theme-chirpy.gemspec</code><li><code class="language-plaintext filepath highlighter-rouge">purgecss.config.js</code><li><code class="language-plaintext filepath highlighter-rouge">rollup.config.js</code></ul><p>Proto stačí z <code class="language-plaintext highlighter-rouge">exclude</code> v <code class="language-plaintext filepath highlighter-rouge">_config.yml</code> odstranit globbing patterny a nahradit je konkrétními názvy takto — a Polyglot to pak zvládne bez problémů:</p><div file="\_config.yml" class="language-yml highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
</pre><td class="rouge-code"><pre><span class="na">exclude</span><span class="pi">:</span> <span class="c1"># Upraveno s ohledem na issue https://github.com/untra/polyglot/issues/204 .</span>
  <span class="c1"># - "*.gem"</span>
  <span class="pi">-</span> <span class="s">jekyll-theme-chirpy.gemspec</span> <span class="c1"># - "*.gemspec"</span>
  <span class="pi">-</span> <span class="s">tools</span>
  <span class="pi">-</span> <span class="s">README.md</span>
  <span class="pi">-</span> <span class="s">LICENSE</span>
  <span class="pi">-</span> <span class="s">purgecss.config.js</span> <span class="c1"># - "*.config.js"</span>
  <span class="pi">-</span> <span class="s">rollup.config.js</span>
  <span class="pi">-</span> <span class="s">package*.json</span>
</pre></div></div><h2 id="oprava-vyhledávání">Oprava vyhledávání</h2><p>Po provedení předchozích kroků fungovala téměř celá webová stránka přesně tak, jak jsem chtěl. Později jsem ale zjistil problém: vyhledávací lišta vpravo nahoře (v tématu Chirpy) nedokáže indexovat stránky v jiném jazyce než <code class="language-plaintext highlighter-rouge">site.default_lang</code> (v mém případě angličtina) a i při hledání na neanglických stránkách vrací odkazy na anglické verze.</p><p>Abychom našli příčinu, projděme si soubory, které se vyhledávání týkají, a kde přesně to selhává.</p><h3 id="_layoutsdefaulthtml">‘_layouts/default.html’</h3><p>Když se podíváte na soubor <a href="https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_layouts/default.html"><code class="language-plaintext filepath highlighter-rouge">_layouts/default.html</code></a>, který definuje šablonu všech stránek, uvidíte, že do <code class="language-plaintext highlighter-rouge">&lt;body&gt;</code> elementu vkládá obsah <code class="language-plaintext filepath highlighter-rouge">search-results.html</code> a <code class="language-plaintext filepath highlighter-rouge">search-loader.html</code>.</p><div file="\_layouts/default.html" class="language-liquid highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre><td class="rouge-code"><pre>  &lt;body&gt;
    <span class="cp">{%</span><span class="w"> </span><span class="nt">include</span><span class="w"> </span>sidebar.html<span class="w"> </span><span class="na">lang</span><span class="o">=</span><span class="nv">lang</span><span class="w"> </span><span class="cp">%}</span>

    &lt;div id="main-wrapper" class="d-flex justify-content-center"&gt;
      &lt;div class="container d-flex flex-column px-xxl-5"&gt;
        
        (...vynecháno...)

        <span class="cp">{%</span><span class="w"> </span><span class="nt">include_cached</span><span class="w"> </span><span class="nv">search-results</span><span class="p">.</span><span class="nv">html</span><span class="w"> </span><span class="na">lang</span><span class="o">=</span><span class="nv">lang</span><span class="w"> </span><span class="cp">%}</span>
      &lt;/div&gt;

      &lt;aside aria-label="Scroll to Top"&gt;
        &lt;button id="back-to-top" type="button" class="btn btn-lg btn-box-shadow"&gt;
          &lt;i class="fas fa-angle-up"&gt;&lt;/i&gt;
        &lt;/button&gt;
      &lt;/aside&gt;
    &lt;/div&gt;

    (...vynecháno...)

    <span class="cp">{%</span><span class="w"> </span><span class="nt">include_cached</span><span class="w"> </span><span class="nv">search-loader</span><span class="p">.</span><span class="nv">html</span><span class="w"> </span><span class="na">lang</span><span class="o">=</span><span class="nv">lang</span><span class="w"> </span><span class="cp">%}</span>
  &lt;/body&gt;
</pre></div></div><h3 id="_includessearch-resulthtml">‘_includes/search-result.html’</h3><p><a href="https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_includes/search-results.html"><code class="language-plaintext filepath highlighter-rouge">_includes/search-result.html</code></a> sestaví kontejner <code class="language-plaintext highlighter-rouge">search-results</code>, do kterého se ukládají výsledky vyhledávání po zadání dotazu.</p><div file="\_includes/search-result.html" class="language-html highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
</pre><td class="rouge-code"><pre><span class="c">&lt;!-- The Search results --&gt;</span>

<span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">"search-result-wrapper"</span> <span class="na">class=</span><span class="s">"d-flex justify-content-center d-none"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"col-11 content"</span><span class="nt">&gt;</span>
    <span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">"search-hints"</span><span class="nt">&gt;</span>
      {% include_cached trending-tags.html %}
    <span class="nt">&lt;/div&gt;</span>
    <span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">"search-results"</span> <span class="na">class=</span><span class="s">"d-flex flex-wrap justify-content-center text-muted mt-3"</span><span class="nt">&gt;&lt;/div&gt;</span>
  <span class="nt">&lt;/div&gt;</span>
<span class="nt">&lt;/div&gt;</span>
</pre></div></div><h3 id="_includessearch-loaderhtml">‘_includes/search-loader.html’</h3><p>Soubor <a href="https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_includes/search-loader.html"><code class="language-plaintext filepath highlighter-rouge">_includes/search-loader.html</code></a> je klíčová část: implementuje vyhledávání založené na knihovně <a href="https://github.com/christian-fei/Simple-Jekyll-Search">Simple-Jekyll-Search</a>. V prohlížeči návštěvníka běží JavaScript, který v indexu <code class="language-plaintext filepath highlighter-rouge">search.json</code> (viz níže) najde shody a vrátí odkazy na příspěvky jako <code class="language-plaintext highlighter-rouge">&lt;article&gt;</code> elementy — jde tedy o client-side vyhledávání.</p><div file="\_includes/search-loader.html" class="language-js highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre><td class="rouge-code"><pre><span class="p">{</span><span class="o">%</span> <span class="nx">capture</span> <span class="nx">result_elem</span> <span class="o">%</span><span class="p">}</span>
  <span class="o">&lt;</span><span class="nx">article</span> <span class="kd">class</span><span class="o">=</span><span class="dl">"</span><span class="s2">px-1 px-sm-2 px-lg-4 px-xl-0</span><span class="dl">"</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="nx">header</span><span class="o">&gt;</span>
      <span class="o">&lt;</span><span class="nx">h2</span><span class="o">&gt;&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="dl">"</span><span class="s2">{url}</span><span class="dl">"</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o">&lt;</span><span class="sr">/a&gt;&lt;/</span><span class="nx">h2</span><span class="o">&gt;</span>
      <span class="o">&lt;</span><span class="nx">div</span> <span class="kd">class</span><span class="o">=</span><span class="dl">"</span><span class="s2">post-meta d-flex flex-column flex-sm-row text-muted mt-1 mb-1</span><span class="dl">"</span><span class="o">&gt;</span>
        <span class="p">{</span><span class="nx">categories</span><span class="p">}</span>
        <span class="p">{</span><span class="nx">tags</span><span class="p">}</span>
      <span class="o">&lt;</span><span class="sr">/div</span><span class="err">&gt;
</span>    <span class="o">&lt;</span><span class="sr">/header</span><span class="err">&gt;
</span>    <span class="o">&lt;</span><span class="nx">p</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">snippet</span><span class="p">}</span><span class="o">&lt;</span><span class="sr">/p</span><span class="err">&gt;
</span>  <span class="o">&lt;</span><span class="sr">/article</span><span class="err">&gt;
</span><span class="p">{</span><span class="o">%</span> <span class="nx">endcapture</span> <span class="o">%</span><span class="p">}</span>

<span class="p">{</span><span class="o">%</span> <span class="nx">capture</span> <span class="nx">not_found</span> <span class="o">%</span><span class="p">}</span><span class="o">&lt;</span><span class="nx">p</span> <span class="kd">class</span><span class="o">=</span><span class="dl">"</span><span class="s2">mt-5</span><span class="dl">"</span><span class="o">&gt;</span><span class="p">{{</span> <span class="nx">site</span><span class="p">.</span><span class="nx">data</span><span class="p">.</span><span class="nx">locales</span><span class="p">[</span><span class="nx">include</span><span class="p">.</span><span class="nx">lang</span><span class="p">].</span><span class="nx">search</span><span class="p">.</span><span class="nx">no_results</span> <span class="p">}}</span><span class="o">&lt;</span><span class="sr">/p&gt;{% endcapture %</span><span class="err">}
</span>
<span class="o">&lt;</span><span class="nx">script</span><span class="o">&gt;</span>
  <span class="p">{</span><span class="o">%</span> <span class="nx">comment</span> <span class="o">%</span><span class="p">}</span> <span class="nl">Note</span><span class="p">:</span> <span class="nx">dependent</span> <span class="nx">library</span> <span class="nx">will</span> <span class="nx">be</span> <span class="nx">loaded</span> <span class="k">in</span> <span class="s2">`js-selector.html`</span> <span class="p">{</span><span class="o">%</span> <span class="nx">endcomment</span> <span class="o">%</span><span class="p">}</span>
  <span class="nb">document</span><span class="p">.</span><span class="nf">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">DOMContentLoaded</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
    <span class="nc">SimpleJekyllSearch</span><span class="p">({</span>
      <span class="na">searchInput</span><span class="p">:</span> <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">search-input</span><span class="dl">'</span><span class="p">),</span>
      <span class="na">resultsContainer</span><span class="p">:</span> <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">search-results</span><span class="dl">'</span><span class="p">),</span>
      <span class="na">json</span><span class="p">:</span> <span class="dl">'</span><span class="s1">{{ </span><span class="dl">'</span><span class="o">/</span><span class="nx">assets</span><span class="o">/</span><span class="nx">js</span><span class="o">/</span><span class="nx">data</span><span class="o">/</span><span class="nx">search</span><span class="p">.</span><span class="nx">json</span><span class="dl">'</span><span class="s1"> | relative_url }}</span><span class="dl">'</span><span class="p">,</span>
      <span class="na">searchResultTemplate</span><span class="p">:</span> <span class="dl">'</span><span class="s1">{{ result_elem | strip_newlines }}</span><span class="dl">'</span><span class="p">,</span>
      <span class="na">noResultsText</span><span class="p">:</span> <span class="dl">'</span><span class="s1">{{ not_found }}</span><span class="dl">'</span><span class="p">,</span>
      <span class="na">templateMiddleware</span><span class="p">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">prop</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">template</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">if </span><span class="p">(</span><span class="nx">prop</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">categories</span><span class="dl">'</span><span class="p">)</span> <span class="p">{</span>
          <span class="k">if </span><span class="p">(</span><span class="nx">value</span> <span class="o">===</span> <span class="dl">''</span><span class="p">)</span> <span class="p">{</span>
            <span class="k">return</span> <span class="s2">`</span><span class="p">${</span><span class="nx">value</span><span class="p">}</span><span class="s2">`</span><span class="p">;</span>
          <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="k">return</span> <span class="s2">`&lt;div class="me-sm-4"&gt;&lt;i class="far fa-folder fa-fw"&gt;&lt;/i&gt;</span><span class="p">${</span><span class="nx">value</span><span class="p">}</span><span class="s2">&lt;/div&gt;`</span><span class="p">;</span>
          <span class="p">}</span>
        <span class="p">}</span>

        <span class="k">if </span><span class="p">(</span><span class="nx">prop</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">tags</span><span class="dl">'</span><span class="p">)</span> <span class="p">{</span>
          <span class="k">if </span><span class="p">(</span><span class="nx">value</span> <span class="o">===</span> <span class="dl">''</span><span class="p">)</span> <span class="p">{</span>
            <span class="k">return</span> <span class="s2">`</span><span class="p">${</span><span class="nx">value</span><span class="p">}</span><span class="s2">`</span><span class="p">;</span>
          <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="k">return</span> <span class="s2">`&lt;div&gt;&lt;i class="fa fa-tag fa-fw"&gt;&lt;/i&gt;</span><span class="p">${</span><span class="nx">value</span><span class="p">}</span><span class="s2">&lt;/div&gt;`</span><span class="p">;</span>
          <span class="p">}</span>
        <span class="p">}</span>
      <span class="p">}</span>
    <span class="p">});</span>
  <span class="p">});</span>
<span class="o">&lt;</span><span class="sr">/script</span><span class="err">&gt;
</span></pre></div></div><h3 id="assetsjsdatasearchjson">‘/assets/js/data/search.json’</h3><div file="/assets/js/data/search.json" class="language-liquid highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre><td class="rouge-code"><pre>---
layout: compress
swcache: true
---

[
  <span class="cp">{%</span><span class="w"> </span><span class="nt">for</span><span class="w"> </span><span class="nv">post</span><span class="w"> </span><span class="nt">in</span><span class="w"> </span><span class="nv">site</span><span class="p">.</span><span class="nv">posts</span><span class="w"> </span><span class="cp">%}</span>
  {
    "title": <span class="cp">{{</span><span class="w"> </span><span class="nv">post</span><span class="p">.</span><span class="nv">title</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>,
    "url": <span class="cp">{{</span><span class="w"> </span><span class="nv">post</span><span class="p">.</span><span class="nv">url</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">relative_url</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>,
    "categories": <span class="cp">{{</span><span class="w"> </span><span class="nv">post</span><span class="p">.</span><span class="nv">categories</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">join</span><span class="p">:</span><span class="w"> </span><span class="s1">', '</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>,
    "tags": <span class="cp">{{</span><span class="w"> </span><span class="nv">post</span><span class="p">.</span><span class="nv">tags</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">join</span><span class="p">:</span><span class="w"> </span><span class="s1">', '</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>,
    "date": "<span class="cp">{{</span><span class="w"> </span><span class="nv">post</span><span class="p">.</span><span class="nv">date</span><span class="w"> </span><span class="cp">}}</span>",
    <span class="cp">{%</span><span class="w"> </span><span class="nt">include</span><span class="w"> </span>no-linenos.html<span class="w"> </span><span class="na">content</span><span class="o">=</span><span class="nv">post</span><span class="p">.</span><span class="nv">content</span><span class="w"> </span><span class="cp">%}</span>
    <span class="cp">{%</span><span class="w"> </span><span class="nt">assign</span><span class="w"> </span><span class="nv">_content</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">content</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">strip_html</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">strip_newlines</span><span class="w"> </span><span class="cp">%}</span>
    "snippet": <span class="cp">{{</span><span class="w"> </span><span class="nv">_content</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">truncate</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>,
    "content": <span class="cp">{{</span><span class="w"> </span><span class="nv">_content</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>
  }<span class="cp">{%</span><span class="w"> </span><span class="nt">unless</span><span class="w"> </span><span class="nb">forloop.last</span><span class="w"> </span><span class="cp">%}</span>,<span class="cp">{%</span><span class="w"> </span><span class="nt">endunless</span><span class="w"> </span><span class="cp">%}</span>
  <span class="cp">{%</span><span class="w"> </span><span class="nt">endfor</span><span class="w"> </span><span class="cp">%}</span>
]
</pre></div></div><p>Pomocí Liquid syntaxe Jekyllu se zde definuje JSON soubor, který obsahuje u všech postů na webu: název, URL, kategorie a tagy, datum, 200-znakový snippet z obsahu a kompletní obsah.</p><h3 id="struktura-vyhledávání-a-identifikace-místa-kde-vzniká-problém">Struktura vyhledávání a identifikace místa, kde vzniká problém</h3><p>Shrnuto: když hostujete téma Chirpy na GitHub Pages, vyhledávání funguje zhruba tímto procesem.</p><pre><code class="language-mermaid">stateDiagram
  state "Changes" as CH
  state "Build start" as BLD
  state "Create search.json" as IDX
  state "Static Website" as DEP
  state "In Test" as TST
  state "Search Loader" as SCH
  state "Results" as R
    
  [*] --&gt; CH: Make Changes
  CH --&gt; BLD: Commit &amp; Push origin
  BLD --&gt; IDX: jekyll build
  IDX --&gt; TST: Build Complete
  TST --&gt; CH: Error Detected
  TST --&gt; DEP: Deploy
  DEP --&gt; SCH: Search Input
  SCH --&gt; R: Return Results
  R --&gt; [*]
</code></pre><p>Zde jsem ověřil, že <code class="language-plaintext filepath highlighter-rouge">search.json</code> je Polyglotem generován pro každý jazyk zvlášť:</p><ul><li><code class="language-plaintext filepath highlighter-rouge">/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/ko/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/ja/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/zh-TW/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/es/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/pt-BR/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/fr/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/de/assets/js/data/search.json</code></ul><p>Proto je problém v části „Search Loader“. Neanglické stránky se neindexují, protože <code class="language-plaintext filepath highlighter-rouge">_includes/search-loader.html</code> vždy staticky načítá pouze anglický index (<code class="language-plaintext filepath highlighter-rouge">/assets/js/data/search.json</code>) bez ohledu na jazyk právě navštívené stránky.</p><blockquote class="prompt-warning"><ul><li>Nicméně se zdá, že pro JSON soubory (na rozdíl od markdown/HTML) funguje Polyglot wrapper pro Jekyll proměnné typu <code class="language-plaintext highlighter-rouge">post.title</code>, <code class="language-plaintext highlighter-rouge">post.content</code> apod., ale nefunguje funkce <a href="https://github.com/untra/polyglot?tab=readme-ov-file#relativized-local-urls">Relativized Local Urls</a>.<li>Stejně tak jsem během testování ověřil, že v šabloně JSON souboru nelze (kromě základních Jekyll proměnných) přistupovat k <a href="https://github.com/untra/polyglot?tab=readme-ov-file#features">Liquid tagům přidaným Polyglotem <code class="language-plaintext highlighter-rouge">{{ site.default_lang }}</code>, <code class="language-plaintext highlighter-rouge">{{ site.active_lang }}</code></a>.</ul><p>Proto se hodnoty jako <code class="language-plaintext highlighter-rouge">title</code>, <code class="language-plaintext highlighter-rouge">snippet</code>, <code class="language-plaintext highlighter-rouge">content</code> generují pro každý jazyk správně, ale <code class="language-plaintext highlighter-rouge">url</code> vrací základní cestu bez ohledu na jazyk — a je potřeba to vhodně ošetřit v části „Search Loader“.</p></blockquote><h3 id="řešení">Řešení</h3><p>Oprava spočívá v úpravě <code class="language-plaintext filepath highlighter-rouge">_includes/search-loader.html</code> následovně.</p><div file="\_includes/search-loader.html" class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre><td class="rouge-code"><pre>{% capture result_elem %}
  &lt;article class="px-1 px-sm-2 px-lg-4 px-xl-0"&gt;
    &lt;header&gt;
      {% if site.active_lang != site.default_lang %}
      &lt;h2&gt;&lt;a {% static_href %}href="/{{ site.active_lang }}{url}"{% endstatic_href %}&gt;{title}&lt;/a&gt;&lt;/h2&gt;
      {% else %}
      &lt;h2&gt;&lt;a href="{url}"&gt;{title}&lt;/a&gt;&lt;/h2&gt;
      {% endif %}

(...vynecháno...)

&lt;script&gt;
  {% comment %} Note: dependent library will be loaded in `js-selector.html` {% endcomment %}
  document.addEventListener('DOMContentLoaded', () =&gt; {
    {% assign search_path = '/assets/js/data/search.json' %}
    {% if site.active_lang != site.default_lang %}
      {% assign search_path = '/' | append: site.active_lang | append: search_path %}
    {% endif %}
    
    SimpleJekyllSearch({
      searchInput: document.getElementById('search-input'),
      resultsContainer: document.getElementById('search-results'),
      json: '{{ search_path | relative_url }}',
      searchResultTemplate: '{{ result_elem | strip_newlines }}',

(...zkráceno)
</pre></div></div><ul><li>Pokud se <code class="language-plaintext highlighter-rouge">site.active_lang</code> (jazyk aktuální stránky) nerovná <code class="language-plaintext highlighter-rouge">site.default_lang</code> (výchozí jazyk webu), upravil jsem Liquid v části <code class="language-plaintext highlighter-rouge">{% capture result_elem %}</code> tak, aby před URL příspěvku načtenou z JSON přidal prefix <code class="language-plaintext highlighter-rouge">"/{{ site.active_lang }}"</code>.<li>Stejným způsobem jsem v <code class="language-plaintext highlighter-rouge">&lt;script&gt;</code> části upravil <code class="language-plaintext highlighter-rouge">search_path</code>: při buildu se porovná jazyk aktuální stránky s výchozím jazykem webu; pokud jsou stejné, použije se základní cesta (<code class="language-plaintext filepath highlighter-rouge">/assets/js/data/search.json</code>), jinak se použije jazyková cesta (např. <code class="language-plaintext filepath highlighter-rouge">/ko/assets/js/data/search.json</code>).</ul><p>Po této úpravě a rebuildu webu jsem ověřil, že vyhledávání zobrazuje výsledky správně pro každý jazyk.</p><blockquote class="prompt-tip"><p><code class="language-plaintext highlighter-rouge">{url}</code> je místo, kam se při samotném vyhledávání dosadí URL načtená z JSON souboru pomocí JS; v čase buildu to není platná URL. Polyglot ji tedy nebere jako lokalizovatelný cíl a je nutné ji ošetřit ručně dle jazyka. Problém je, že takto ošetřená šablona <code class="language-plaintext highlighter-rouge">"/{{ site.active_lang }}{url}"</code> je při buildu považována za relativní URL; a protože Polyglot neví, že už je lokalizace „vyřešená“, snaží se ji lokalizovat znovu (např. <code class="language-plaintext filepath highlighter-rouge">"/ko/ko/posts/example-post"</code>). Aby se tomu zabránilo, explicitně jsem použil tag <a href="https://github.com/untra/polyglot?tab=readme-ov-file#disabling-url-relativizing"><code class="language-plaintext highlighter-rouge">{% static_href %}</code></a>.</p></blockquote>]]> </content> </entry> </feed>
