<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <id>https://www.yunseo.kim/fr/</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:02+09:00</updated> <author> <name>Yunseo Kim</name> <uri>https://www.yunseo.kim/fr/</uri> </author><link rel="self" type="application/atom+xml" href="https://www.yunseo.kim/fr/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="fr">Notes sur la traduction coréenne du code de conduite Contributor Covenant 3.0</title><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="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/fr/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="fr">À l’occasion de ma traduction en coréen du Contributor Covenant 3.0, publié en juillet 12025, je consigne ici mes choix, leurs raisons et quelques impressions personnelles.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>À l’occasion de ma traduction en coréen du Contributor Covenant 3.0, publié en juillet 12025, je consigne ici mes choix, leurs raisons et quelques impressions personnelles.</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 officiel ajoutant la traduction coréenne du code de conduite 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="le-contributor-covenant">Le Contributor Covenant</h2><p>Le <a href="https://www.contributor-covenant.org/">Contributor Covenant</a> a été rédigé et publié pour la première fois en 12014 par <strong>Coraline Ada Ehmke</strong>, puis transféré en 12021 à <strong>l’OES (Organization for Ethical Source)</strong>, qui en assure depuis la maintenance et l’amélioration avec ses contributeurs. Il s’agit aujourd’hui du code de conduite pour communautés numériques le plus largement utilisé dans le monde. Son objectif est d’expliciter les valeurs implicites que les communautés peuvent partager, afin de créer une culture communautaire où chacun et chacune se sente bienvenu·e et en sécurité.</p><p>Par le passé, dans les communautés de développeurs, il était fréquent que des propos agressifs ou discriminatoires soient tolérés au nom d’une prétendue méritocratie. Le Contributor Covenant a joué un rôle important dans la transformation de ces communautés, qui se sont progressivement autorégulées pour devenir plus inclusives, plus centrées sur le respect mutuel et sur le retour constructif, donc plus humaines. Aujourd’hui, des centaines de milliers de projets open source à travers le monde, parmi lesquels Creative Commons, Linux, Apple, Mastodon, Microsoft, WordPress ou IBM, ont adopté ce texte.</p><h2 id="ce-qui-a-changé-avec-le-passage-au-contributor-covenant-30">Ce qui a changé avec le passage au Contributor Covenant 3.0</h2><p>L’OES a lancé ce travail en 12024 pour marquer les 10 ans du Contributor Covenant, et la version 3.0, publiée en juillet 12025 après environ un an de travail, apporte les principaux changements suivants par rapport à la version 2.1.</p><ul><li>Références :<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="davantage-de-souplesse">Davantage de souplesse</h3><ul><li>Par rapport aux versions précédentes, optimisées pour les communautés open source, cette version a été conçue pour s’appliquer aussi à des communautés en ligne et hors ligne très diverses, au-delà du seul développement logiciel<ul><li>p. ex. elle emploie le terme plus neutre et inclusif de <strong>« modérateurs de la communauté (Community Moderators) »</strong> à la place de <strong>« responsables de projet (Project Maintainers) »</strong></ul><li>Les expressions idiomatiques trop centrées sur les États-Unis ont été supprimées et remplacées par des formulations plus claires, plus faciles à comprendre et à traduire dans d’autres contextes culturels</ul><h3 id="passage-de-la-justice-rétributive-à-la-justice-restaurative">Passage de la justice rétributive à la justice restaurative</h3><p>L’un des changements les plus marquants de la version 3.0 du Contributor Covenant est précisément ce <strong>changement de paradigme</strong>, de la <strong>justice rétributive (Retributive Justice)</strong> vers la <strong>justice restaurative (Restorative Justice)</strong>. Le paragraphe des <strong>directives d’application (enforcement guidelines)</strong>, qui mettait surtout l’accent sur des critères gradués de sanction, a été reconstruit en un paragraphe consacré au <strong>traitement et à la réparation des préjudices (Addressing and Repairing Harm)</strong>.</p><ul><li>Le nom de certaines étapes de réponse a été modifié<li>En plus de la rubrique de réponse existante <strong>Consequence</strong>, une rubrique <strong>Repair</strong> a été ajoutée : il ne s’agit plus seulement de sanctionner dans l’immédiat la personne à l’origine du tort, mais aussi de réfléchir à la manière de restaurer ensuite les relations abîmées entre les parties, de résorber le conflit et de réparer ce qui doit l’être<li>Plutôt que d’insister uniquement sur l’application des règles et la punition par des tiers, le texte évolue vers une logique qui, lorsque c’est possible, encourage la réflexion volontaire, la réconciliation et l’amélioration, et cherche comment rendre à nouveau la communauté saine après l’apparition d’un problème</ul><h3 id="des-consignes-plus-claires">Des consignes plus claires</h3><ul><li>Le paragraphe <strong>Our Standards</strong> a été scindé clairement en deux parties, <strong>Encouraged Behaviors</strong> et <strong>Restricted Behaviors</strong>, afin d’en améliorer la lisibilité<li>En particulier, le paragraphe <strong>Restricted Behaviors</strong> interdit explicitement non seulement le passage à l’acte, mais aussi les menaces de passage à l’acte ou l’encouragement à de tels comportements, ce qui renforce la prévention<blockquote><p>Nous convenons de restreindre les comportements suivants dans notre communauté. Les occurrences, les menaces et la promotion de ces comportements constituent des violations du présent code de conduite.</p></blockquote><li>Une nouvelle sous-section, <strong>Other Restrictions</strong>, a également été créée sous <strong>Restricted Behaviors</strong>, afin d’énoncer plus clairement des restrictions qui étaient auparavant moins explicites : <strong>identité trompeuse (Misleading identity)</strong>, <strong>absence de mention des sources (Failing to credit sources)</strong>, <strong>contenus promotionnels (Promotional materials)</strong> et <strong>communication irresponsable (Irresponsible communication)</strong><li>En tenant compte des réponses à une enquête menée auprès de responsables de communautés qui appliquaient réellement le Contributor Covenant, le texte précise que la <strong>gradation des mesures d’application (enforcement ladder)</strong> n’est qu’un cadre de référence et ne limite pas le pouvoir d’appréciation des responsables de communauté<blockquote><p>Cette gradation des mesures d’application a valeur de ligne directrice. Elle ne limite pas la capacité des responsables de communauté à exercer leur pouvoir d’appréciation et leur jugement, dans le respect des meilleurs intérêts de notre communauté.</p></blockquote></ul><h3 id="renforcement-des-clauses-relatives-à-légalité-et-à-la-non-discrimination">Renforcement des clauses relatives à l’égalité et à la non-discrimination</h3><p>Dans le premier paragraphe, <strong>Our Pledge</strong>, les dispositions relatives à l’égalité et à la non-discrimination ont été renforcées : certains termes ont été remplacés par des expressions plus inclusives, et plusieurs valeurs contemporaines liées à la diversité ont été ajoutées, ce qui rend l’ensemble plus concret.</p><ul><li>Les expressions « body size » et « personal appearance » ont été remplacées par le terme plus englobant « physical characteristics »<li>« religion » a été remplacé par l’expression plus large « philosophy or religion »<li>« nationality » a été remplacé par l’expression plus inclusive « national or social origin »<li>La <strong>neurodiversité (neurodiversity)</strong> a été ajoutée explicitement<li>La <strong>langue (language)</strong> a été ajoutée explicitement afin de mieux prendre en compte les personnes non anglophones<li>L’ensemble du texte a aussi été révisé dans sa formulation concernant l’égalité et la diversité de genre<blockquote><p><strong>v2.1</strong><br /> caractéristiques sexuelles, identité et expression de genre, ou identité et orientation sexuelles</p><p><strong>v3.0</strong><br /> sexe ou genre, identité ou expression de genre, orientation sexuelle</p></blockquote></ul><h2 id="points-pris-en-compte-dans-ce-travail-de-traduction-coréenne">Points pris en compte dans ce travail de traduction coréenne</h2><h3 id="considérations-générales">Considérations générales</h3><h4 id="usage-du-registre-honorifique">Usage du registre honorifique</h4><p>Lorsqu’on rédige en coréen un engagement ou un code de conduite, le choix entre registre honorifique et registre neutre dépend de l’orientation recherchée, de la culture de l’organisation et de l’attitude que l’on souhaite transmettre. Autrefois, le registre neutre, plus autoritaire et plus disciplinaire, dominait, mais on voit aujourd’hui de plus en plus de textes rédigés en registre honorifique pour mettre en avant une culture plus horizontale et respectueuse.</p><table><thead><tr><th>Style<th>Registre honorifique(~합니다, ~하겠습니다)<th>Registre neutre(~한다)<tbody><tr><td>Nuance<td>respect mutuel, promesse volontaire, invitation<td>fermeté, portée juridique, règle objective<tr><td>Culture organisationnelle<td>culture souple et horizontale<td>culture relativement plus stricte<tr><td>Principaux cas d’usage<td>code de conduite, déclaration éthique<td>engagement de sécurité,<br /> contrat de travail,<br /> règlement disciplinaire légal<tr><td>Effet psychologique<td>« nous le respectons ensemble »<br /> (adhésion volontaire)<td>« il faut le respecter »<br /> (accent plus marqué sur la contrainte)</table><p>Si l’on regarde <a href="https://github.com/EthicalSource/contributor_covenant/pull/895#pullrequestreview-563210153">les discussions passées</a>, on voit qu’au moment de traduire l’ancienne version 2.0 en coréen, le registre honorifique avait d’abord été envisagé, avant que le texte ne soit <a href="https://github.com/EthicalSource/contributor_covenant/commit/3971299d81149b3fc0ce603a5dd26400509f090f">réécrit en registre neutre</a>. Je respecte ces discussions antérieures et la conclusion qui en est sortie, mais si j’ai malgré tout choisi à nouveau le registre honorifique cette fois, c’est pour les raisons suivantes.</p><p>Aujourd’hui, la culture des communautés open source est fondamentalement assez éloignée d’une logique de contrainte, de rigidité ou d’application coercitive ; elle tend plutôt vers le respect mutuel, la participation volontaire et la contribution libre. <a href="#passage-de-la-justice-retributive-a-la-justice-restaurative">La version 3.0 du Contributor Covenant reflète particulièrement fortement cette philosophie dans son ensemble</a>. Compte tenu des valeurs et de la philosophie centrales que le texte original cherche à transmettre dans cette nouvelle version, ainsi que de l’évolution de la culture communautaire, j’ai jugé que le registre honorifique était le choix approprié pour la traduction coréenne. J’ai également pris pour référence les exemples du <a href="https://rust-kr.org/pages/code-of-conduct/">groupe d’utilisateurs coréen de Rust</a>, du <a href="https://pythonkr.github.io/pycon-code-of-conduct/ko/coc/a_intent_and_purpose.html">code de conduite de PyCon KR</a> et du <a href="https://kubernetes.io/ko/community/code-of-conduct/">code de conduite en coréen de la communauté Kubernetes</a>, qui utilisent eux aussi le registre honorifique.</p><h4 id="éviter-les-tournures-passives-inutiles">Éviter les tournures passives inutiles</h4><p>Contrairement à l’anglais, qui emploie fréquemment la voix passive, le coréen privilégie fondamentalement les tournures actives. Si l’on transpose mécaniquement en coréen les passifs du texte anglais sous forme de passifs, on obtient un texte qui « sent la traduction », peu naturel et parfois même grammaticalement maladroit.</p><p>Cela ne veut pas dire que le coréen n’emploie jamais le passif, mais j’ai essayé, dans la mesure où le sens n’en était pas déformé, de rendre autant que possible par des tournures actives des formulations qui étaient au passif dans l’original anglais.</p><p><strong>p. ex.</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="tenir-compte-du-contexte-dusage-des-mots-dans-le-texte-plutôt-que-dune-traduction-mécanique">Tenir compte du contexte d’usage des mots dans le texte, plutôt que d’une traduction mécanique</h4><p>L’anglais et le coréen étant des langues assez éloignées, il va de soi que les mots ne correspondent pas exactement terme à terme. Cela reste vrai même lorsque le dictionnaire les donne comme équivalents.</p><p>Par exemple, dans le passage suivant, “intimate” ne signifie pas, dans le contexte, “친밀한”, mais “sexuel”.</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>De même, dans le passage suivant, traduire “process” de façon dictionnairique serait maladroit. Dans le contexte de ce texte, il est plus approprié de le rendre par “추스를”.</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>À l’inverse, certains emprunts n’ont pas d’équivalent vernaculaire vraiment satisfaisant. Par exemple, pour “community”, on pourrait chercher à employer un mot coréen comme “공동체”, mais j’ai estimé qu’il existait une différence de nuance assez sensible entre ce que suggère “community” en anglais et ce qu’évoque “공동체” en coréen. J’ai donc essayé, autant que possible, d’éviter les emprunts au profit de mots d’origine coréenne, mais lorsque cela risquait de déformer le sens ou la tonalité du texte original, j’ai conservé des formes comme “커뮤니티”.</p><p>En tenant compte de ces éléments, je n’ai pas voulu me contenter d’une simple substitution lexicale, mécanique et calquée sur le dictionnaire, mais choisir pour chaque cas l’expression coréenne la plus proche du sens et du contexte du texte original.</p><h4 id="respect-par-ailleurs-des-normes-rédactionnelles-du-coréen">Respect, par ailleurs, des normes rédactionnelles du coréen</h4><p>J’ai également veillé, autant que possible, à respecter avec précision les normes du coréen écrit, notamment l’orthographe et les règles du coréen standard.</p><h3 id="section-서약our-pledge">Section “서약(Our Pledge)”</h3><h4 id="intertitre">Intertitre</h4><p>Pris littéralement, “Our Pledge” donnerait “notre serment”, mais comme <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">l’ancienne traduction coréenne</a> le rendait déjà par “서약” et que ce choix me paraît suffisamment recevable au regard du naturel du texte, j’ai conservé ici encore “서약”.</p><h4 id="traduction-du-terme-caste">Traduction du terme “caste”</h4><p>Dans <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">la traduction coréenne existante de la version 2.1</a>, le terme avait été traduit tel quel par “카스트 제도”. Comme le mot caste peut aussi, en tant que nom commun savant, désigner <u>un ordre statutaire rigide et finement hiérarchisé existant dans diverses régions du monde</u>, on ne peut pas dire que ce soit strictement une erreur. Mais en usage courant, lorsqu’aucun contexte détaillé n’est fourni, la plupart des locuteurs coréens comprennent “카스트 제도” comme désignant spécifiquement « le système de castes propre aux hindous en Inde, issu notamment du Manu Smriti ». En tenant compte du contexte du texte original, je l’ai donc traduit par “계급”. À cet endroit, il est plus juste d’interpréter “caste” comme désignant tout type de système de statut social et de hiérarchie, sans le limiter à un pays particulier (l’Inde) ou à une religion particulière (l’hindouisme).</p><h4 id="employer-lexpression-성-plutôt-que-성별">Employer l’expression “성” plutôt que “성별”</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>Si l’on considère les valeurs et le contexte que l’original cherche à transmettre, ce que signifient ici “sex”, “gender” ou “sexual orientation” ne peut évidemment pas se réduire à une distinction binaire hommes/femmes. J’ai donc employé le mot “성” plutôt que “성별”, tout en essayant de préserver autant que possible, du point de vue des sciences humaines et sociales, les différences de sens entre sex, gender et sexuality, d’où la traduction suivante.</p><blockquote><p>… 생물학적 또는 사회적 성, 성 정체성 또는 성 표현, 성적 지향…</p></blockquote><h3 id="sections-장려하는-행동encouraged-behaviors-et-제한하는-행동restricted-behaviors">Sections “장려하는 행동(Encouraged Behaviors)” et “제한하는 행동(Restricted Behaviors)”</h3><h4 id="suppression-des-deux-points-">Suppression des deux-points (<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>Dans l’original anglais, il est courant d’utiliser les deux-points après une phrase complète pour introduire une liste d’exemples, comme ci-dessus. En coréen contemporain, en revanche, la norme en limite surtout l’usage aux formulations de type télégraphique, par exemple lorsqu’on énumère des éléments sous un intitulé ou qu’on ajoute une explication. Sauf dans un texte rédigé d’emblée sous forme de liste, écrire de la manière suivante est donc très maladroit et donne facilement l’impression d’une traduction faite à la va-vite avec une machine ou un LLM. C’était d’ailleurs, à titre personnel, l’un des aspects qui m’avaient le plus laissé sur ma faim dans <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">la traduction coréenne de la version 2.1</a>.</p><blockquote><p>이러한 점을 유념하며, 우리는 서로를 사려 깊게 대하고 우리가 공유하는 다음 가치를 중심으로 행동할 것에 동의합니다:</p><ol><li>우리 <strong>공동체의 목적</strong>, 활동 및 모임 방식을 존중합니다.<li><strong>친절하고 정직하게</strong> 다른 사람들과 소통합니다. …</ol></blockquote><p>J’ai donc remplacé les deux-points par un point, conformément à l’usage coréen, afin d’obtenir une formulation naturelle, au lieu de transposer mécaniquement ce signe de ponctuation.</p><h4 id="traduction-de-lexpression-that-would-generally-be-considered-inappropriately">Traduction de l’expression “that would generally be considered inappropriately”</h4><p>Ici, au lieu de traduire littéralement “generally” par “일반적으로”, j’ai choisi, dans le contexte, la formulation plus naturelle “대부분의 사람들에게”.</p><blockquote><p>…<u>대부분의 사람들이</u> 부적절하다고 간주할 만한…</p></blockquote><h3 id="traduction-de-lexpression-act-on">Traduction de l’expression “act on”</h3><p>Au départ, j’ai envisagé de traduire simplement “act on” par “이용하다”, mais dans le contexte il s’agit plutôt d’interdire tout acte accompli, intentionnellement ou non, à partir des informations personnelles ou d’identification d’autrui. Le rendre par “이용하다” m’a donc semblé réducteur, et j’ai retenu la traduction suivante.</p><blockquote><p><strong>비밀 침해.</strong> 타인의 신상 관련 정보 또는 개인적인 정보를 당사자의 허락 없이 공유하거나, 그 정보<u>를 바탕으로 행하는</u> 모든 행위.</p></blockquote><h3 id="section-문제-신고reporting-an-issue">Section “문제 신고(Reporting an Issue)”</h3><ul><li>“this Code of Conduct <strong>reinforces</strong> encouraged behaviors and norms that …”: traduit par “본 행동 강령은 …는 권장 행동 방식과 규범을 <strong>증진합니다</strong>”<li>“in a timely manner”: traduit par “적시에”<li>“while prioritizing safety and confidentiality”: traduit par “안전과 비밀 유지를 우선시한다는 전제 하에”<li>“In order to <strong>honor</strong> these values”: traduit par “이들 가치를 <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="section-피해-대응-및-교정addressing-and-repairing-harm">Section “피해 대응 및 교정(Addressing and Repairing Harm)”</h3><ul><li>“Addressing”: traduit par “대응”<li>“Repairing”: traduit par “교정”</ul><h4 id="traduction-de-event-consequence-repair">Traduction de <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>C’est un passage sur lequel j’ai beaucoup hésité, car il se prête mal à une transposition naturelle en coréen. Si l’on traduit littéralement par “사건”, “결과”, “교정”, le texte devient assez maladroit.</p><p>Après réflexion, pour que le texte reste naturel tout en transmettant le plus fidèlement possible <a href="#passage-de-la-justice-retributive-a-la-justice-restaurative">la philosophie du texte original</a>, j’ai retenu les choix suivants.</p><ul><li>“Event”: traduit par “적용 상황”<li>“Consequence”: traduit par “대응 조치”<li>“Repair”: j’ai d’abord envisagé “회복 조치”, mais j’ai écarté cette option car le mot “조치” suggère davantage une intervention et une exécution par autrui qu’une réflexion et une amélioration volontaires de la part de l’intéressé. J’ai finalement opté pour “교정 노력”</ul><h4 id="traduction-de-lexpression-seeking-clarification-on-expectations">Traduction de l’expression “seeking clarification on expectations”</h4><p>“expectations” pourrait être traduit littéralement par “기대 사항”, et le sens resterait compréhensible, mais j’ai choisi “준수 사항” pour rendre la phrase plus fluide.</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>“seeking clarification” pourrait aussi être rendu par « demander des explications », mais dans le contexte, la rubrique Repair décrit les attitudes et comportements souhaitables après les faits de la part de la personne qui a causé le problème. Traduire clarification et seeking comme une « explication » et une « demande » donnerait donc un résultat étrange. Ici, j’ai estimé qu’il convenait mieux d’y voir un <u>effort</u> (seeking) pour <u>clarifier et bien comprendre</u> (clarification) les <u>points à respecter</u> (expectations), afin de réfléchir par soi-même et d’éviter de répéter la même erreur.</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="traduction-de-lexpression-cooldown">Traduction de l’expression “cooldown”</h4><p>Dans le dictionnaire, le mot peut signifier refroidissement, récupération après l’effort, retour au calme, etc., et ici c’est clairement le sens de l’apaisement qui est le plus proche. On est très près du sens de “식히다” dans l’expression “머리 좀 식혀라.”</p><p>Mais comme “time-limited cooldown period” sonnait de façon un peu maladroite si on le rendait littéralement, j’ai traduit “cooldown period” par “자숙 기간” dans cette version coréenne.</p><h4 id="traduction-de-lexpression-time-to-process-the-incident">Traduction de l’expression “time to process the incident”</h4><p><a href="#tenir-compte-du-contexte-dusage-des-mots-dans-le-texte-plutot-que-dune-traduction-mecanique">Comme indiqué plus haut</a>, j’ai choisi de traduire cela par “해당 일을 추스를 시간”.</p><h4 id="traduction-des-expressions-suspension-et-ban">Traduction des expressions “suspension” et “ban”</h4><p>Dans <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">la traduction coréenne existante de la version 2.1</a>, “ban” avait été traduit par “제재”. Or, “제재” est un terme générique qui peut englober toutes les mesures prises en réponse à une infraction, y compris aux niveaux inférieurs comme l’avertissement ou la limitation temporaire d’activité ; le sens devient donc flou. En outre, le mot anglais “ban” a un sens clair de suspension ou d’interdiction, et l’expression coréenne “(계정 등의) 영구 정지” est elle aussi très naturelle et couramment employée. Je ne voyais donc pas de raison particulière d’éviter une traduction directe.</p><p>Il en va de même pour “suspension”, qui renvoie clairement à l’idée de suspension temporaire et ne nécessite pas non plus de périphrase.</p><p>J’ai donc traduit “Temporary Suspension” et “Permanent Ban” respectivement par “일시적 정지” et “영구 정지”.</p><h4 id="traduction-de-la-phrase-this-enforcement-ladder-is-intended-as-a-guideline">Traduction de la phrase “This enforcement ladder is intended as a guideline.”</h4><p>J’ai traduit “enforcement ladder” par “단계적 집행 기준”. Cette phrase est employée dans le contexte où il s’agit d’indiquer que cette gradation n’est qu’une option parmi plusieurs possibles et qu’elle garantit le pouvoir d’appréciation et de décision des responsables de communauté ; j’ai donc rendu l’article indéfini “a” par “하나의”. La traduction a ainsi été formulée comme suit.</p><blockquote><p><u>이 단계적 집행 기준은 하나의 기준선으로 마련한 것입니다.</u> 이는 커뮤니티의 최선의 이익에 부합하는 커뮤니티 관리자의 재량권과 판단 권한을 제한하지 않습니다.</p></blockquote><h2 id="en-guise-de-conclusion">En guise de conclusion</h2><p>Un grand nombre de documents et de projets d’intérêt public de ce type sont traduits dans plusieurs langues par des bénévoles et des contributeurs. Malheureusement, dans le cas du coréen, il n’est pas rare soit qu’aucune traduction n’existe faute de contributeurs, soit que la version disponible soit si mécanique et maladroite qu’en tant que Coréen, on en vienne à se dire : « autant lire l’original anglais ».</p><p>En décidant cette fois de contribuer à une traduction coréenne, je me suis dit que, tant qu’à le faire, je voulais produire un texte de qualité, suffisamment naturel pour qu’un lecteur n’éprouve aucune gêne même en imaginant qu’il ait été écrit directement en coréen par un auteur coréen. J’ai cherché à comprendre et à restituer la philosophie du texte original et ses nuances subtiles, en particulier les formulations qui ont changé entre la version 2.1 et la version 3.0, ainsi que les raisons qui ont pu conduire les auteurs à faire ces choix.</p><p>Par nature, la traduction n’est pas un processus qui, à partir d’une même entrée, produirait mécaniquement une sortie identique comme une fonction mathématique. Des traducteurs différents donneront inévitablement des versions légèrement différentes ; cela tient certes à leur compétence, mais relève plus fondamentalement du fait qu’en traduction, et plus largement en écriture, il n’existe pas une unique bonne réponse prédéfinie. Ces derniers temps, j’utilise l’IA comme outil d’assistance dans presque tous mes travaux, et ce blog lui-même publie aussi automatiquement des traductions multilingues via une API de LLM. Mais pour ce travail-ci, j’ai vraiment voulu m’y atteler sérieusement et produire la meilleure traduction possible de ma main. J’ai revu chaque expression à plusieurs reprises, en réfléchissant à la manière de restituer le plus fidèlement, complètement et naturellement possible le sens du texte original ; le résultat reflète ainsi mon jugement et mon interprétation personnels, mais aussi ceux que j’estime être les meilleurs. À une époque où tout le monde utilise l’IA, je crois qu’au moins pour la traduction de documents aussi importants qu’un engagement ou un code de conduite, une version traduite n’a de valeur que si elle présente un avantage comparatif réel par rapport à un simple résultat obtenu en jetant le texte brut à une IA en lui demandant de traduire. En tout cas, à la date actuelle de mars 12026, j’ose dire avec fierté que <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">cette traduction</a> préserve pleinement les nuances et le contexte subtils de l’original que la traduction automatique ou les LLM ne parviennent pas encore entièrement à restituer.</p><p>À la date du 20 mars 12026, la version 3.0 du Contributor Covenant n’a été intégralement traduite, en dehors du texte anglais original et de la version coréenne que je m’apprête à soumettre, qu’en trois langues : le bengali, l’allemand et le chinois de Chine continentale. Et si l’on regarde <a href="https://github.com/EthicalSource/contributor_covenant/pulls">la liste des PR ouvertes</a>, on voit aussi qu’il existe de nombreuses langues pour lesquelles un premier brouillon de traduction a bien été soumis en PR, mais n’a pas encore pu être approuvé faute de relecteur. Et ce n’est même pas tout : dans beaucoup d’autres langues, on en est encore à la version 1.4. Si une personne dont la langue n’est pas le coréen lit ce billet pour une raison ou pour une autre, j’aimerais l’encourager à contribuer elle aussi : <a href="https://github.com/EthicalSource/contributor_covenant?tab=contributing-ov-file#translators-and-native-speakers">la procédure n’est pas très compliquée</a>, et si vous pouvez dégager ne serait-ce qu’une journée de week-end pour le faire, cela aidera énormément l’OES et les locuteurs de votre langue. C’était aussi ma première expérience de contribution à ce genre de travail de traduction, et la première fois que je lisais intégralement un code de conduite ; pourtant, je pense sincèrement que ce fut un travail qui valait largement quelques heures d’investissement. La Corée fait partie des pays où le nombre de développeurs actifs dans les communautés open source telles que GitHub est relativement élevé au regard de sa population totale ; j’espère donc que <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">la version coréenne</a> du code de conduite Contributor Covenant 3.0 que j’ai traduite et soumise cette fois pourra être relue par d’autres Coréens, puis, tant qu’à faire, adoptée et utilisée utilement en de nombreux endroits.</p><p>Comme le dit <strong>le professeur Nathan Schneider</strong>, cité dans <a href="https://ethicalsource.dev/blog/contributor-covenant-3/">l’article de blog de l’OES</a>, le Contributor Covenant joue le rôle de fondement indispensable à la construction de communautés responsables et transparentes, et il a effectivement contribué à la résolution de conflits. Sur GitHub et ailleurs, il est très courant d’appuyer machinalement sur le bouton “Add a code of conduct” pour y coller un modèle, mais le modèle fourni automatiquement par GitHub, pour une raison obscure, n’a plus été mis à jour depuis la version 2.0. Or la version 3.0 apporte des changements et des améliorations majeurs par rapport aux versions 2.0 et 2.1 ; tant qu’à faire, je vous recommande donc d’adopter la dernière version via <a href="https://www.contributor-covenant.org/adopt/">la page officielle</a>. Le texte n’est finalement pas si long, et je pense qu’il aurait encore plus de sens si, au cours de cette démarche, vous preniez aussi le temps de le lire attentivement en entier. En espérant que le code de conduite Contributor Covenant 3.0 et <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">sa version coréenne</a> sur laquelle j’ai travaillé cette fois retiendront votre attention, je vais m’arrêter ici.</p>]]> </content> </entry> <entry><title xml:lang="fr">Comment préparer des supports IR (How to Prepare IR Materials)</title><link href="https://www.yunseo.kim/fr/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/fr/posts/how-to-prepare-ir-materials/</id> <author> <name>Yunseo Kim</name> </author> <category term="Startup" /> <category term="IR" /> <summary xml:lang="fr">Comprendre ce qu’est un support d’Investor Relations (IR) et résumer les éléments indispensables d’un bon document IR pour lever des fonds avec succès.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Comprendre ce qu’est un support d’Investor Relations (IR) et résumer les éléments indispensables d’un bon document IR pour lever des fonds avec succès.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="quest-ce-quun-support-ir-">Qu’est-ce qu’un support IR ?</h2><p><strong>IR</strong> est l’abréviation de <strong>Investor Relations</strong> : c’est un terme générique qui désigne l’ensemble des documents et activités nécessaires pour présenter et promouvoir l’entreprise auprès des investisseurs, établir une relation, et lever des fonds. En pratique, « support IR » désigne le plus souvent la présentation que l’entreprise remet aux investisseurs dans le cadre d’une levée.</p><h2 id="ce-qui-doit-figurer-dans-un-support-ir">Ce qui doit figurer dans un support IR</h2><p>L’objectif d’un support IR étant la levée de fonds, il faut présenter de manière convaincante, du point de vue d’un investisseur, pourquoi il faut investir dans cette entreprise. Il doit donc couvrir l’ensemble des aspects du business : résumé du service, environnement de marché, description du produit/service, paysage concurrentiel, traction, modèle économique, plan de croissance, équipe, etc.</p><ul><li><strong>Pitch deck</strong> :<ul><li>Objectif : laisser une <strong>première impression positive</strong> à un grand nombre d’investisseurs potentiels, de façon <strong>courte et percutante</strong><li>Utilisé lors des levées au tout début<li>Environ 10 à 15 slides, contenu concis et très visuel</ul><li><strong>IR deck</strong> :<ul><li>Fournit des <strong>informations financières approfondies et une stratégie long terme</strong><li>Destiné à des investisseurs professionnels ayant déjà manifesté de l’intérêt et proches d’une décision<li>Permet aux investisseurs de réaliser une <strong>évaluation et un jugement plus approfondis</strong><li>Environ 20 à 30 slides, avec davantage de détails : <strong>plan financier, analyse de marché, équipe, analyse des concurrents</strong>, etc.</ul></ul><h3 id="missionvision">Mission/Vision</h3><ul><li>Quelle est la valeur fondamentale que l’entreprise souhaite apporter ?</ul><blockquote class="prompt-tip"><p>C’est le cœur de l’identité de l’entreprise. Il est recommandé d’exprimer, au tout début du support IR, la mission et la vision en une phrase chacune, de manière concise mais claire.</p></blockquote><h3 id="résumé-du-service">Résumé du service</h3><h4 id="problème-problem">Problème (Problem)</h4><ul><li>Quel problème du marché ce service cherche-t-il à résoudre ?<li>À quel point les utilisateurs sont-ils gênés par ce problème ?<li>Pourquoi ce problème est-il important ?<li>Y a-t-il une demande pour sa résolution ? Qui est la cible ?</ul><h4 id="solution">Solution</h4><ul><li>Comment allez-vous résoudre concrètement le problème mentionné plus haut ?<li>Quels bénéfices les clients et utilisateurs finaux obtiennent-ils par rapport aux approches existantes ?</ul><blockquote class="prompt-tip"><p>Les investisseurs ne sont souvent pas des experts du domaine. Mieux vaut donc expliquer le service du point de vue d’un utilisateur (non-développeur), et gérer les détails techniques au cas par cas si des questions surviennent ensuite.</p></blockquote><h3 id="taille-de-marché-market-size">Taille de marché (Market Size)</h3><p>Si l’on définit directement la taille de marché en valeur monétaire, le résultat peut varier fortement selon la méthode de calcul et les hypothèses, et le risque de contestation est relativement élevé. Il est souvent plus sûr et plus efficace de présenter la taille de marché via d’autres indicateurs : nombre d’utilisateurs potentiels, nombre/fréquence de transactions, etc.</p><ul><li><strong>TAM (Total Addressable Market, marché total)</strong> : taille maximale théoriquement accessible si l’on suppose une situation idéale où l’on exclut tous les concurrents et où l’on atteint 100% de part de marché mondiale ; taille du marché adressable quand on fournit le produit/service au monde entier<li><strong>SAM (Service Available Market, marché adressable)</strong> : taille du marché réaliste que l’entreprise vise effectivement, compte tenu des contraintes géographiques, d’infrastructure et réglementaires<li><strong>SOM (Service Obtainable Market, marché obtenable / part de marché cible)</strong> : taille du marché que l’on peut réellement capturer au départ, même au sein du SAM, compte tenu de la concurrence, des capacités de l’entreprise, de la stratégie marketing, etc.</ul><blockquote class="prompt-tip"><p>Lorsqu’on estime la taille de marché, on cite souvent des études tierces pour donner des chiffres et indicateurs précis sur le marché total ou le marché adressable, mais — du point de vue d’une startup — on décrit ensuite le SOM (pourtant crucial) par des phrases du type : « si nous atteignons X% de part de marché, nous pouvons faire Y de chiffre d’affaires ». Honnêtement, moi aussi, dans un premier brouillon interne de support IR rédigé en préparant ma création d’entreprise, j’écrivais de cette manière.</p><p>Le problème, c’est que du point de vue d’un investisseur, un plan visant à capter X% d’un marché est difficile à croire. Lancer un service ne suffit pas pour prendre facilement des parts de marché, et annoncer vaguement qu’on atteindra X% auprès de « tous » les acteurs du marché manque de force persuasive.</p><p>En plus de montrer que la taille du marché total et du marché adressable est suffisamment grande, il est essentiel d’expliquer comment vous définissez votre <strong>marché initial (Immediate Market)</strong>, puis selon quelle logique vous élargirez progressivement les segments de clients afin d’augmenter le SOM.</p></blockquote><blockquote class="prompt-tip"><p><strong>Timing business</strong></p><ul><li>En business, le timing est aussi très important<li>Il faut pouvoir expliquer aux investisseurs pourquoi ce projet peut réussir maintenant et pourquoi il faut investir maintenant<li>Il faut présenter les raisons qui rendent ce moment propice : faisabilité technique, évolution des comportements, tendances sociétales, changements environnementaux, etc.</ul></blockquote><h3 id="description-du-produitservice-product">Description du produit/service (Product)</h3><ul><li>Quelles sont les principales caractéristiques et fonctionnalités du produit/service ?<li>Quel est le fonctionnement concret, et quels exemples peut-on donner ?</ul><h3 id="modèle-économique-business-model">Modèle économique (Business Model)</h3><ul><li>Comment allez-vous gagner de l’argent ?<li>Qui paie ? (L’utilisateur final et le client payeur ne coïncident pas toujours ; il faut donc clarifier qui génère réellement le chiffre d’affaires.)<li>Sur quoi allez-vous facturer ? Comment allez-vous fixer les prix ?</ul><h3 id="concurrence-competition">Concurrence (Competition)</h3><ul><li>Qui sont les principaux concurrents ?<li><strong>Du point de vue du client</strong>, en quoi notre service/produit est-il supérieur et quels sont ses avantages par rapport à ceux des autres ?<li>Quels services définit-on comme concurrents, et quels clients vise-t-on en priorité ?</ul><blockquote class="prompt-tip"><p>Une analyse solide des concurrents permet de montrer efficacement aux investisseurs que vous comprenez bien l’état du marché.</p></blockquote><h3 id="traction-et-stratégie-de-mise-sur-le-marché-go-to-market-strategy">Traction et stratégie de mise sur le marché (Go-to Market Strategy)</h3><ul><li>Quels sont les KPI les plus importants pour la réussite du business ?<ul><li>p. ex. nombre de commandes, utilisateurs actifs mensuels (MAU), volume mensuel de transactions, etc.</ul><li>Autour de ces KPI, quels résultats/performances avez-vous obtenus ?<li>Quels sont les principaux leviers et canaux marketing de l’entreprise ?<li>Quels sont les moyens d’acquisition de nouveaux clients, et à quel coût ?<li>*<strong>Quelle est la valeur vie client (LTV)</strong> ?</ul><blockquote class="prompt-info"><p>*<strong>Valeur vie client (Customer Lifetime Value, LTV)</strong> : quantification du profit total qu’un utilisateur apporte pendant toute la durée d’utilisation du service</p></blockquote><blockquote class="prompt-tip"><p>Il est préférable d’exclure les indicateurs secondaires autres que les KPI clés.</p></blockquote><blockquote class="prompt-tip"><p><strong>Si vous êtes une startup très early-stage sans chiffre d’affaires</strong></p><ul><li>Définir et présenter le <strong>point mort</strong> (seuil de rentabilité) du service<li>Ne pas gonfler les indicateurs de revenus : fixer des hypothèses réalistes et conservatrices<li>Présenter un scénario de revenus pour la première année de génération de CA, et ajouter un plan de ventes sur plusieurs années pour donner confiance dans une croissance régulière<ul><li>Prévision court terme (1 an)<li>Prévision moyen terme (3 ans)<li>Prévision long terme (5 ans)</ul><li>Utiliser activement graphiques et tableaux pour rendre le contenu lisible d’un coup d’œil<li>Inclure des slides de <strong>validation d’hypothèses</strong> afin d’expliquer de manière convaincante pourquoi vous avez choisi ces KPI et ces scénarios de revenus, et ainsi renforcer la crédibilité<ul><li>Il faut établir une base solide pour les scénarios de chiffre d’affaires attendus via des expériences et validations d’hypothèses répétées</ul></ul></blockquote><h3 id="équipe-the-team">Équipe (The Team)</h3><ul><li>Plutôt que de présenter tout le monde, présenter surtout les membres clés (y compris le CEO) qui portent des responsabilités essentielles<li>Mettre en avant 2 à 3 éléments de carrière/compétences, en utilisant des logos, etc., pour une meilleure lisibilité<li>S’il existe des investisseurs ou conseillers qui ont joué (ou jouent) un rôle clé, il peut être pertinent de les inclure aussi</ul><h3 id="plan-de-croissance-milestones">Plan de croissance (Milestones)</h3><ul><li>Présenter les objectifs à atteindre par période et par étape<li>En général, on fixe les objectifs jusqu’au prochain tour de financement (seed : jusqu’à la Série A ; Série A : jusqu’à la Série B)<li>Présenter le montant de l’investissement souhaité et son plan d’utilisation<li>Mieux vaut éviter des périodes trop longues (plus de 6 mois) : présenter plutôt par tranches d’environ 2 mois</ul><h3 id="plan-financier-financials">Plan financier (Financials)</h3><p>Pour un IR deck, il faut inclure le plan financier.</p><ul><li>Tableau de planification financière sur 3 à 5 ans<li><strong>Unit economics</strong> : revenus et coûts par unité client<li><strong>Burn rate</strong> : rythme de consommation de trésorerie (coûts de lancement, R&amp;D, autres dépenses) dans une entreprise jeune<li>Total des revenus et des coûts<li>EBITDA ou tableau des flux de trésorerie, etc.</ul><blockquote class="prompt-warning"><ul><li>Attention à ne pas présenter un plan financier trop irréaliste<li>Les prévisions ont souvent tendance à surestimer les revenus et sous-estimer les coûts : il faut donc être prudent lors de l’estimation du CA attendu<li>Estimer les coûts aussi précisément que possible, en tenant compte des coûts de développement produit/service et des frais d’exploitation</ul></blockquote><h2 id="points-à-mettre-en-avant-selon-létape-de-financement">Points à mettre en avant selon l’étape de financement</h2><h3 id="seed">Seed</h3><ul><li>Étape où l’on développe un MVP, observe la réaction du marché et valide la pertinence du business model<li>Mettre fortement en avant les hypothèses initiales et les résultats de validation du business model, ainsi que les résultats des tests MVP et les revenus qui en découlent</ul><h3 id="pre-a">Pre-A</h3><ul><li>Étape où l’on doit démontrer un potentiel de croissance et sécuriser des fonds supplémentaires pour le développement produit, le marketing, le recrutement, etc.<li>Expliquer quels sont les KPI clés, à quel point vous croissez via quelles activités, et quelles sont les perspectives de croissance</ul><h3 id="série-a">Série A</h3><ul><li>Étape où l’on accélère réellement la croissance et augmente la valeur de l’entreprise<li>À ce stade, la validation des hypothèses devrait être terminée : il faut gagner la confiance des investisseurs via des résultats chiffrés sur la performance</ul><h2 id="quelques-conseils">Quelques conseils</h2><ul><li>Soigner particulièrement les cinq premières slides afin de laisser une bonne première impression<li>Il peut être utile de remettre la mission/vision de la première slide une fois encore sur la dernière slide<li>Présenter tous les contenus de façon « conclusion d’abord »<li>La cible de l’investissement est <strong>l’entreprise</strong> : même dans un support IR, le nom de l’entreprise doit primer sur le nom du service<li>Les lecteurs (investisseurs potentiels) ne sont pas forcément des professionnels du secteur : expliquer autant que possible avec des termes simples, et ajouter une explication lorsque l’usage de termes techniques est inévitable<li>Ne pas mélanger problème de marché et solution : les séparer<li>Utiliser le texte surtout sous forme de mots-clés ; pour les images, éviter les captures d’écran afin d’améliorer la lisibilité<li>Indiquer des chiffres exacts et concrets via des tableaux et graphiques<li>Veiller à ne pas omettre la présentation de l’équipe, le montant souhaité et le plan d’utilisation des fonds<li>Il est recommandé de présenter aussi une stratégie de sortie (récupération de l’investissement)<li>Même si ce n’est pas parfait, présenter brièvement un plan sur la répartition du capital entre actionnaires<li>Ne pas surcharger le corps principal : si nécessaire, séparer en annexes<li>Sur la dernière slide, indiquer les coordonnées (e-mail, téléphone, nom)<li>La police est également très importante : utiliser une police lisible comme <a href="https://cactus.tistory.com/306">Pretendard</a> et préparer un PDF pour éviter tout problème d’affichage</ul><h2 id="références">Références</h2><h3 id="chaîne-de-divulgation-des-entreprises-kind">Chaîne de divulgation des entreprises 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>Chaîne de divulgation des entreprises opérée par la Bourse de Corée<li>Fournit des informations de divulgation pour les sociétés cotées sur KOSPI, KOSDAQ et KONEX<li>Permet de consulter les supports IR des sociétés cotées, utile pour analyser la structure de supports IR récemment produits</ul>]]> </content> </entry> <entry><title xml:lang="fr">Notions fondamentales de cryptographie</title><link href="https://www.yunseo.kim/fr/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-12-06T16:33:45+09:00</updated> <id>https://www.yunseo.kim/fr/posts/basic-concepts-of-cryptography/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Cryptography" /> <summary xml:lang="fr">Comprendre ce qu’est la cryptographie : chiffrement symétrique et asymétrique, principe de Kerckhoffs, primitives, échange de clés et signatures numériques.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Comprendre ce qu’est la cryptographie : chiffrement symétrique et asymétrique, principe de Kerckhoffs, primitives, échange de clés et signatures numériques.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="questce-que-la-cryptographie-">Qu’est‑ce que la cryptographie ?</h2><p><strong>La cryptographie</strong> est, au fond, une sous‑discipline scientifique dont l’objectif est de défendre les <strong>protocoles (protocols)</strong> contre des actions hostiles.</p><p>Un protocole est ici une liste d’étapes que doivent suivre une ou plusieurs personnes pour atteindre un objectif donné. Par exemple, si l’on souhaite partager le presse‑papiers entre plusieurs appareils, on peut définir le protocole suivant.</p><ol><li>Lorsqu’il y a un changement dans le presse‑papiers sur l’un des appareils, celui‑ci copie le contenu du presse‑papiers et le téléverse sur un serveur.<li>Le serveur informe les autres appareils qu’une modification a eu lieu dans le presse‑papiers partagé.<li>Les autres appareils téléchargent alors depuis le serveur ce contenu de presse‑papiers partagé.</ol><p>Cependant, ce n’est pas un bon protocole : si l’on envoie le contenu du presse‑papiers en clair vers le serveur et qu’on le télécharge aussi en clair, quelqu’un pourrait intercepter ce contenu pendant la communication, ou bien l’opérateur du serveur pourrait l’espionner. La cryptographie a précisément pour rôle de défendre contre l’existence éventuelle d’un adversaire cherchant à espionner ce contenu de presse‑papiers.</p><h2 id="cryptographie-symétrique">Cryptographie symétrique</h2><h3 id="chiffrement-symétrique">Chiffrement symétrique</h3><blockquote><p>Imaginons qu’Alice doive envoyer une lettre à Bob. Elle donne la lettre à un(e) <strong>messager·ère (messenger)</strong> pour la porter à Bob, car elle souhaite lui transmettre des informations confidentielles. Mais Alice ne fait pas totalement confiance au messager et veut que le message reste secret pour toute personne autre que Bob, y compris le messager qui transporte la lettre.</p></blockquote><p>L’algorithme cryptographique inventé il y a longtemps pour répondre à ce type de situation est précisément l’<strong>algorithme de chiffrement symétrique (symmetric encryption algorithm)</strong>.</p><blockquote class="prompt-info"><p><strong>Primitive (primitive)</strong><br /> Le mot <em>primitive</em> signifie, au sens courant, « primitif » ou « élémentaire ». En cryptographie, on utilise très souvent ce terme : une primitive désigne la plus petite unité de fonction ou d’algorithme qui sert de brique de base à un système cryptographique. On peut l’interpréter comme un « élément fondamental » ou une « logique de base ».</p></blockquote><p>Considérons une primitive qui fournit les deux fonctions suivantes.</p><ul><li><code class="language-plaintext highlighter-rouge">ENCRYPT</code> : prend en entrée une <strong>clé secrète (secret key)</strong> (en général un grand nombre) et un <strong>message (message)</strong>, et produit en sortie une suite de chiffres, à savoir le message chiffré ;<li><code class="language-plaintext highlighter-rouge">DECRYPT</code> : fonction réciproque de <code class="language-plaintext highlighter-rouge">ENCRYPT</code>, qui prend en entrée la même clé secrète et le message chiffré, puis restitue le message original.</ul><p>Pour empêcher le messager, ou tout autre tiers, de lire le message d’Alice à l’aide d’une telle primitive, Alice et Bob doivent d’abord se rencontrer à l’avance et convenir de la clé secrète à utiliser. Ensuite, Alice peut chiffrer son message avec la clé convenue à l’aide de la fonction <code class="language-plaintext highlighter-rouge">ENCRYPT</code>, puis transmettre ce message chiffré à Bob par l’intermédiaire du messager. Bob, de son côté, utilise la même clé secrète avec la fonction <code class="language-plaintext highlighter-rouge">DECRYPT</code> pour retrouver le message original.</p><p>Ce processus consistant à chiffrer des données à l’aide d’une clé secrète, de sorte qu’elles soient indiscernables d’un bruit aléatoire, est en cryptographie la méthode générale pour protéger un protocole.</p><p>Le chiffrement symétrique appartient à une catégorie plus large d’algorithmes cryptographiques appelée <strong>cryptographie symétrique (symmetric cryptography)</strong> ou <strong>cryptographie à clé secrète (secret key cryptography)</strong>, et il peut, selon les cas, faire intervenir plus d’une clé.</p><h2 id="principe-de-kerckhoffs">Principe de Kerckhoffs</h2><p>Aujourd’hui, nous disposons de moyens de communication bien plus puissants que la lettre papier, à savoir l’ordinateur et Internet, qui nous permettent d’échanger presque en temps réel. Mais cela signifie aussi, en contrepartie, que les messagers malveillants sont eux aussi devenus plus puissants. Il peut s’agir d’un Wi‑Fi public non sécurisé dans un café, d’un fournisseur d’accès à Internet (FAI), de divers équipements réseau ou serveurs assurant le transit des messages, d’agences gouvernementales, voire même d’éléments présents sur l’appareil exécutant l’algorithme. Les adversaires peuvent observer un très grand nombre de messages en temps réel, les modifier ou les intercepter au niveau de la nanoseconde sans qu’on s’en aperçoive, voire les censurer.</p><p>L’expérience accumulée au fil du temps en cryptographie a conduit à un principe général pour obtenir une sécurité fiable : <u>les primitives doivent être analysées publiquement</u>. La méthode opposée est appelée <strong>sécurité par l’obscurité (security by obscurity)</strong>, dont les limites sont claires ; elle est aujourd’hui largement abandonnée.</p><p>Ce principe général a été formulé pour la première fois en 11883 par le linguiste et cryptologue néerlandais <strong>Auguste Kerckhoffs</strong>, et est connu sous le nom de <strong>principe de Kerckhoffs (Kerckhoffs’s principle)</strong>. Le mathématicien, informaticien et cryptologue américain <strong>Claude Shannon</strong>, également considéré comme le père de la théorie de l’information, a exprimé le même principe par la formule « <em>The enemy knows the system</em> » (« l’ennemi connaît le système »), c’est‑à‑dire : « lorsqu’on conçoit un système, il faut supposer que l’ennemi finira par le connaître ». Cette formulation est connue sous le nom d’<strong>adage de Shannon (Shannon’s maxim)</strong>.</p><p>La sécurité d’un système cryptographique doit reposer uniquement sur le secret de la clé ; le système lui‑même peut être rendu public sans que cela pose problème, et devrait même l’être, pour que de nombreux <strong>cryptanalystes (cryptanalysts)</strong> puissent l’examiner, comme dans le cas d’AES. Toute chose secrète est par nature susceptible de fuiter et constitue donc un point potentiel de défaillance ; plus la partie à garder secrète est petite, plus la position du défenseur est avantageuse. Il est extrêmement difficile de garder longtemps secret l’ensemble d’un système cryptographique complexe, alors qu’il est relativement facile de ne garder secrète que la clé. De plus, même en cas de fuite, il est bien plus simple de remplacer une clé compromise que de changer tout le système cryptographique.</p><h2 id="cryptographie-asymétrique">Cryptographie asymétrique</h2><p>De nombreux protocoles fonctionnent en pratique sur la base de la cryptographie symétrique, mais une telle approche suppose qu’au moins une fois au départ, les deux participants se rencontrent pour fixer la clé à utiliser. La question devient alors de savoir comment décider de la clé et la partager de manière sûre au préalable : c’est ce que l’on appelle le problème de la <strong>distribution des clés (key distribution)</strong>. Ce problème est resté longtemps un défi majeur, jusqu’à ce qu’il soit finalement résolu à la fin des années 11970 avec le développement d’algorithmes appelés <strong>cryptographie asymétrique (asymmetric cryptography)</strong> ou <strong>cryptographie à clé publique (public key cryptography)</strong>.</p><p>Les primitives les plus représentatives de la cryptographie asymétrique sont l’<strong>échange de clés (key exchange)</strong>, le <strong>chiffrement asymétrique (asymmetric encryption)</strong> et la <strong>signature numérique (digital signature)</strong>.</p><h3 id="échange-de-clés">Échange de clés</h3><p>L’<strong>échange de clés</strong> fonctionne, schématiquement, de la manière suivante.</p><ol><li>Alice et Bob conviennent d’utiliser en commun un certain ensemble de paramètres $G$ ;<li>Alice et Bob choisissent chacun une <strong>clé privée (private key)</strong>, respectivement $a$ et $b$ ;<li>À partir des paramètres communs $G$ et de leurs clés privées $a$ et $b$, ils calculent leurs <strong>clés publiques (public keys)</strong> $A = f(G,a)$ et $B = f(G,b)$, puis les publient ;<li>Alice utilise la clé publique de Bob $B = f(G,b)$ et sa propre clé privée $a$ pour calculer $f(B,a) = f(f(G,b),a)$, tandis que Bob fait de même avec la clé publique d’Alice $A = f(G,a)$ et sa clé privée $b$ pour calculer $f(A,b) = f(f(G,a),b)$ ;<li>Si l’on choisit une fonction $f$ telle que $f(f(G,a),b) = f(f(G,b),a)$, Alice et Bob partagent au final le même secret, alors qu’un tiers, qui ne connaît que $G$ ainsi que les clés publiques $A = f(G,a)$ et $B = f(G,b)$, ne peut pas en déduire $f(A,b)$ : le secret reste donc préservé.</ol><p>En général, le secret ainsi partagé est utilisé comme clé secrète pour un <a href="#chiffrement-symétrique">chiffrement symétrique</a>, ce qui permet ensuite d’échanger d’autres messages en s’appuyant sur la cryptographie symétrique.</p><p>Le premier algorithme d’échange de clés publié, et le plus emblématique, est l’algorithme d’échange de clés de Diffie‑Hellman, nommé d’après ses auteurs Whitfield <strong>Diffie</strong> et Martin <strong>Hellman</strong>.</p><p>L’échange de clés Diffie‑Hellman a toutefois ses limites. Imaginons qu’un attaquant intercepte les clés publiques $A = f(G,a)$ et $B = f(G,b)$ lors de leur échange et les remplace par sa propre clé publique $M = f(G,m)$, qu’il envoie ensuite à Alice et à Bob. Dans ce cas, Alice et l’attaquant partagent un faux secret $f(M, a) = f(A, m)$, tandis que Bob et l’attaquant partagent un autre faux secret $f(M, b) = f(B, m)$. L’attaquant peut alors se faire passer pour Bob auprès d’Alice, et pour Alice auprès de Bob. On dit alors qu’<u><strong>un homme du milieu (man‑in‑the‑middle, MITM)</strong> a réussi à attaquer le protocole</u>. Ainsi, l’échange de clés ne résout pas le problème de la confiance, même s’il simplifie considérablement les procédures lorsque les participants sont nombreux.</p><h3 id="chiffrement-asymétrique">Chiffrement asymétrique</h3><p>Peu de temps après l’invention de l’échange de clés Diffie‑Hellman, une autre avancée majeure a eu lieu : l’algorithme <strong>RSA (RSA algorithm)</strong>, nommé d’après ses inventeurs <strong>Ronald Rivest</strong>, <strong>Adi Shamir</strong> et <strong>Leonard Adleman</strong>. RSA fournit deux primitives : le chiffrement à clé publique (chiffrement asymétrique) et la signature numérique ; toutes deux relèvent de la cryptographie asymétrique.</p><p>Dans le cas du <strong>chiffrement asymétrique</strong>, l’objectif principal — chiffrer un message pour en assurer la confidentialité — est similaire à celui du <a href="#chiffrement-symétrique">chiffrement symétrique</a>. Toutefois, contrairement au chiffrement symétrique, qui utilise une même clé pour chiffrer et déchiffrer, le chiffrement asymétrique présente les caractéristiques suivantes.</p><ul><li>Il fonctionne avec deux clés : une clé publique et une clé privée ;<li>Tout le monde peut chiffrer à l’aide de la clé publique, mais seul le détenteur de la clé privée peut déchiffrer.</ul><p>On peut l’illustrer ainsi :</p><ol><li>Il existe une boîte ouverte (la clé publique) dans laquelle n’importe qui peut déposer un message avant de la fermer ; une fois fermée, seule la clé (la clé privée) détenue par Bob permet de l’ouvrir ;<li>Alice place le message qu’elle veut envoyer dans la boîte, la ferme (elle chiffre le message), puis la transmet à Bob ;<li>Bob reçoit la boîte fermée (le message chiffré) et utilise sa clé (sa clé privée) pour l’ouvrir et en extraire le message (le déchiffrer).</ol><h3 id="signature-numérique">Signature numérique</h3><p>RSA ne fournit pas seulement le chiffrement asymétrique, mais aussi la <strong>signature numérique</strong> ; cette primitive de signature a considérablement facilité l’établissement de la confiance entre Alice et Bob. Pour signer un message, on utilise sa propre clé privée ; pour vérifier l’authenticité d’une signature, un tiers utilise le message signé, la signature et la clé publique du signataire.</p><h2 id="utilité-de-la-cryptographie">Utilité de la cryptographie</h2><p>L’objectif de la cryptographie est de protéger les protocoles contre des actions hostiles ; l’utilité de la cryptographie dépend donc des objectifs de ces protocoles. La plupart des primitives et protocoles cryptographiques visent à assurer une ou plusieurs des propriétés suivantes.</p><ul><li><strong>Confidentialité (confidentiality)</strong> : masquer et protéger certaines informations contre les personnes qui ne devraient pas y avoir accès ;<li><strong>Authentification (authentication)</strong> : identifier son interlocuteur (par exemple vérifier que le message reçu provient bien d’Alice).</ul><h2 id="écosystème-de-la-cryptographie">Écosystème de la cryptographie</h2><pre><code class="language-mermaid">flowchart TD
    Alice[Chercheuse en cryptographie]-- invente une primitive --&gt;Primitive(Nouvelle primitive proposée)
    Alice-- invente un protocole --&gt;Protocol(Nouveau protocole proposé)
    Alice-. organise un concours .-&gt;C(Concours d’algorithmes)

    David[Industrie privée]-. finance .-&gt;Alice
    David-. organise un concours .-&gt;C

    Eve[Agence gouvernementale]-. finance .-&gt;Alice
    Eve-. organise un concours .-&gt;C

    Primitive --&gt; t1{"Est‑ce implémentable ?"}
    t1-- Oui --&gt;Protocol
    t1-- Non --&gt;term1@{ shape: framed-circle, label: "Arrêt" }

    Protocol-- participe au concours --&gt;C
    Protocol-- normalisation --&gt;Standard(Norme)
    Protocol-- dépôt de brevet --&gt;Patent(Expiration du brevet)
    Protocol-- implémentation --&gt;Library(Bibliothèque)
    
    C-- gagne le concours --&gt;Standard
    C-- obsolescence --&gt;term2@{ shape: framed-circle, label: "Arrêt" }

    Standard-- implémentation --&gt;Library
    Standard-- obsolescence --&gt;term3@{ shape: framed-circle, label: "Arrêt" }

    Patent-- obsolescence --&gt;term2@{ shape: framed-circle, label: "Arrêt" }
    Patent-- normalisation --&gt;Standard
    Patent-- implémentation --&gt;Library

    Library-- normalisation --&gt;Standard
    Library-- compromis de sécurité --&gt;term4@{ shape: framed-circle, label: "Arrêt" }
</code></pre>]]> </content> </entry> <entry><title xml:lang="fr">Transformation linéaire, noyau et image</title><link href="https://www.yunseo.kim/fr/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/fr/posts/linear-transformation-nullspace-and-image/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="fr">Définition des transformations linéaires, avec noyau et image. Nullité et rang, théorème de la dimension (rang‑nullité), liens avec injection/surjection et rôle des bases.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Définition des transformations linéaires, avec noyau et image. Nullité et rang, théorème de la dimension (rang‑nullité), liens avec injection/surjection et rôle des bases.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="prérequis">Prérequis</h2><ul><li><a href="/fr/posts/vectors-and-linear-combinations/">Vecteurs et combinaisons linéaires</a><li><a href="/fr/posts/vector-spaces-subspaces-and-matrices/">Espaces vectoriels, sous-espaces et matrices</a><li><a href="posts/linear-dependence-and-independence-basis-and-dimension/">Dépendance et indépendance linéaires, base et dimension</a><li>Injection, surjection</ul><h2 id="transformation-linéaire">Transformation linéaire</h2><p>Une fonction particulière qui préserve la structure d’un espace vectoriel est appelée <strong>transformation linéaire (linear transformation)</strong>; c’est une notion fondamentale qui apparaît très fréquemment en mathématiques pures et appliquées, en sciences sociales et naturelles, ainsi qu’en ingénierie.</p><blockquote class="prompt-info"><p><strong>Définition</strong><br /> Soient $\mathbb{V}$ et $\mathbb{W}$ des $F$‑espaces vectoriels. On appelle <strong>transformation linéaire (linear transformation)</strong> de $\mathbb{V}$ vers $\mathbb{W}$ toute application $T: \mathbb{V} \to \mathbb{W}$ qui satisfait, pour tous $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ et $c \in F$, les deux conditions:</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>Dire que $T$ est une transformation linéaire se résume souvent à dire que $T$ est <strong>linéaire</strong>. Une transformation linéaire $T: \mathbb{V} \to \mathbb{W}$ vérifie les quatre propriétés suivantes.</p><blockquote class="prompt-info"><ol><li>$T$ linéaire $\quad \Rightarrow \quad $ $T(\mathbf{0}) = \mathbf{0}$<li>$T$ linéaire $\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$ linéaire $\quad \Rightarrow \quad $ $T(\mathbf{x} - \mathbf{y}) = T(\mathbf{x}) - T(\mathbf{y}) \; \forall \, \mathbf{x}, \mathbf{y} \in \mathbb{V}$<li>$T$ linéaire $\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>Pour montrer qu’une application est linéaire, il est en pratique commode d’utiliser la propriété 2.</p></blockquote><blockquote class="prompt-tip"><p>L’algèbre linéaire a d’amples applications en géométrie car de nombreuses transformations géométriques importantes sont linéaires. En particulier, les trois transformations clés que sont la <strong>rotation</strong>, la <strong>symétrie</strong> et la <strong>projection</strong> sont linéaires.</p></blockquote><p>Deux transformations linéaires apparaissent tout particulièrement souvent.</p><blockquote class="prompt-info"><p><strong>Transformation identité et transformation nulle</strong><br /> Pour des $F$‑espaces vectoriels $\mathbb{V}, \mathbb{W}$:</p><ul><li><strong>Transformation identité (identity transformation)</strong>: l’application $I_\mathbb{V}: \mathbb{V} \to \mathbb{V}$ définie par $I_\mathbb{V}(\mathbf{x}) = \mathbf{x}$ pour tout $\mathbf{x} \in \mathbb{V}$<li><strong>Transformation nulle (zero transformation)</strong>: l’application $T_0: \mathbb{V} \to \mathbb{W}$ définie par $T_0(\mathbf{x}) = \mathbf{0}$ pour tout $\mathbf{x} \in \mathbb{V}$</ul></blockquote><p>Bien d’autres notions entrent dans le cadre des transformations linéaires.</p><blockquote class="prompt-tip"><p><strong>Exemples de transformations linéaires</strong></p><ul><li>Rotation<li>Symétrie<li>Projection<li><a href="/fr/posts/vector-spaces-subspaces-and-matrices/#matrice-transposée-matrice-symétrique-matrice-antisymétrique">Matrice transposée</a><li>Dérivation d’une fonction différentiable<li>Intégration d’une fonction continue</ul></blockquote><h2 id="noyau-et-image">Noyau et image</h2><h3 id="définition-noyau-et-image">Définition: noyau et image</h3><blockquote class="prompt-info"><p><strong>Définition</strong><br /> Pour des espaces vectoriels $\mathbb{V}, \mathbb{W}$ et une transformation linéaire $T: \mathbb{V} \to \mathbb{W}$:</p><ul><li><p><strong>Noyau (kernel)</strong>: l’ensemble des $\mathbf{x} \in \mathbb{V}$ tels que $T(\mathbf{x}) = \mathbf{0}$, noté $\mathrm{N}(T)$</p>\[\mathrm{N}(T) = \{ \mathbf{x} \in \mathbb{V}: T(\mathbf{x}) = \mathbf{0} \}\]<li><p><strong>Image (range)</strong>: le sous-ensemble de $\mathbb{W}$ constitué des valeurs de $T$, noté $\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> Pour des espaces vectoriels $\mathbb{V}, \mathbb{W}$, l’identité $I: \mathbb{V} \to \mathbb{V}$ et la transformation nulle $T_0: \mathbb{V} \to \mathbb{W}$, on a:</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>Point clé pour la suite: le noyau et l’image d’une transformation linéaire sont des <a href="/fr/posts/vector-spaces-subspaces-and-matrices/#sous-espace">sous-espaces</a>.</p><blockquote class="prompt-info"><p><strong>Théorème 1</strong><br /> Pour des espaces vectoriels $\mathbb{V}, \mathbb{W}$ et une transformation linéaire $T: \mathbb{V} \to \mathbb{W}$, $\mathrm{N}(T)$ et $\mathrm{R}(T)$ sont des sous-espaces de $\mathbb{V}$ et $\mathbb{W}$ respectivement.</p><p><strong>Preuve</strong><br /> Notons $\mathbf{0}_\mathbb{V}, \mathbf{0}_\mathbb{W}$ les vecteurs nuls de $\mathbb{V}, \mathbb{W}$.</p><p>Comme $T(\mathbf{0}_\mathbb{V}) = \mathbf{0}_\mathbb{W}$, on a $\mathbf{0}_\mathbb{V} \in \mathrm{N}(T)$. De plus, pour $\mathbf{x}, \mathbf{y} \in \mathrm{N}(T)$ et $c \in F$:</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="/fr/posts/vector-spaces-subspaces-and-matrices/#sous-espace">Puisque $\mathbf{0}_\mathbb{V} \in \mathrm{N}(T)$, $\mathbf{x} + \mathbf{y} \in \mathrm{N}(T)$ et $c\mathbf{x} \in \mathrm{N}(T)$, $\mathrm{N}(T)$ est un sous-espace de $\mathbb{V}$</a>.</p><p>De même, $T(\mathbf{0}_\mathbb{V}) = \mathbf{0}_\mathbb{W}$ implique $\mathbf{0}_\mathbb{W} \in \mathrm{R}(T)$, et comme $\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}))$, on a</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="/fr/posts/vector-spaces-subspaces-and-matrices/#sous-espace">Puisque $\mathbf{0}_\mathbb{W} \in \mathrm{R}(T)$, $\mathbf{x} + \mathbf{y} \in \mathrm{R}(T)$ et $c\mathbf{x} \in \mathrm{R}(T)$, $\mathrm{R}(T)$ est un sous-espace de $\mathbb{W}$</a>. $\blacksquare$</p></blockquote><p>D’autre part, si l’on connaît une <a href="/fr/posts/linear-dependence-and-independence-basis-and-dimension/#base">base</a> $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ de $\mathbb{V}$, on peut obtenir un <a href="/fr/posts/vectors-and-linear-combinations/#engendrement">ensemble générateur</a> de l’image $\mathrm{R}(T)$ comme suit.</p><blockquote class="prompt-info"><p><strong>Théorème 2</strong><br /> Pour des espaces vectoriels $\mathbb{V}, \mathbb{W}$, une transformation linéaire $T: \mathbb{V} \to \mathbb{W}$ et une <a href="/fr/posts/linear-dependence-and-independence-basis-and-dimension/#base">base</a> $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ de $\mathbb{V}$, on a:</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>Preuve</strong></p>\[T(\mathbf{v}_i) \in \mathrm{R}(T) \quad \forall \mathbf{v}_i \in \beta.\]<p>Comme $\mathrm{R}(T)$ est un sous-espace, par le <strong>Théorème 2</strong> de <a href="/fr/posts/vector-spaces-subspaces-and-matrices/#sous-espace">Espaces vectoriels, sous-espaces et matrices</a>,</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>De plus,</p>\[\forall \mathbf{w} \in \mathrm{R}(T) \ (\exists \mathbf{v} \in \mathbb{V} \ (\mathbf{w} = T(\mathbf{v}))).\]<p>Puisque $\beta$ est une base de $\mathbb{V}$,</p>\[\mathbf{v} = \sum_{i=1}^n a_i \mathbf{v}_i \quad \text{(où } a_1, a_2, \dots, a_n \in F \text{)}.\]<p>$T$ étant linéaire,</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$ Comme à la fois $\mathrm{R}(T) \supseteq \mathrm{span}({T(\mathbf{v}_i): \mathbf{v}_i \in \beta })$ et $\mathrm{R}(T) \subseteq \mathrm{span}({T(\mathbf{v}_i): \mathbf{v}_i \in \beta })$, on a $\mathrm{R}(T) = \mathrm{span}({T(\mathbf{v}): \mathbf{v} \in \beta })$. $\blacksquare$</p></blockquote><p>Ce théorème reste valable lorsque la base $\beta$ est infinie.</p><h3 id="théorème-de-la-dimension">Théorème de la dimension</h3><p>Le noyau et l’image étant des sous‑espaces particulièrement importants, on nomme également leurs <a href="/fr/posts/linear-dependence-and-independence-basis-and-dimension/#dimension">dimensions</a>.</p><blockquote class="prompt-info"><p>Pour des espaces vectoriels $\mathbb{V}, \mathbb{W}$ et une transformation linéaire $T: \mathbb{V} \to \mathbb{W}$, supposons $\mathrm{N}(T), \mathrm{R}(T)$ de dimension finie.</p><ul><li><strong>Nullité (nullity)</strong>: la dimension de $\mathrm{N}(T)$, notée $\mathrm{nullity}(T)$<li><strong>Rang (rank)</strong>: la dimension de $\mathrm{R}(T)$, notée $\mathrm{rank}(T)$</ul></blockquote><p>Pour une transformation linéaire, plus la nullité est grande, plus le rang est petit, et réciproquement.</p><blockquote class="prompt-info"><p><strong>Théorème 3: théorème de la dimension (dimension theorem)</strong><br /> Pour des espaces vectoriels $\mathbb{V}, \mathbb{W}$ et $T: \mathbb{V}\to \mathbb{W}$, si $\mathbb{V}$ est de dimension finie, alors</p>\[\mathrm{nullity}(T) + \mathrm{rank}(T) = \dim(\mathbb{V})\]</blockquote><h4 id="preuve">Preuve</h4><p>Soient $\dim(\mathbb{V}) = n$, $\mathrm{nullity}(T) = \dim(\mathrm{N}(T)) = k$, et soit une base de $\mathrm{N}(T)$ donnée par $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \}$.</p><p>D’après le <strong>Corollaire 6-1</strong> de <a href="/fr/posts/linear-dependence-and-independence-basis-and-dimension/#dimension-d-un-sous-espace">« Dépendance et indépendance linéaires, base et dimension »</a>, on peut étendre $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \}$ en une base $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ de $\mathbb{V}$.</p><p>Montrons maintenant que $S = \{T(\mathbf{v}_{k+1}), T(\mathbf{v}_{k+2}), \dots, T(\mathbf{v}_n) \}$ est une base de $\mathrm{R}(T)$. D’abord, pour $1 \leq i \leq k$, $T(\mathbf{v}_i) = 0$, donc, par le <a href="#définition-noyau-et-image"><strong>Théorème 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>Autrement dit, $S$ engendre $\mathrm{R}(T)$. Par le <a href="/fr/posts/linear-dependence-and-independence-basis-and-dimension/#dimension"><strong>Corollaire 5-2 du théorème du remplacement</strong></a>, il suffit de montrer que $S$ est libre pour conclure que $S$ est une base de $\mathrm{R}(T)$.</p><p>Si $\sum_{i=k+1}^n b_i T(\mathbf{v}_i) = 0$ (avec $b_{k+1}, b_{k+2}, \dots, b_n \in F$), la linéarité de $T$ donne</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>Donc</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>Comme $\beta$ est une base de $\mathbb{V}$, l’unique solution de $\sum_{i=1}^k (-c_i)\mathbf{v}_i + \sum_{i=k+1}^n b_i \mathbf{v}_i = 0$ est</p>\[c_1 = c_2 = \cdots = c_k = b_{k+1} = b_{k+2} = \cdots = b_n = 0\]<p>d’où</p>\[\sum_{i=k+1}^n b_i T(\mathbf{v}_i) = 0 \quad \Rightarrow \quad b_i = 0.\]<p>Ainsi, $S$ est libre et c’est une base de $\mathrm{R}(T)$.</p>\[\therefore \mathrm{rank}(T) = n - k = \dim{\mathbb{V}} - \mathrm{nullity}(T). \blacksquare\]<h3 id="transformations-linéaires-injections-et-surjections">Transformations linéaires, injections et surjections</h3><p>Pour les transformations linéaires, injection et surjection sont étroitement liées au rang et à la nullité.</p><blockquote class="prompt-info"><p><strong>Théorème 4</strong><br /> Pour des espaces vectoriels $\mathbb{V}, \mathbb{W}$ et une transformation linéaire $T: \mathbb{V} \to \mathbb{W}$,</p>\[T \text{ est injective } \quad \Leftrightarrow \quad \mathrm{N}(T) = \{\mathbf{0}\}.\]</blockquote><blockquote class="prompt-info"><p><strong>Théorème 5</strong><br /> Si des espaces vectoriels $\mathbb{V}, \mathbb{W}$ de dimension finie ont même dimension, alors, pour $T: \mathbb{V} \to \mathbb{W}$, les quatre propositions suivantes sont équivalentes.</p><ol><li>$T$ est injective.<li>$\mathrm{nullity}(T) = 0$<li>$\mathrm{rank}(T) = \dim(\mathbb{V})$<li>$T$ est surjective.</ol></blockquote><p>On peut démontrer les <strong>Théorèmes 4</strong> et <strong>5</strong> en utilisant le <a href="#théorème-de-la-dimension">théorème de la dimension</a>, les <a href="#transformation-linéaire">propriétés 1 et 3 des transformations linéaires</a>, ainsi que le <strong>Théorème 6</strong> de <a href="/fr/posts/linear-dependence-and-independence-basis-and-dimension/#dimension-d-un-sous-espace">« Dépendance et indépendance linéaires, base et dimension »</a>.</p><p>Ces deux résultats sont utiles pour déterminer si une transformation linéaire donnée est injective ou surjective.</p><blockquote class="prompt-warning"><p>Pour un espace vectoriel $\mathbb{V}$ de dimension infinie et une transformation linéaire $T: \mathbb{V} \to \mathbb{V}$, injectivité et surjectivité ne sont pas équivalentes.</p></blockquote><p>Si une transformation linéaire est injective, le théorème suivant peut être utile, selon les cas, pour décider si un sous-ensemble donné est linéairement indépendant.</p><blockquote class="prompt-info"><p><strong>Théorème 6</strong><br /> Pour des espaces vectoriels $\mathbb{V}, \mathbb{W}$, une transformation linéaire injective $T: \mathbb{V} \to \mathbb{W}$, et un sous-ensemble $S \subseteq \mathbb{V}$, on a</p>\[S \text{ est linéairement indépendant } \quad \Leftrightarrow \quad \{T(\mathbf{v}): \mathbf{v} \in S \}\text{ est linéairement indépendant.}\]</blockquote><h2 id="transformations-linéaires-et-bases">Transformations linéaires et bases</h2><p>Un point crucial: l’action d’une transformation linéaire est entièrement déterminée par ses valeurs sur une base.</p><blockquote class="prompt-info"><p><strong>Théorème 7</strong><br /> Pour des $F$‑espaces vectoriels $\mathbb{V}, \mathbb{W}$, une base $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ de $\mathbb{V}$ et des vecteurs $\mathbf{w}_1, \mathbf{w}_2, \dots, \mathbf{w}_n \in \mathbb{W}$, il existe une unique transformation linéaire $T: \mathbb{V} \to \mathbb{W}$ telle que</p>\[i = 1, 2, \dots, n \text{, } T(\mathbf{v}_i) = \mathbf{w}_i\]<p><strong>Preuve</strong><br /> Pour $\mathbf{x} \in \mathbb{V}$, la décomposition en combinaison linéaire par rapport à la base est unique:</p>\[\mathbf{x} = \sum_{i=1}^n a_i \mathbf{v}_i \text{ (}a_1, a_2, \dots, a_n \in F \text{)}\]<p>Définissons $T: \mathbb{V} \to \mathbb{W}$ par</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>Alors:</p><p>i) pour $i = 1, 2, \dots, n$, $T(\mathbf{v}_i) = \mathbf{w}_i$;</p><p>ii) si une autre transformation linéaire $U: \mathbb{V} \to \mathbb{W}$ vérifie $U(\mathbf{v}_i) = \mathbf{w}_i$ pour $i = 1, 2, \dots, n$, alors, pour $\mathbf{x} = \sum_{i=1}^n a_i \mathbf{v}_i \in \mathbb{V}$,</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>Par i) et ii), la transformation linéaire vérifiant $T(\mathbf{v}_i) = \mathbf{w}_i$ pour $i = 1, 2, \dots, n$ est</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>et elle est unique. $\blacksquare$</p><p><strong>Corollaire 7-1</strong><br /> Pour deux espaces vectoriels $\mathbb{V}, \mathbb{W}$, si $\mathbb{V}$ possède une base finie $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$, alors, pour deux transformations linéaires $U, T: \mathbb{V} \to \mathbf{W}$, si $U(\mathbf{v}_i) = T(\mathbf{v}_i)$ pour $i = 1, 2, \dots, n$, on a $U = T$.<br /> Autrement dit, <u>si deux transformations coïncident sur une base, elles sont égales</u>.</p></blockquote>]]> </content> </entry> <entry><title xml:lang="fr">Dépendance et indépendance linéaires, base et dimension</title><link href="https://www.yunseo.kim/fr/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-10-25T21:21:39+09:00</updated> <id>https://www.yunseo.kim/fr/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="fr">Synthèse claire de la dépendance/indépendance linéaires, des bases et de la dimension des espaces vectoriels, avec définitions, théorèmes et corollaires clés.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Synthèse claire de la dépendance/indépendance linéaires, des bases et de la dimension des espaces vectoriels, avec définitions, théorèmes et corollaires clés.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="prérequis">Prérequis</h2><ul><li><a href="/fr/posts/vectors-and-linear-combinations/">Vecteurs et combinaisons linéaires</a><li><a href="/fr/posts/vector-spaces-subspaces-and-matrices/">Espaces vectoriels, sous-espaces et matrices</a></ul><h2 id="dépendance-linéaire-et-indépendance-linéaire">Dépendance linéaire et indépendance linéaire</h2><p>Pour un <a href="/fr/posts/vector-spaces-subspaces-and-matrices/#espace-vectoriel">espace vectoriel</a> $\mathbb{V}$ et un <a href="/fr/posts/vector-spaces-subspaces-and-matrices/#sous-espace">sous-espace</a> $\mathbb{W}$, supposons que l’on veuille trouver le plus petit sous-ensemble fini $S$ qui <a href="/fr/posts/vectors-and-linear-combinations/#combinaison-linéaire-cmathbfv--dmathbfw">engendre</a> $\mathbb{W}$.</p><p>Étant donné $S = \{\mathbf{u}_1, \mathbf{u}_2, \mathbf{u}_3, \mathbf{u}_4 \}$ avec $\mathrm{span}(S) = \mathbb{W}$, comment déterminer s’il n’existe pas de sous-ensemble strict de $S$ qui engendre encore $\mathbb{W}$ ? Cela revient à décider si un vecteur extrait de $S$ peut s’écrire comme <a href="/fr/posts/vectors-and-linear-combinations/#combinaison-linéaire-cmathbfv--dmathbfw">combinaison linéaire</a> des autres. Par exemple, une condition nécessaire et suffisante pour exprimer $\mathbf{u}_4$ comme combinaison linéaire des trois autres est l’existence de scalaires $a_1, a_2, a_3$ satisfaisant</p>\[\mathbf{u}_4 = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + a_3\mathbf{u}_3\]<p>Or, il est fastidieux de monter à chaque fois un système linéaire pour chacun des quatre vecteurs $\mathbf{u}_1, \mathbf{u}_2, \mathbf{u}_3, \mathbf{u}_4$. Modifions légèrement l’approche:</p>\[a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + a_3\mathbf{u}_3 + a_4\mathbf{u}_4 = \mathbf{0}\]<p>Si l’un des vecteurs de $S$ est combinaison linéaire des autres, alors il existe une écriture du vecteur nul comme combinaison linéaire des éléments de $S$ où au moins un des coefficients $a_1, a_2, a_3, a_4$ est non nul. La réciproque est vraie: s’il existe une écriture de $\mathbf{0}$ comme combinaison linéaire des vecteurs de $S$ avec au moins un coefficient non nul, alors l’un des vecteurs de $S$ est combinaison linéaire des autres.</p><p>Généralisons et définissons ainsi la <strong>dépendance linéaire</strong> et l’<strong>indépendance linéaire</strong>.</p><blockquote class="prompt-info"><p><strong>Définition</strong><br /> Pour un sous-ensemble $S$ d’un espace vectoriel $\mathbb{V}$, s’il existe un nombre fini de vecteurs deux à deux distincts $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \in S$ et des scalaires $a_1, a_2, \dots, a_n$, pas tous nuls, tels que $a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n = \mathbf{0}$, alors l’ensemble $S$ (et ces vecteurs) est dit <strong>linéairement dépendant (linearly dependent)</strong>. Dans le cas contraire, il est dit <strong>linéairement indépendant (linearly independent)</strong>.</p></blockquote><p>Pour des vecteurs arbitraires $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$, on a $a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n = \mathbf{0}$ lorsque $a_1 = a_2 = \cdots = a_n = 0$; c’est la <strong>représentation triviale du vecteur nul (trivial representation of $\mathbf{0}$)</strong>.</p><p>Les trois propositions suivantes sont toujours vraies dans tout espace vectoriel. En particulier, la <strong>Proposition 3</strong> est très utile pour décider si un ensemble fini est linéairement indépendant.</p><blockquote class="prompt-info"><ul><li><strong>Proposition 1</strong>: L’ensemble vide est linéairement indépendant. Pour qu’un ensemble soit linéairement dépendant, il ne doit pas être vide.<li><strong>Proposition 2</strong>: Un ensemble constitué d’un seul vecteur non nul est linéairement indépendant.<li><strong>Proposition 3</strong>: Un ensemble est linéairement indépendant si et seulement si la seule combinaison linéaire qui donne $\mathbf{0}$ est la représentation triviale.</ul></blockquote><p>On aura également besoin des résultats suivants.</p><blockquote class="prompt-info"><p><strong>Théorème 1</strong><br /> Si $\mathbb{V}$ est un espace vectoriel et $S_1 \subseteq S_2 \subseteq \mathbb{V}$, alors $S_1$ linéairement dépendant implique $S_2$ linéairement dépendant.</p><p><strong>Corollaire 1-1</strong><br /> Si $\mathbb{V}$ est un espace vectoriel et $S_1 \subseteq S_2 \subseteq \mathbb{V}$, alors $S_2$ linéairement indépendant implique $S_1$ linéairement indépendant.</p></blockquote><blockquote class="prompt-info"><p><strong>Théorème 2</strong><br /> Soient un espace vectoriel $\mathbb{V}$ et un sous-ensemble $S$ linéairement indépendant. Pour un vecteur $\mathbf{v} \in \mathbb{V}$ qui n’appartient pas à $S$, une condition nécessaire et suffisante pour que $S \cup \{\mathbf{v}\}$ soit linéairement dépendant est que $\mathbf{v} \in \mathrm{span}(S)$.</p><p>En d’autres termes, <strong>si aucun sous-ensemble strict de $S$ n’engendre le même espace que $S$, alors $S$ est linéairement indépendant.</strong></p></blockquote><h2 id="base-et-dimension">Base et dimension</h2><h3 id="base">Base</h3><p>Un ensemble générateur $S$ de $\mathbb{W}$ qui est <a href="#dépendance-linéaire-et-indépendance-linéaire">linéairement indépendant</a> possède une propriété remarquable: tout vecteur de $\mathbb{W}$ s’écrit nécessairement comme combinaison linéaire des vecteurs de $S$, et cette écriture est unique (<strong>Théorème 3</strong>). Ainsi, on appelle <strong>base (basis)</strong> d’un espace vectoriel tout ensemble générateur linéairement indépendant.</p><blockquote class="prompt-info"><p><strong>Définition d’une base</strong><br /> Pour un espace vectoriel $\mathbb{V}$ et un sous-ensemble $\beta$, si $\beta$ est linéairement indépendant et engendre $\mathbb{V}$, alors $\beta$ est une <strong>base (basis)</strong> de $\mathbb{V}$. Les vecteurs de $\beta$ sont dits former une base de $\mathbb{V}$.</p></blockquote><blockquote class="prompt-tip"><p>On a $\mathrm{span}(\emptyset) = \{\mathbf{0}\}$ et $\emptyset$ est linéairement indépendant. Ainsi, l’ensemble vide est une base de l’espace réduit au point.</p></blockquote><p>En particulier, on appelle la base suivante de $F^n$ la <strong>base canonique (standard basis)</strong> de $F^n$.</p><blockquote class="prompt-info"><p><strong>Définition de la base canonique</strong><br /> Dans l’espace vectoriel $F^n$, considérons les vecteurs</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>Alors l’ensemble $\{\mathbf{e}_1, \mathbf{e}_2, \dots, \mathbf{e}_n \}$ est une base de $F^n$, appelée <strong>base canonique (standard basis)</strong> de $F^n$.</p></blockquote><blockquote class="prompt-info"><p><strong>Théorème 3</strong><br /> Pour un espace vectoriel $\mathbb{V}$ et des vecteurs deux à deux distincts $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \in \mathbb{V}$, un ensemble $\beta = \{\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \}$ est une base de $\mathbb{V}$ si et seulement si « tout vecteur $\mathbf{v} \in \mathbb{V}$ s’écrit de manière unique comme combinaison linéaire de vecteurs de $\beta$ ». Autrement dit, il existe un unique $n$‑uplet de scalaires $(a_1, a_2, \dots, a_n)$ tel que</p>\[\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n\]</blockquote><p>D’après le <strong>Théorème 3</strong>, lorsque $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ forment une base de l’espace vectoriel $\mathbb{V}$, alors, dans $\mathbb{V}$, à tout vecteur $\mathbf{v}$ correspond un unique $n$‑uplet de scalaires $(a_1, a_2, \dots, a_n)$, et réciproquement, à tout $n$‑uplet de scalaires correspond un unique vecteur $\mathbf{v}$. Nous y reviendrons en étudiant l’<strong>invertibilité</strong> et les <strong>isomorphismes</strong>; dans ce cas, $\mathbb{V}$ et $F^n$ sont <u>essentiellement équivalents</u>.</p><blockquote class="prompt-info"><p><strong>Théorème 4</strong><br /> Si $S$ est un ensemble fini tel que $\mathrm{span}(S) = \mathbb{V}$, alors $S$ possède un sous-ensemble qui est une base de $\mathbb{V}$. En particulier, $\mathbb{V}$ admet une base finie dans ce cas.</p></blockquote><blockquote class="prompt-tip"><p>Un grand nombre d’espaces vectoriels entrent dans le champ d’application du <strong>Théorème 4</strong>, mais pas tous. <u>Une base peut être infinie</u>.</p></blockquote><h3 id="dimension">Dimension</h3><blockquote class="prompt-info"><p><strong>Théorème 5: théorème du remplacement (replacement theorem)</strong><br /> Soit $G$ un ensemble de $n$ vecteurs tel que $\mathrm{span}(G) = \mathbb{V}$. Si $L$ est un sous-ensemble de $\mathbb{V}$ constitué de $m$ vecteurs linéairement indépendants, alors $m \leq n$. De plus, il existe un sous-ensemble $H \subseteq G$ de $n-m$ vecteurs tel que $\mathrm{span}(L \cup H) = \mathbb{V}$.</p></blockquote><p>On en déduit deux corollaires essentiels.</p><blockquote class="prompt-info"><p><strong>Corollaire 5-1 du théorème du remplacement</strong><br /> Si l’espace vectoriel $\mathbb{V}$ admet une base finie, alors toute base de $\mathbb{V}$ est finie et elles ont toutes le même nombre de vecteurs.</p></blockquote><p>Ainsi, le nombre de vecteurs d’une base de $\mathbb{V}$ est un invariant fondamental de $\mathbb{V}$, appelé sa <strong>dimension (dimension)</strong>.</p><blockquote class="prompt-info"><p><strong>Définition de la dimension</strong><br /> Un espace vectoriel qui admet une base finie est <strong>de dimension finie (finite dimension)</strong>; le nombre d’éléments $n$ d’une base est la <strong>dimension (dimension)</strong> de l’espace, notée $\dim(\mathbb{V})$. Un espace vectoriel qui n’est pas de dimension finie est <strong>de dimension infinie (infinite dimension)</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>La dimension d’un espace vectoriel dépend du corps sous-jacent.</p><ul><li>Sur le corps des complexes $\mathbb{C}$, l’espace vectoriel $\mathbb{C}$ a dimension $1$; une base est $\{1\}$<li>Sur le corps des réels $\mathbb{R}$, l’espace vectoriel $\mathbb{C}$ a dimension $2$; une base est $\{1,i\}$</ul></blockquote><p>Dans un espace vectoriel de dimension finie $\mathbb{V}$, aucun sous-ensemble ayant plus de $\dim(\mathbb{V})$ vecteurs ne peut être linéairement indépendant.</p><blockquote class="prompt-info"><p><strong>Corollaire 5-2 du théorème du remplacement</strong><br /> Soit $\mathbb{V}$ un espace vectoriel de dimension $n$.</p><ol><li>Tout ensemble générateur fini de $\mathbb{V}$ contient au moins $n$ vecteurs; tout ensemble générateur de $n$ vecteurs est une base de $\mathbb{V}$.<li>Tout sous-ensemble de $\mathbb{V}$ linéairement indépendant et formé de $n$ vecteurs est une base de $\mathbb{V}$. 3. Tout sous-ensemble linéairement indépendant $L \subseteq \mathbb{V}$ peut être étendu en une base: il existe une base $\beta \supseteq L$ de $\mathbb{V}$.</ol></blockquote><h3 id="dimension-dun-sous-espace">Dimension d’un sous-espace</h3><blockquote class="prompt-info"><p><strong>Théorème 6</strong><br /> Dans un espace vectoriel $\mathbb{V}$ de dimension finie, tout sous-espace $\mathbb{W}$ est de dimension finie et $\dim(\mathbb{W}) \leq \dim(\mathbb{V})$. En particulier, si $\dim(\mathbb{W}) = \dim(\mathbb{V})$, alors $\mathbb{V} = \mathbb{W}$.</p><p><strong>Corollaire 6-1</strong><br /> Pour un sous-espace $\mathbb{W}$ d’un espace vectoriel $\mathbb{V}$ de dimension finie, toute base de $\mathbb{W}$ peut être étendue en une base de $\mathbb{V}$.</p></blockquote><p>D’après le <strong>Théorème 6</strong>, la dimension d’un sous-espace de $\mathbb{R}^3$ peut être $0, 1, 2$ ou $3$.</p><ul><li>Dimension 0: l’espace réduit au point $\{\mathbf{0}\}$ (ne contenant que l’origine $\mathbf{0}$)<li>Dimension 1: une droite passant par l’origine $\mathbf{0}$<li>Dimension 2: un plan contenant l’origine $\mathbf{0}$<li>Dimension 3: tout l’espace euclidien $\mathbb{R}^3$</ul>]]> </content> </entry> <entry><title xml:lang="fr">Espaces vectoriels, sous-espaces et matrices</title><link href="https://www.yunseo.kim/fr/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-10-28T18:44:54+09:00</updated> <id>https://www.yunseo.kim/fr/posts/vector-spaces-subspaces-and-matrices/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="fr">Définition des espaces vectoriels et des sous‑espaces, avec exemples clés: espaces de matrices et de fonctions. Focus sur matrices symétriques/antisymétriques, triangulaires et diagonales.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Définition des espaces vectoriels et des sous‑espaces, avec exemples clés: espaces de matrices et de fonctions. Focus sur matrices symétriques/antisymétriques, triangulaires et diagonales.</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>Matrice</strong><ul><li>On note l’élément de la $i$-ème ligne et $j$-ème colonne d’une matrice $A$ par $A_{ij}$ ou $a_{ij}$<li><strong>Élément diagonal (diagonal entry)</strong>: l’élément $a_{ij}$ avec $i=j$<li>Les composantes $a_{i1}, a_{i2}, \dots, a_{in}$ forment la $i$-ème <strong>ligne (row)</strong> de la matrice<ul><li>Chaque ligne d’une matrice peut être vue comme un vecteur de $F^n$<li>Inversement, un vecteur ligne de $F^n$ peut être vu comme une autre matrice de taille $1 \times n$</ul><li>Les composantes $a_{1j}, a_{2j}, \dots, a_{mj}$ forment la $j$-ème <strong>colonne (column)</strong> de la matrice<ul><li>Chaque colonne d’une matrice peut être vue comme un vecteur de $F^m$<li>Inversement, un vecteur colonne de $F^m$ peut être vu comme une autre matrice de taille $m \times 1$</ul><li><strong>Matrice nulle (zero matrix)</strong>: matrice dont tous les éléments valent $0$, notée $O$<li><strong>Matrice carrée (square matrix)</strong>: matrice ayant autant de lignes que de colonnes<li>Deux matrices $m \times n$ $A, B$ sont dites <strong>égales</strong> ($A=B$) si, pour tout $1 \leq i \leq m$, $1 \leq j \leq n$, on a $A_{ij} = B_{ij}$ (i.e. tous les éléments correspondants coïncident)<li><strong>Matrice transposée (transpose matrix)</strong>: pour une matrice $m \times n$ $A$, la matrice $n \times m$ $A^T$ obtenue en échangeant les lignes et les colonnes<li><strong>Matrice symétrique (symmetric matrix)</strong>: matrice carrée $A$ telle que $A^T = A$<li><strong>Matrice antisymétrique (skew-symmetric matrix)</strong>: matrice carrée $B$ telle que $B^T = -B$<li><strong>Matrice triangulaire (triangular matrix)</strong><ul><li><strong>Triangulaire supérieure (upper triangular matrix)</strong>: matrice dont tous les éléments sous la diagonale sont nuls (i.e. $i&gt;j \Rightarrow A_{ij}=0$), souvent notée $U$<li><strong>Triangulaire inférieure (lower triangular matrix)</strong>: matrice dont tous les éléments au-dessus de la diagonale sont nuls (i.e. $i&lt;j \Rightarrow A_{ij}=0$), souvent notée $L$</ul><li><strong>Matrice diagonale (diagonal matrix)</strong>: matrice carrée $n \times n$ dont tous les éléments hors diagonale sont nuls (i.e. $i \neq j \Rightarrow M_{ij}=0$), souvent notée $D$</ul><li>Espaces vectoriels représentatifs<ul><li><strong>$n$-uplets $F^n$</strong>:<ul><li>Ensemble de tous les $n$-uplets dont les composantes appartiennent à un corps $F$<li>Noté $F^n$, c’est un espace vectoriel sur $F$</ul><li><strong>Espace des matrices (matrix space)</strong>:<ul><li>Ensemble de toutes les matrices $m \times n$ à coefficients dans $F$<li>Noté $\mathcal{M}_{m \times n}(F)$, c’est un espace vectoriel</ul><li><strong>Espace des fonctions (function space)</strong>:<ul><li>Pour un ensemble non vide $S$ sur $F$, l’ensemble de toutes les fonctions de $S$ vers $F$<li>Noté $\mathcal{F}(S,F)$, c’est un espace vectoriel</ul></ul><li><strong>Sous-espace (subspace)</strong><ul><li>Un sous-ensemble $\mathbb{W}$ d’un espace vectoriel $\mathbb{V}$ sur $F$ est un <strong>sous-espace</strong> si, muni des mêmes opérations d’addition et de multiplication scalaire que $\mathbb{V}$, il est lui aussi un espace vectoriel sur $F$<li>Pour tout espace vectoriel $\mathbb{V}$, $\mathbb{V}$ lui-même et $\{0\}$ sont des sous-espaces; en particulier, $\{0\}$ est le <strong>sous-espace nul (zero subspace)</strong><li>Si un sous-ensemble d’un espace vectoriel contient le vecteur nul et est fermé par rapport aux <a href="/fr/posts/vectors-and-linear-combinations/#combinaison-linéaire-de-vecteurs">combinaisons linéaires</a> (i.e. si $\mathrm{span}(\mathbb{W})=\mathbb{W}$), alors c’est un sous-espace</ul></ul></blockquote><h2 id="prérequis">Prérequis</h2><ul><li><a href="/fr/posts/vectors-and-linear-combinations/">Vecteurs et combinaisons linéaires</a></ul><h2 id="espace-vectoriel">Espace vectoriel</h2><p>Comme on l’a brièvement vu dans <a href="/fr/posts/vectors-and-linear-combinations/#vecteur-au-sens-large--élément-dun-espace-vectoriel">Vecteurs et combinaisons linéaires</a>, la définition du vecteur et de l’espace vectoriel comme structure algébrique est la suivante.</p><blockquote class="prompt-info"><p><strong>Définition</strong><br /> Un <strong>espace vectoriel (vector space)</strong> ou <strong>espace linéaire (linear space)</strong> $\mathbb{V}$ sur un corps $F$ est un ensemble muni de deux opérations, la <strong>somme</strong> et la <strong>multiplication scalaire</strong>, qui satisfont les huit axiomes suivants. Les éléments de $F$ sont des <strong>scalaires (scalar)</strong>, et les éléments de $\mathbb{V}$ sont des <strong>vecteurs (vector)</strong>.</p><ul><li><strong>Somme (sum)</strong>: pour $\mathbf{x}, \mathbf{y} \in \mathbb{V}$, l’opération associe un unique élément $\mathbf{x} + \mathbf{y} \in \mathbb{V}$. On appelle $\mathbf{x} + \mathbf{y}$ la <strong>somme</strong> de $\mathbf{x}$ et $\mathbf{y}$.<li><strong>Multiplication scalaire (scalar multiplication)</strong>: pour $a \in F$ et $\mathbf{x} \in \mathbb{V}$, l’opération associe un unique élément $a\mathbf{x} \in \mathbb{V}$. On appelle $a\mathbf{x}$ un <strong>multiple scalaire (scalar multiple)</strong> de $\mathbf{x}$.</ul><ol><li>Pour tous $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $\mathbf{x} + \mathbf{y} = \mathbf{y} + \mathbf{x}$. (commutativité de l’addition)<li>Pour tous $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$, $(\mathbf{x}+\mathbf{y})+\mathbf{z} = \mathbf{x}+(\mathbf{y}+\mathbf{z})$. (associativité de l’addition)<li>Pour tout $\mathbf{x} \in \mathbb{V}$, il existe $\mathbf{0} \in \mathbb{V}$ tel que $\mathbf{x} + \mathbf{0} = \mathbf{x}$. (vecteur nul, élément neutre pour l’addition)<li>Pour chaque $\mathbf{x} \in \mathbb{V}$, il existe $\mathbf{y} \in \mathbb{V}$ tel que $\mathbf{x}+\mathbf{y}=\mathbf{0}$. (inverse additif)<li>Pour tout $\mathbf{x} \in \mathbb{V}$, $1\mathbf{x} = \mathbf{x}$. (élément neutre pour la multiplication)<li>Pour tous $a,b \in F$ et tout $\mathbf{x} \in \mathbb{V}$, $(ab)\mathbf{x} = a(b\mathbf{x})$. (associativité de la multiplication scalaire)<li>Pour tout $a \in F$ et tous $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $a(\mathbf{x}+\mathbf{y}) = a\mathbf{x} + a\mathbf{y}$. (distributivité de la multiplication scalaire par rapport à l’addition 1)<li>Pour tous $a,b \in F$ et tout $\mathbf{x} \in \mathbb{V}$, $(a+b)\mathbf{x} = a\mathbf{x} + b\mathbf{x}$. (distributivité de la multiplication scalaire par rapport à l’addition 2)</ol></blockquote><p>On devrait écrire plus précisément « espace vectoriel sur $F$, $\mathbb{V}$ », mais le corps $F$ n’étant pas crucial dans le contexte, on le laisse souvent implicite et on écrit simplement « l’espace vectoriel $\mathbb{V}$ » lorsque cela ne prête pas à confusion.</p><h3 id="espace-des-matrices">Espace des matrices</h3><h4 id="vecteurs-ligne-et-vecteurs-colonne">Vecteurs ligne et vecteurs colonne</h4><p>On note $F^n$ l’ensemble de tous les $n$-uplets dont les composantes appartiennent au corps $F$. Pour $u = (a_1, a_2, \dots, a_n) \in F^n$ et $v = (b_1, b_2, \dots, b_n) \in F^n$, en définissant la somme et la multiplication scalaire comme suit, $F^n$ est un espace vectoriel sur $F$.</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>Isolés, les vecteurs de $F^n$ s’écrivent plutôt comme <strong>vecteurs colonne (column vector)</strong> que comme <strong>vecteurs ligne (row vector)</strong> $(a_1, a_2, \dots, a_n)$:</p>\[\begin{pmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{pmatrix}\]<blockquote class="prompt-tip"><p>Cependant, la notation en vecteur colonne prenant plus de place, on utilise souvent la <a href="#matrice-transposée-matrice-symétrique-matrice-antisymétrique">transposition</a> et on écrit $(a_1, a_2, \dots, a_n)^T$.</p></blockquote><h4 id="matrices-et-espace-des-matrices">Matrices et espace des matrices</h4><p>Une <strong>matrice</strong> $m \times n$ à coefficients dans $F$ est un tableau rectangulaire, noté par des lettres capitales en italique ($A, B, C$, etc.), de la forme suivante.</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>On note l’élément de la $i$-ème ligne et $j$-ème colonne d’une matrice $A$ par $A_{ij}$ ou $a_{ij}$.<li>Chaque $a_{ij}$ ($1 \leq i \leq m$, $1 \leq j \leq n$) appartient à $F$.<li>Les éléments $a_{ij}$ avec $i=j$ sont les <strong>éléments diagonaux (diagonal entries)</strong> de la matrice.<li>Les composantes $a_{i1}, a_{i2}, \dots, a_{in}$ forment la $i$-ème <strong>ligne (row)</strong> de la matrice. Chaque ligne peut être vue comme un vecteur de $F^n$; réciproquement, un vecteur ligne de $F^n$ peut être vu comme une autre matrice $1 \times n$.<li>Les composantes $a_{1j}, a_{2j}, \dots, a_{mj}$ forment la $j$-ème <strong>colonne (column)</strong> de la matrice. Chaque colonne peut être vue comme un vecteur de $F^m$; réciproquement, un vecteur colonne de $F^m$ peut être vu comme une autre matrice $m \times 1$.<li>La <strong>matrice nulle (zero matrix)</strong> $m \times n$ a tous ses éléments égaux à $0$ et se note $O$.<li>Une <strong>matrice carrée (square matrix)</strong> a autant de lignes que de colonnes.<li>Deux matrices $m \times n$ $A, B$ sont <strong>égales</strong> ($A=B$) si, pour tout $1 \leq i \leq m$, $1 \leq j \leq n$, $A_{ij} = B_{ij}$ (i.e. tous les éléments correspondants coïncident).</ul><p>On note $\mathcal{M}_{m \times n}(F)$ l’ensemble de toutes les matrices $m \times n$ dont les éléments appartiennent au corps $F$. Pour $\mathbf{A},\mathbf{B} \in \mathcal{M}_{m \times n}(F)$ et $c \in F$, en définissant la somme et la multiplication scalaire comme suit, $\mathcal{M}_{m \times n}(F)$ est un espace vectoriel, appelé <strong>espace des matrices (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{(où }1 \leq i \leq &amp;m, 1 \leq j \leq n \text{)} \end{align*}\]<p>Ces opérations prolongent naturellement celles définies sur $F^n$ et $F^m$.</p><h3 id="espace-des-fonctions">Espace des fonctions</h3><p>Pour un ensemble non vide $S$ sur un corps $F$, $\mathcal{F}(S,F)$ désigne l’ensemble de toutes les fonctions de $S$ vers $F$. Dans $\mathcal{F}(S,F)$, pour tous $s \in S$, si $f(s) = g(s)$, alors on dit que les deux fonctions $f, g$ sont <strong>égales</strong> ($f=g$).</p><p>Pour $f,g \in \mathcal{F}(S,F)$, $c \in F$, $s \in S$, en définissant la somme et la multiplication scalaire comme suit, $\mathcal{F}(S,F)$ est un espace vectoriel, appelé <strong>espace des fonctions (function space)</strong>.</p>\[\begin{align*} (f + g)(s) &amp;= f(s) + g(s), \\ (cf)(s) &amp;= c[f(s)] \end{align*}\]<h2 id="sous-espace">Sous-espace</h2><blockquote class="prompt-info"><p><strong>Définition</strong><br /> Un sous-ensemble $\mathbb{W}$ d’un espace vectoriel $\mathbb{V}$ sur $F$ est un <strong>sous-espace (subspace)</strong> s’il est lui-même un espace vectoriel sur $F$ muni des mêmes opérations d’addition et de multiplication scalaire que $\mathbb{V}$.</p></blockquote><p>Pour tout espace vectoriel $\mathbb{V}$, $\mathbb{V}$ lui-même et $\{0\}$ sont des sous-espaces; en particulier, $\{0\}$ est le <strong>sous-espace nul (zero subspace)</strong>.</p><p>On peut vérifier qu’un sous-ensemble est un sous-espace à l’aide du théorème suivant.</p><blockquote class="prompt-info"><p><strong>Théorème 1</strong><br /> Pour un espace vectoriel $\mathbb{V}$ et un sous-ensemble $\mathbb{W}$, $\mathbb{W}$ est un sous-espace de $\mathbb{V}$ si et seulement s’il satisfait les trois conditions suivantes, les opérations étant celles définies dans $\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>En bref, s’il contient le vecteur nul et est fermé pour les <a href="/fr/posts/vectors-and-linear-combinations/#combinaison-linéaire-de-vecteurs">combinaisons linéaires</a> (i.e. si $\mathrm{span}(\mathbb{W})=\mathbb{W}$), alors c’est un sous-espace.</p></blockquote><p>On a également les résultats suivants.</p><blockquote class="prompt-info"><p><strong>Théorème 2</strong></p><ul><li><p>Pour tout sous-ensemble $S$ d’un espace vectoriel $\mathbb{V}$, l’espace engendré $\mathrm{span}(S)$ est un sous-espace de $\mathbb{V}$ contenant $S$.</p>\[S \subset \mathrm{span}(S) \leq \mathbb{V} \quad \forall\ S \subset \mathbb{V}.\]<li><p>Tout sous-espace de $\mathbb{V}$ qui contient $S$ contient nécessairement l’espace engendré par $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>Théorème 3</strong><br /> Pour les sous-espaces d’un espace vectoriel $\mathbb{V}$, l’intersection arbitraire de tels sous-espaces est à son tour un sous-espace de $\mathbb{V}$.</p></blockquote><h3 id="matrice-transposée-matrice-symétrique-matrice-antisymétrique">Matrice transposée, matrice symétrique, matrice antisymétrique</h3><p>La <strong>matrice transposée (transpose matrix)</strong> $A^T$ d’une matrice $m \times n$ $A$ est la matrice $n \times m$ obtenue en échangeant lignes et colonnes.</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>Une matrice $A$ telle que $A^T = A$ est une <strong>matrice symétrique (symmetric matrix)</strong>; une matrice $B$ telle que $B^T = -B$ est une <strong>matrice antisymétrique (skew-symmetric matrix)</strong>. Les matrices symétriques et antisymétriques sont nécessairement carrées.</p><p>Les ensembles $\mathbb{W}_1$ et $\mathbb{W}_2$ constitués respectivement de toutes les matrices symétriques et de toutes les matrices antisymétriques de $\mathcal{M}_{n \times n}(F)$ sont des sous-espaces de $\mathcal{M}_{n \times n}(F)$. Autrement dit, $\mathbb{W}_1$ et $\mathbb{W}_2$ sont fermés pour la somme et la multiplication scalaire.</p><h3 id="matrices-triangulaires-matrice-diagonale">Matrices triangulaires, matrice diagonale</h3><p>Ces deux types de matrices sont particulièrement importants.</p><p>On regroupe d’abord les deux types suivants sous le nom de <strong>matrices triangulaires (triangular matrix)</strong>.</p><ul><li><strong>Triangulaire supérieure (upper triangular matrix)</strong>: matrice dont tous les éléments sous la diagonale sont nuls (i.e. $i&gt;j \Rightarrow A_{ij}=0$), généralement notée $U$<li><strong>Triangulaire inférieure (lower triangular matrix)</strong>: matrice dont tous les éléments au-dessus de la diagonale sont nuls (i.e. $i&lt;j \Rightarrow A_{ij}=0$), généralement notée $L$</ul><p>Une matrice carrée $n \times n$ dont tous les éléments hors diagonale sont nuls, i.e. $i \neq j \Rightarrow M_{ij}=0$, est une <strong>matrice diagonale (diagonal matrix)</strong>, généralement notée $D$. Une matrice diagonale est à la fois triangulaire supérieure et triangulaire inférieure.</p><p>L’ensemble des matrices triangulaires supérieures, l’ensemble des matrices triangulaires inférieures et l’ensemble des matrices diagonales sont tous des sous-espaces de $\mathcal{M}_{m \times n}(F)$.</p>]]> </content> </entry> <entry><title xml:lang="fr">Produit scalaire et norme</title><link href="https://www.yunseo.kim/fr/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-10-15T05:48:53+09:00</updated> <id>https://www.yunseo.kim/fr/posts/inner-product-and-norm/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="fr">Définition du produit scalaire (dot product) et du produit hermitien; calcul de la longueur/norme d’un vecteur et de l’angle entre deux vecteurs.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Définition du produit scalaire (dot product) et du produit hermitien; calcul de la longueur/norme d’un vecteur et de l’angle entre deux vecteurs.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="prérequis">Prérequis</h2><ul><li><a href="/fr/posts/vectors-and-linear-combinations/">Vecteurs et combinaisons linéaires</a></ul><h2 id="produit-scalaire">Produit scalaire</h2><p>La définition générale d’un <strong>produit scalaire (inner product)</strong> sur un $F$-espace vectoriel est la suivante.</p><blockquote class="prompt-info"><p><strong>Définition du produit scalaire (inner product) et de l’espace à produit scalaire (inner product space)</strong><br /> Considérons un $F$-espace vectoriel $\mathbb{V}$. Un <strong>produit scalaire (inner product)</strong> $\langle \mathbf{x},\mathbf{y} \rangle$ sur $\mathbb{V}$ est une application qui associe à toute paire ordonnée de vecteurs $\mathbf{x}$ et $\mathbf{y}$ de $\mathbb{V}$ un scalaire de $F$, et qui satisfait les propriétés suivantes.</p><p>Pour tous $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$ et tout $c \in F$:</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$ (la barre désigne le conjugué complexe)<li>Si $\mathbf{x} \neq \mathbf{0}$, alors $\langle \mathbf{x}, \mathbf{x} \rangle$ est strictement positif.</ol><p>Un $F$-espace vectoriel $\mathbb{V}$ muni d’un produit scalaire est appelé <strong>espace à produit scalaire (inner product space)</strong>. En particulier, si $F=\mathbb{C}$ on parle d’<strong>espace à produit complexe (complex inner product space)</strong>, et si $F=\mathbb{R}$ d’<strong>espace à produit scalaire réel (real inner product space)</strong>.</p></blockquote><p>En particulier, le produit suivant est appelé <strong>produit scalaire standard</strong>. On vérifie qu’il satisfait bien les quatre propriétés ci-dessus.</p><blockquote class="prompt-info"><p><strong>Définition du produit scalaire standard</strong><br /> Pour deux vecteurs de $F^n$, $\mathbf{x}=(a_1, a_2, \dots, a_n)$ et $\mathbf{y}=(b_1, b_2, \dots, b_n)$, on définit le <strong>produit scalaire standard</strong> sur $F^n$ par</p>\[\langle \mathbf{x}, \mathbf{y} \rangle = \sum_{i=1}^n a_i \overline{b_i}\]</blockquote><p>Si $F=\mathbb{R}$, le conjugué d’un réel étant lui-même, le produit scalaire standard devient $\sum_{i=1}^n a_i b_i$. Dans ce cas particulier, on le note $\langle \mathbf{x}, \mathbf{y} \rangle$ ou $\mathbf{x} \cdot \mathbf{y}$ et on l’appelle <strong>produit scalaire (dot product)</strong>.</p><blockquote class="prompt-info"><p><strong>Définition du produit scalaire (dot product)</strong><br /> Pour $\mathbf{v}=(v_1, v_2, \dots, v_n)$ et $\mathbf{w}=(w_1, w_2, \dots, w_n)$ dans $\mathbb{R}^n$, le <strong>produit scalaire (dot product)</strong> sur $\mathbb{R}^n$ est défini par</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>Ici, le « produit scalaire » est une opération entre vecteurs, distincte de l’« opération entre un scalaire et un vecteur » traitée dans <a href="/fr/posts/vectors-and-linear-combinations/">Vecteurs et combinaisons linéaires</a>, à savoir la « multiplication scalaire (scalar multiplication) ». Les expressions anglaises se ressemblent et, <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">selon la terminologie coréenne normalisée par la Société mathématique de Corée, elles portent exactement le même nom</a>; attention à ne pas les confondre.</p><p>Pour éviter toute confusion, nous emploierons autant que possible le terme <strong>dot product</strong>.</p></blockquote><blockquote class="prompt-tip"><p>Dans un espace euclidien, le produit scalaire (inner product) coïncide avec le dot product; lorsqu’il n’y a pas d’ambiguïté, il est courant d’appeler ce dernier simplement produit scalaire. Stricto sensu toutefois, le produit scalaire est une notion plus générale qui inclut le dot product.</p></blockquote><pre><code class="language-mermaid">flowchart TD
    A["Produit scalaire (Inner Product)"] --&gt;|contient| B["Produit scalaire standard"]
    B --&gt;|"si F = R (corps des réels)"| C["Produit scalaire (dot/scalar product)"]

    %% Notation d’inclusion
    C -. est inclus dans .-&gt; B
    B -. est inclus dans .-&gt; A
</code></pre><h2 id="longueurnorme-dun-vecteur">Longueur/norme d’un vecteur</h2><p>Pour un vecteur $\mathbf{v}=(v_1, v_2, \dots, v_n)$ de $\mathbb{R}^n$, la longueur euclidienne de $\mathbf{v}$ se définit via le produit scalaire par</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>Plus généralement, dans un espace à produit scalaire arbitraire, on définit la <strong>longueur (length)</strong> ou <strong>norme (norm)</strong> d’un vecteur par</p>\[\| \mathbf{x} \| = \sqrt{\langle \mathbf{x}, \mathbf{x} \rangle}\]<p>Dans un espace à produit scalaire quelconque, la norme vérifie les propriétés fondamentales suivantes.</p><blockquote class="prompt-info"><p><strong>Théorème</strong><br /> Soient $\mathbb{V}$ un espace à produit scalaire sur $F$, $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ et $c \in F$. Alors</p><ol><li>$\|c\mathbf{x}\| = |c| \cdot \|\mathbf{x}\|$<li>Les deux assertions suivantes sont vraies:<ul><li>$\|\mathbf{x}\| = 0 \iff \mathbf{x}=\mathbf{0}$<li>$\|\mathbf{x}\| \geq 0 \ \forall \mathbf{x}$</ul><li><strong>Inégalité de Cauchy–Schwarz (Cauchy–Schwarz inequality)</strong>: $| \langle \mathbf{x}, \mathbf{y} \rangle | \leq \|\mathbf{x}\| \cdot \|\mathbf{y}\|$ (avec égalité si l’un des deux est un multiple scalaire de l’autre)<li><strong>Inégalité triangulaire (triangle inequality)</strong>: $\| \mathbf{x} + \mathbf{y} \| \leq \|\mathbf{x}\| + \|\mathbf{y}\|$ (avec égalité si l’un est un multiple scalaire de l’autre et, de plus, de même direction)</ol></blockquote><h2 id="angle-entre-vecteurs-et-vecteur-unitaire">Angle entre vecteurs et vecteur unitaire</h2><p>Un vecteur de longueur $1$ est appelé <strong>vecteur unitaire (unit vector)</strong>. Pour deux vecteurs $\mathbf{v}=(v_1, v_2, \dots, v_n)$ et $\mathbf{w}=(w_1, w_2, \dots, w_n)$ dans $\mathbb{R}^n$, on a $\mathbf{v} \cdot \mathbf{w} = \|\mathbf{v}\| \cdot \|\mathbf{w}\| \cos\theta$, d’où l’on peut déduire l’angle $\theta$ ($0 \leq \theta \leq \pi$) entre $\mathbf{v}$ et $\mathbf{w}$:</p>\[\theta = \arccos{\frac{\mathbf{v} \cdot \mathbf{w}}{\|\mathbf{v}\| \cdot \|\mathbf{w}\|}}\]<p>Si $\mathbf{v} \cdot \mathbf{w} = 0$, on dit que les deux vecteurs sont <strong>perpendiculaires (perpendicular)</strong> ou <strong>orthogonaux (orthogonal)</strong>.</p><blockquote class="prompt-tip"><p>Si deux vecteurs $\mathbf{v}$ et $\mathbf{w}$ sont perpendiculaires,</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>En généralisant à un espace à produit scalaire arbitraire, on obtient ce qui suit.</p><blockquote class="prompt-info"><p><strong>Définition</strong><br /> Considérons un espace à produit scalaire $\mathbb{V}$. Pour des vecteurs $\mathbf{x}, \mathbf{y} \in \mathbb{V}$, si $\langle \mathbf{x}, \mathbf{y} \rangle = 0$, on dit que $\mathbf{x}$ et $\mathbf{y}$ sont <strong>orthogonaux (orthogonal)</strong> ou <strong>perpendiculaires (perpendicular)</strong>. De plus,</p><ol><li>Pour une partie $S \subset \mathbb{V}$, si deux vecteurs distincts quelconques de $S$ sont orthogonaux, alors $S$ est un <strong>ensemble orthogonal (orthogonal set)</strong>.<li>Un vecteur $\mathbf{x} \in \mathbb{V}$ tel que $\|\mathbf{x}\|=1$ est appelé <strong>vecteur unitaire (unit vector)</strong>.<li>Si une partie $S \subset \mathbb{V}$ est un ensemble orthogonal et ne contient que des vecteurs unitaires, on l’appelle <strong>ensemble orthonormé (orthonormal set)</strong>.</ol></blockquote><p>Une condition nécessaire et suffisante pour que $S = { \mathbf{v}_1, \mathbf{v}_2, \dots }$ soit un ensemble orthonormé est que $\langle \mathbf{v}_i, \mathbf{v}_j \rangle = \delta_{ij}$. Multiplier un vecteur par un scalaire non nul ne change pas l’orthogonalité.</p><p>Pour tout vecteur non nul $\mathbf{x}$, le vecteur $\cfrac{\mathbf{x}}{\|\mathbf{x}\|}$ est un vecteur unitaire; multiplier un vecteur non nul par l’inverse de sa longueur pour obtenir un vecteur unitaire s’appelle la <strong>normalisation (normalizing)</strong>.</p>]]> </content> </entry> <entry><title xml:lang="fr">Vecteurs et combinaisons linéaires</title><link href="https://www.yunseo.kim/fr/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-10-28T20:47:49+09:00</updated> <id>https://www.yunseo.kim/fr/posts/vectors-and-linear-combinations/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="fr">Qu’est-ce qu’un vecteur ? Représentations (flèche, composantes), opérations de base (addition, multiplication scalaire), définition des combinaisons linéaires en R^n et notion de sous-espace engendré (span).</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Qu’est-ce qu’un vecteur ? Représentations (flèche, composantes), opérations de base (addition, multiplication scalaire), définition des combinaisons linéaires en R^n et notion de sous-espace engendré (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>Définition du vecteur</strong><ul><li><strong>Vecteur au sens étroit (vecteur euclidien)</strong>: grandeur physique qui possède à la fois une norme et une direction<li><strong>Au sens large, en algèbre linéaire, vecteur</strong>: élément d’un espace vectoriel</ul><li><strong>Représentations du vecteur</strong><ul><li><strong>Représentation par flèche</strong>: la norme d’un vecteur est donnée par la longueur de la flèche et sa direction par l’orientation de la flèche. Cette représentation est intuitive et facile à visualiser, mais elle devient difficile pour les vecteurs de dimension ≥ 4 ou pour les vecteurs non euclidiens.<li><strong>Représentation par composantes</strong>: on place l’origine du vecteur à l’origine de l’espace de coordonnées et on décrit le vecteur par les coordonnées de son extrémité.</ul><li><strong>Opérations de base sur les vecteurs</strong><ul><li><strong>Somme</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>Multiplication scalaire</strong>: $c(a_1, a_2, \cdots, a_n) := (ca_1, ca_2, \cdots, ca_n)$</ul><li><strong>Combinaison linéaire de vecteurs</strong><ul><li>Pour des vecteurs $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ et des scalaires $a_1, a_2, \dots, a_n$, un vecteur $\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n$ est appelé une <strong>combinaison linéaire</strong> de $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$.<li>Les nombres $a_1, a_2, \dots, a_n$ sont les <strong>coefficients</strong> de cette combinaison linéaire.</ul><li><strong>Sous-espace engendré</strong><ul><li>Pour un sous-ensemble non vide $S$ de l’espace vectoriel $\mathbb{V}$, l’ensemble de toutes les combinaisons linéaires formées avec les vecteurs de $S$, $\mathrm{span}(S)$.<li>Par convention, $\mathrm{span}(\emptyset) = {0}$.<li>Pour un sous-ensemble $S$ de l’espace vectoriel $\mathbb{V}$, si $\mathrm{span}(S) = \mathbb{V}$, on dit que $S$ <strong>engendre</strong> $\mathbb{V}$ (génère, span).</ul></ul></blockquote><h2 id="prerequisites">Prerequisites</h2><ul><li>Plan/espace de coordonnées<li>Corps</ul><h2 id="quest-ce-quun-vecteur-">Qu’est-ce qu’un vecteur ?</h2><h3 id="vecteur-au-sens-étroit--vecteur-euclidien">Vecteur au sens étroit : vecteur euclidien</h3><blockquote class="prompt-info"><p>De nombreuses grandeurs physiques comme la force, la vitesse ou l’accélération portent non seulement une norme mais aussi une direction. Une grandeur qui possède à la fois une norme et une direction est appelée un <strong>vecteur</strong>.</p></blockquote><p>La définition ci-dessus est celle des vecteurs en mécanique ou au niveau lycée. Un vecteur au sens géométrique, fondé sur l’intuition physique de « segment orienté avec norme et direction », est appelé rigoureusement un <strong>vecteur euclidien</strong>.</p><h3 id="vecteur-au-sens-large--élément-dun-espace-vectoriel">Vecteur au sens large : élément d’un espace vectoriel</h3><p>En algèbre linéaire, on adopte une définition plus générale et plus abstraite d’un vecteur comme structure algébrique.</p><blockquote class="prompt-info"><p><strong>Définition</strong><br /> Un <strong>espace vectoriel</strong> (ou <strong>espace linéaire</strong>) $\mathbb{V}$ sur un corps $F$ est un ensemble muni de deux opérations, la <strong>somme</strong> et la <strong>multiplication scalaire</strong>, qui satisfont les huit axiomes suivants. Les éléments de $F$ sont des <strong>scalaires</strong> et les éléments de $\mathbb{V}$ sont des <strong>vecteurs</strong>.</p><ul><li><strong>Somme</strong>: pour $\mathbf{x}, \mathbf{y} \in \mathbb{V}$, l’opération associe un unique élément $\mathbf{x} + \mathbf{y} \in \mathbb{V}$. On appelle $\mathbf{x} + \mathbf{y}$ la <strong>somme</strong> de $\mathbf{x}$ et $\mathbf{y}$.<li><strong>Multiplication scalaire</strong>: pour $a \in F$ et $\mathbf{x} \in \mathbb{V}$, l’opération associe un unique élément $a\mathbf{x} \in \mathbb{V}$. On appelle $a\mathbf{x}$ le <strong>multiple scalaire</strong> de $\mathbf{x}$.</ul><ol><li>Pour tous $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $\mathbf{x} + \mathbf{y} = \mathbf{y} + \mathbf{x}$. (commutativité de l’addition)<li>Pour tous $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$, $(\mathbf{x}+\mathbf{y})+\mathbf{z} = \mathbf{x}+(\mathbf{y}+\mathbf{z})$. (associativité de l’addition)<li>Pour tout $\mathbf{x} \in \mathbb{V}$, il existe $\mathbf{0} \in \mathbb{V}$ tel que $\mathbf{x} + \mathbf{0} = \mathbf{x}$. (vecteur nul, élément neutre pour l’addition)<li>Pour chaque $\mathbf{x} \in \mathbb{V}$, il existe $\mathbf{y} \in \mathbb{V}$ tel que $\mathbf{x}+\mathbf{y}=\mathbf{0}$. (inverse additif)<li>Pour tout $\mathbf{x} \in \mathbb{V}$, $1\mathbf{x} = \mathbf{x}$. (élément neutre pour la multiplication)<li>Pour tous $a,b \in F$ et tout $\mathbf{x} \in \mathbb{V}$, $(ab)\mathbf{x} = a(b\mathbf{x})$. (associativité de la multiplication scalaire)<li>Pour tout $a \in F$ et tous $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $a(\mathbf{x}+\mathbf{y}) = a\mathbf{x} + a\mathbf{y}$. (distributivité de la multiplication scalaire par rapport à l’addition 1)<li>Pour tous $a,b \in F$ et tout $\mathbf{x} \in \mathbb{V}$, $(a+b)\mathbf{x} = a\mathbf{x} + b\mathbf{x}$. (distributivité de la multiplication scalaire par rapport à l’addition 2)</ol></blockquote><p>Cette définition en algèbre linéaire englobe une portée plus large, incluant le <a href="#vecteur-au-sens-étroit-vecteur-euclidien">vecteur euclidien</a>. On peut vérifier que les <a href="#vecteur-au-sens-étroit-vecteur-euclidien">vecteurs euclidiens</a> satisfont aussi les huit axiomes ci-dessus.</p><p>L’origine et le développement de la notion de vecteur sont intimement liés aux problèmes pratiques soulevés en physique — quantifier des concepts tels que force, mouvement, rotation ou champ. D’abord introduit comme <a href="#vecteur-au-sens-étroit-vecteur-euclidien">vecteur euclidien</a> pour modéliser mathématiquement des phénomènes naturels, le concept a été généralisé et théorisé par les mathématiciens, qui ont formalisé des structures telles que l’espace vectoriel, le produit scalaire et le produit vectoriel. Autrement dit, le vecteur est un concept demandé par la physique et établi par les mathématiques — un produit interdisciplinaire né de leurs interactions étroites.</p><p>Les vecteurs euclidiens de la mécanique classique peuvent être exprimés dans un <a href="#vecteur-au-sens-large-élément-d-un-espace-vectoriel">cadre plus général</a>, et la physique moderne utilise non seulement les <a href="#vecteur-au-sens-étroit-vecteur-euclidien">vecteurs euclidiens</a> mais aussi des concepts plus abstraits définis en mathématiques (espaces vectoriels, espaces fonctionnels, etc.) auxquels on attribue un sens physique. Il est donc inapproprié d’opposer simplement une « définition physique » et une « définition mathématique » du vecteur.</p><p>Nous reviendrons plus tard sur les espaces vectoriels; concentrons-nous d’abord sur le vecteur au sens étroit, le vecteur euclidien que l’on peut représenter géométriquement dans un espace de coordonnées. Disposer d’exemples intuitifs de vecteurs euclidiens aide à comprendre ensuite la généralisation à d’autres types de vecteurs.</p><h2 id="représentations-du-vecteur">Représentations du vecteur</h2><h3 id="représentation-par-flèche">Représentation par flèche</h3><p>C’est la représentation la plus intuitive et la plus répandue. La norme du vecteur est donnée par la longueur de la flèche, et sa direction par l’orientation de la flèche.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/9/95/Vector_from_A_to_B.svg" alt="Vecteur euclidien de A vers B" width="972" /></p><blockquote><p><em>Source de l’image</em></p><ul><li>Auteur: utilisateur Wikipédia <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>Bien qu’intuitive, cette représentation a des limites évidentes en dimension 4 et au-delà. De plus, nous aurons à traiter des vecteurs non euclidiens, difficiles à représenter géométriquement; il est donc utile de se familiariser avec la représentation par composantes décrite ci-dessous.</p><h3 id="représentation-par-composantes">Représentation par composantes</h3><p>Indépendamment de sa position, deux vecteurs sont identiques s’ils ont même norme et même direction. Ainsi, dans un espace de coordonnées donné, en plaçant l’origine du vecteur à l’origine de l’espace, <u>un vecteur de dimension $n$ correspond à un point quelconque de l’espace de dimension $n$</u>, et on peut représenter le vecteur par les coordonnées de son extrémité. C’est la <strong>représentation par composantes</strong>.</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="Vecteur position" /></p><blockquote><p><em>Source de l’image</em></p><ul><li>Auteur: utilisateur Wikimédia <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="opérations-de-base-sur-les-vecteurs">Opérations de base sur les vecteurs</h2><p>Les opérations de base sont la <strong>somme</strong> et la <strong>multiplication scalaire</strong>. Toute opération vectorielle peut s’exprimer comme combinaison de ces deux opérations.</p><h3 id="somme">Somme</h3><p>La somme de deux vecteurs est encore un vecteur, et les composantes du vecteur somme sont les sommes composante par composante.</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="multiplication-scalaire">Multiplication scalaire</h3><p>On peut agrandir ou réduire un vecteur en le multipliant par un scalaire. Le résultat s’obtient en multipliant chaque composante par ce scalaire.</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="Multiplication scalaire de vecteurs" /></p><blockquote><p><em>Source de l’image</em></p><ul><li>Auteur: utilisateur Wikipédia <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="combinaison-linéaire-de-vecteurs">Combinaison linéaire de vecteurs</h2><p>De même que l’analyse part des nombres $x$ et des fonctions $f(x)$, l’algèbre linéaire part des vecteurs $\mathbf{v}, \mathbf{w}, \dots$ et des combinaisons linéaires $c\mathbf{v} + d\mathbf{w} + \cdots$. Toute combinaison linéaire se compose des deux opérations de base, <a href="#somme">somme</a> et <a href="#multiplication-scalaire">multiplication scalaire</a>.</p><blockquote class="prompt-info"><p>Pour des vecteurs $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ et des scalaires $a_1, a_2, \dots, a_n$, un vecteur $\mathbf{v}$ vérifiant</p>\[\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n\]<p>est appelé une <strong>combinaison linéaire</strong> de $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$. Les nombres $a_1, a_2, \dots, a_n$ en sont les <strong>coefficients</strong>.</p></blockquote><p>Pourquoi les combinaisons linéaires sont-elles importantes ? Considérons la situation suivante: <strong>$n$ vecteurs d’un espace de dimension $m$ constituent les $n$ colonnes d’une matrice $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>Voici les deux points essentiels.</p><ol><li><strong>Exprimez toutes les combinaisons linéaires possibles $Ax = x_1\mathbf{v}_1 + x_2\mathbf{v}_2 + \cdots + x_n\mathbf{v}_n$.</strong> Que forment-elles ?<li><strong>Trouvez des nombres $x_1, x_2, \dots, x_n$</strong> tels que la sortie désirée $Ax = b$ soit obtenue.</ol><p>Nous reviendrons plus tard sur la deuxième question; concentrons-nous d’abord sur la première. Pour simplifier, examinons le cas de deux vecteurs non nuls ($n=2$) dans le plan ($m=2$).</p><h3 id="combinaison-linéaire-cmathbfv--dmathbfw">Combinaison linéaire $c\mathbf{v} + d\mathbf{w}$</h3><p>Dans le plan, un vecteur $\mathbf{v}$ possède deux composantes. Pour tout scalaire $c$, <u>le vecteur $c\mathbf{v}$ est parallèle à $\mathbf{v}$ et décrit une droite infinie dans le plan $xy$ passant par l’origine</u>.</p><p>Si un second vecteur $\mathbf{w}$ n’est pas sur cette droite (i.e. $\mathbf{v}$ et $\mathbf{w}$ ne sont pas parallèles), alors $d\mathbf{w}$ décrit une autre droite. En combinant ces deux droites, on voit que <strong>la combinaison linéaire $c\mathbf{v} + d\mathbf{w}$ remplit un plan passant par l’origine</strong>.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/6/6f/Linjcomb.png" alt="Combinaisons linéaires de deux vecteurs" /></p><blockquote><p><em>Source de l’image</em></p><ul><li>Auteur: utilisateur Wikimédia <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="engendrement">Engendrement</h3><p>Ainsi, les combinaisons linéaires de vecteurs engendrent un espace; on parle de <strong>sous-espace engendré (span)</strong>.</p><blockquote class="prompt-info"><p><strong>Définition</strong><br /> Soit $S$ un sous-ensemble non vide de l’espace vectoriel $\mathbb{V}$. L’ensemble de toutes les combinaisons linéaires formées avec les vecteurs de $S$ s’appelle le <strong>sous-espace engendré</strong> de $S$ (span) et se note $\mathrm{span}(S)$. Par convention, $\mathrm{span}(\emptyset)={0}$.</p></blockquote><blockquote class="prompt-info"><p><strong>Définition</strong><br /> Pour un sous-ensemble $S$ de l’espace vectoriel $\mathbb{V}$, si $\mathrm{span}(S)=\mathbb{V}$, on dit que $S$ <strong>engendre</strong> $\mathbb{V}$ (génère, span).</p></blockquote><p>Bien que nous n’ayons pas encore présenté des notions comme sous-espace ou base, garder cet exemple en tête aidera à comprendre la notion d’espace vectoriel.</p>]]> </content> </entry> <entry><title xml:lang="fr">Résumé du cours « Pandas » de Kaggle (2) – Leçons 4‑6</title><link href="https://www.yunseo.kim/fr/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/fr/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="fr">Guide pratique de pandas pour nettoyer et transformer les données: résumé enrichi du cours « Pandas » de Kaggle. Cette seconde partie couvre les Leçons 4–6 (groupby, tri, dtypes, NaN, renommage, concat/join).</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Guide pratique de pandas pour nettoyer et transformer les données: résumé enrichi du cours « Pandas » de Kaggle. Cette seconde partie couvre les Leçons 4–6 (groupby, tri, dtypes, NaN, renommage, concat/join).</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><p>Je regroupe ici mes notes issues du cours <a href="https://www.kaggle.com/learn/pandas">Pandas</a> de Kaggle.<br /> Le volume étant conséquent, j’ai scindé l’article en deux parties.</p><ul><li><a href="/fr/posts/summary-of-kaggle-pandas-course-1/">Partie 1 : Leçons 1–3</a><li>Partie 2 : Leçons 4–6 (ce billet)</ul><p><img src="/assets/img/kaggle-pandas/certificate.png" alt="Certificat d’achèvement" /></p><h2 id="lesson-4-grouping-and-sorting">Lesson 4. Grouping and Sorting</h2><p>Il arrive souvent qu’on doive regrouper les données et appliquer des opérations par groupe, ou encore trier selon certains critères.</p><h3 id="analyse-par-groupe">Analyse par groupe</h3><p>La méthode <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html"><code class="language-plaintext highlighter-rouge">groupby()</code></a> regroupe les lignes partageant la même valeur dans une colonne donnée, puis permet d’inspecter ou de transformer chaque groupe.</p><p>Nous avons déjà vu la <a href="/fr/posts/summary-of-kaggle-pandas-course-1/#obtenir-un-apercu-des-donnees">méthode <code class="language-plaintext highlighter-rouge">value_counts()</code></a>. On peut reproduire un comportement équivalent avec <code class="language-plaintext highlighter-rouge">groupby()</code> comme suit:</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>regrouper le DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> par valeurs égales de la colonne <code class="language-plaintext highlighter-rouge">taster_name</code><li>renvoyer une Series avec la taille (nombre de lignes) de chaque groupe</ol><p>Ou bien:</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>regrouper le DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> par valeurs égales de la colonne <code class="language-plaintext highlighter-rouge">taster_name</code><li>dans chaque groupe, sélectionner la colonne <code class="language-plaintext highlighter-rouge">taster_name</code><li>renvoyer le nombre de valeurs non manquantes sous forme de Series</ol><p>Autrement dit, <code class="language-plaintext highlighter-rouge">value_counts()</code> est un raccourci pour ce type d’opération. Outre <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.count.html"><code class="language-plaintext highlighter-rouge">count()</code></a>, on peut utiliser toute fonction de synthèse de la même manière. Par exemple, pour obtenir le prix minimal par note:</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>regrouper le DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> par valeurs égales de la colonne <code class="language-plaintext highlighter-rouge">points</code><li>dans chaque groupe, sélectionner la colonne <code class="language-plaintext highlighter-rouge">price</code><li>renvoyer la valeur minimale sous forme de Series</ol><p>On peut aussi regrouper selon plusieurs colonnes. Pour sélectionner, par pays et par province, le vin ayant la note la plus élevée:</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>Une autre méthode utile des objets DataFrameGroupBy est <a href="https://pandas.pydata.org/docs/reference/api/pandas.core.groupby.DataFrameGroupBy.agg.html"><code class="language-plaintext highlighter-rouge">agg()</code></a>. Elle permet d’exécuter plusieurs fonctions à la fois sur chaque groupe.</p><blockquote class="prompt-tip"><p>En argument, on peut passer:</p><ul><li>une fonction<li>une chaîne avec le nom de la fonction<li>une liste de fonctions et/ou de noms de fonctions<li>un dictionnaire dont les clés sont des étiquettes d’axe et les valeurs des fonctions (ou listes de fonctions) à appliquer à cet axe</ul><p>Les fonctions doivent pouvoir:</p><ul><li>accepter un DataFrame en entrée, ou<li>être passées en argument à la méthode <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> <a href="/fr/posts/summary-of-kaggle-pandas-course-1/#applications-maps">vue plus haut</a></ul><p>Cet éclaircissement n’apparaît pas dans le cours Kaggle original; il est ajouté d’après la documentation officielle de pandas.</p></blockquote><p>Par exemple, pour calculer des statistiques de prix par pays:</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>Ici, <code class="language-plaintext highlighter-rouge">len</code> désigne la fonction Python intégrée <a href="https://docs.python.org/3/library/functions.html#len"><code class="language-plaintext highlighter-rouge">len()</code></a>. Dans cet exemple, on l’utilise pour afficher le nombre de valeurs de prix (<code class="language-plaintext highlighter-rouge">price</code>) par groupe (<code class="language-plaintext highlighter-rouge">country</code>), en <u>incluant les valeurs manquantes</u>. Comme la fonction accepte DataFrame/Series en entrée, elle est applicable ici.</p><p>La méthode <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.count.html"><code class="language-plaintext highlighter-rouge">count()</code></a> de pandas, elle, compte uniquement les <u>valeurs valides (non manquantes)</u>, d’où une différence de comportement.</p><p>Cette précision, absente du cours Kaggle, s’appuie sur la documentation officielle de Python et de pandas.</p></blockquote><h3 id="index-multi-niveaux">Index multi-niveaux</h3><p>Avec <code class="language-plaintext highlighter-rouge">groupby()</code>, on obtient parfois en sortie des DataFrame indexés par un index à plusieurs niveaux (MultiIndex) plutôt qu’un simple index plat.</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>Le MultiIndex offre des méthodes spécifiques aux structures hiérarchiques. Le guide utilisateur de pandas détaille les cas d’usage et bonnes pratiques dans la section <a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html">MultiIndex / advanced indexing</a>.</p><p>Cela dit, la méthode la plus fréquemment utilisée sera sans doute <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.reset_index.html"><code class="language-plaintext highlighter-rouge">reset_index()</code></a> pour aplatir l’index en index simple.</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="tri">Tri</h3><p>Si l’on observe <code class="language-plaintext highlighter-rouge">countries_reviewed</code>, on constate que le résultat d’un <code class="language-plaintext highlighter-rouge">groupby</code> est renvoyé dans l’ordre des valeurs d’index. Autrement dit, l’ordre des lignes provient des étiquettes d’index, pas du contenu.</p><p>On peut trier explicitement autrement avec <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html"><code class="language-plaintext highlighter-rouge">sort_values()</code></a>. Par exemple, trier pays et provinces par le nombre d’entrées (‘len’) croissant:</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>Par défaut, <code class="language-plaintext highlighter-rouge">sort_values()</code> trie par ordre croissant; on peut obtenir l’ordre décroissant via:</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>Pour trier par index, utilisez <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_index.html"><code class="language-plaintext highlighter-rouge">sort_index()</code></a>, avec la même interface et le même ordre par défaut (décroissant).</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>Enfin, on peut trier selon plusieurs colonnes en une fois:</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="lesson-5-data-types-and-missing-values">Lesson 5. Data Types and Missing Values</h2><p>Dans la pratique, les données ne sont pas toujours bien nettoyées; il faut souvent convertir les types vers ceux attendus, et gérer des valeurs manquantes. Lors d’un traitement ou d’une analyse, c’est très souvent l’étape la plus chronophage.</p><h3 id="types-de-données">Types de données</h3><p>Le type d’une colonne de DataFrame, ou d’une Series, est son <strong>dtype</strong>. On le consulte via l’attribut <code class="language-plaintext highlighter-rouge">dtype</code>. Exemple sur la colonne <code class="language-plaintext highlighter-rouge">price</code> de <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>On peut aussi consulter d’un coup le <code class="language-plaintext highlighter-rouge">dtype</code> de toutes les colonnes via <code class="language-plaintext highlighter-rouge">dtypes</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">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>Le dtype indique la représentation interne utilisée par pandas. Par exemple, <code class="language-plaintext highlighter-rouge">float64</code> pour un flottant 64 bits, <code class="language-plaintext highlighter-rouge">int64</code> pour un entier 64 bits.</p><p>Point notable: une colonne purement textuelle n’a pas un type « chaîne » natif; elle est typée génériquement <code class="language-plaintext highlighter-rouge">object</code>.</p><p>Avec <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.astype.html"><code class="language-plaintext highlighter-rouge">astype()</code></a>, on convertit une colonne d’un type à un autre. Par exemple, convertir <code class="language-plaintext highlighter-rouge">points</code> (en <code class="language-plaintext highlighter-rouge">int64</code>) en <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>L’index d’un DataFrame ou d’une Series possède lui aussi un type:</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>Pandas gère également des types externes, comme les catégories (categorical) et les séries temporelles (datetime).</p><h3 id="valeurs-manquantes">Valeurs manquantes</h3><p>Les entrées vides reçoivent la valeur <code class="language-plaintext highlighter-rouge">NaN</code> (abréviation de « Not a Number »). Pour des raisons techniques, <code class="language-plaintext highlighter-rouge">NaN</code> est toujours de type <code class="language-plaintext highlighter-rouge">float64</code>.</p><p>Pandas fournit des fonctions pour détecter les manquants. <a href="/fr/posts/summary-of-kaggle-pandas-course-1/#selection-conditionnelle">Nous avons effleuré cela précédemment</a>: en plus des méthodes, il existe les fonctions autonomes <a href="https://pandas.pydata.org/docs/reference/api/pandas.isna.html"><code class="language-plaintext highlighter-rouge">pd.isna</code></a> et <a href="https://pandas.pydata.org/docs/reference/api/pandas.notna.html"><code class="language-plaintext highlighter-rouge">pd.notna</code></a>. Elles renvoient un booléen (ou un tableau de booléens) indiquant si l’entrée est manquante ou non, et s’emploient ainsi:</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>Souvent, il faut détecter les manquants et les imputer. Une stratégie consiste à remplacer par une valeur fixe avec <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.fillna.html"><code class="language-plaintext highlighter-rouge">fillna()</code></a>. Exemple: remplacer tous les <code class="language-plaintext highlighter-rouge">NaN</code> de <code class="language-plaintext highlighter-rouge">reviews.region_2</code> par <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>On peut aussi propager vers l’avant (forward fill) ou l’arrière (backward fill) la valeur valide la plus proche, respectivement via <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.ffill.html"><code class="language-plaintext highlighter-rouge">ffill()</code></a> et <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>Autrefois, on pouvait utiliser <code class="language-plaintext highlighter-rouge">fillna()</code> avec le paramètre <code class="language-plaintext highlighter-rouge">method='ffill'</code>/<code class="language-plaintext highlighter-rouge">'bfill'</code>. Depuis pandas 2.1.0, cette approche est dépréciée; privilégiez <code class="language-plaintext highlighter-rouge">ffill()</code>/<code class="language-plaintext highlighter-rouge">bfill()</code> selon le besoin.</p></blockquote><p>Parfois, même sans manquants, il faut remplacer en masse certaines valeurs par d’autres. Le cours Kaggle illustre cela avec le changement de handle Twitter d’un critique; pour un exemple plus parlant côté coréen, imaginons ceci.</p><p>En République de Corée, on scinde le nord de la province du Gyeonggi pour créer une nouvelle entité administrative, <strong>Gyeonggibuk-do</strong>, et un jeu de données adopte ce nom. Quelqu’un propose ensuite, de manière farfelue, de renommer <strong>Gyeonggibuk-do</strong> en <strong>Pyeonghwanuri Special Self-Governing Province</strong> et parvient à l’imposer dans notre scénario fictif. <del>Fictif, certes, mais la ressemblance avec une situation réelle potentielle fait froid dans le dos.</del> Il faut alors remplacer dans le jeu de données la chaîne <code class="language-plaintext highlighter-rouge">"Gyeonggibuk-do"</code> par <code class="language-plaintext highlighter-rouge">"Pyeonghwanuri State"</code> ou <code class="language-plaintext highlighter-rouge">"Pyeonghwanuri Special Self-Governing Province"</code>. En pandas, une manière simple est d’utiliser <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>Ce code remplace efficacement toutes les occurrences de <code class="language-plaintext highlighter-rouge">"Gyeonggibuk-do"</code> par « le truc interminable » dans la colonne <code class="language-plaintext highlighter-rouge">province</code> du DataFrame <code class="language-plaintext highlighter-rouge">rok_2030_census</code>. <del>On se contente de soupirer de soulagement à l’idée que personne n’ait eu à exécuter ça dans la vraie vie.</del></p><p>Ce type de remplacement textuel sert aussi au nettoyage des manquants quand ceux-ci sont encodés par des chaînes comme <code class="language-plaintext highlighter-rouge">"Unknown"</code>, <code class="language-plaintext highlighter-rouge">"Undisclosed"</code>, <code class="language-plaintext highlighter-rouge">"Invalid"</code>, ce qui est courant dans des jeux construits par OCR d’anciens documents administratifs.</p><h2 id="lesson-6-renaming-and-combining">Lesson 6. Renaming and Combining</h2><p>Il arrive de devoir renommer une colonne ou un index, et de devoir combiner des DataFrame ou des Series.</p><h3 id="renommer">Renommer</h3><p>La méthode <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rename.html"><code class="language-plaintext highlighter-rouge">rename()</code></a> renomme des colonnes ou des index. Plusieurs formats d’arguments sont possibles, mais un dictionnaire Python est souvent le plus simple. Exemple: renommer la colonne <code class="language-plaintext highlighter-rouge">points</code> en <code class="language-plaintext highlighter-rouge">score</code>, et les index <code class="language-plaintext highlighter-rouge">0</code>, <code class="language-plaintext highlighter-rouge">1</code> en <code class="language-plaintext highlighter-rouge">firstEntry</code>, <code class="language-plaintext highlighter-rouge">secondEntry</code> dans <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="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>Renommer des colonnes est courant; renommer des index l’est beaucoup moins. Pour ce dernier cas, on préfère en général <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.set_index.html"><code class="language-plaintext highlighter-rouge">set_index()</code></a>, <a href="/fr/posts/summary-of-kaggle-pandas-course-1/#manipuler-lindex">comme vu précédemment</a>.</p><p>Les axes de lignes et de colonnes possèdent un attribut <code class="language-plaintext highlighter-rouge">name</code>. Avec <code class="language-plaintext highlighter-rouge">rename_axis()</code>, on peut aussi renommer ces axes. Par exemple, appeler l’axe des lignes <code class="language-plaintext highlighter-rouge">wines</code> et celui des colonnes <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="combiner-des-jeux-de-données">Combiner des jeux de données</h3><p>Pandas propose trois fonctions clés pour combiner des DataFrame/Series, de la plus simple à la plus riche: <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> et <a href="https://pandas.pydata.org/docs/reference/api/pandas.merge.html"><code class="language-plaintext highlighter-rouge">merge()</code></a>. Le cours Kaggle se concentre sur <code class="language-plaintext highlighter-rouge">concat()</code> et <code class="language-plaintext highlighter-rouge">join()</code>, la plupart des usages de <code class="language-plaintext highlighter-rouge">merge()</code> pouvant être couverts plus simplement par <code class="language-plaintext highlighter-rouge">join()</code>.</p><p><code class="language-plaintext highlighter-rouge">concat()</code> est la plus simple: elle « colle » plusieurs DataFrame/Series le long d’un axe. Utile quand les objets à concaténer partagent les mêmes colonnes. Par défaut, la concaténation se fait sur l’axe des lignes; avec <code class="language-plaintext highlighter-rouge">axis=1</code> ou <code class="language-plaintext highlighter-rouge">axis='columns'</code>, on concatène sur l’axe des colonnes.</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>D’après la <a href="(https://pandas.pydata.org/docs/reference/api/pandas.concat.html)">documentation officielle de pandas</a>, si vous devez assembler plusieurs lignes en un seul DataFrame, évitez d’ajouter ligne par ligne dans une boucle; stockez les lignes dans une liste puis concaténez-les en une fois avec <code class="language-plaintext highlighter-rouge">concat()</code>.</p></blockquote><p><code class="language-plaintext highlighter-rouge">join()</code> est plus riche: il joint un autre DataFrame sur l’index. Si des noms de colonnes se chevauchent, il faut fournir <code class="language-plaintext highlighter-rouge">lsuffix</code> et <code class="language-plaintext highlighter-rouge">rsuffix</code> pour distinguer les colonnes communes des deux DataFrame.</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="fr">Indicateurs de performance web (Web Vitals)</title><link href="https://www.yunseo.kim/fr/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-28T18:22:07+09:00</updated> <id>https://www.yunseo.kim/fr/posts/about-web-vitals/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Web Dev" /> <summary xml:lang="fr">Aperçu des Web Vitals et des critères Lighthouse: définitions, seuils et conseils pour comprendre chaque indicateur et optimiser les performances.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Aperçu des Web Vitals et des critères Lighthouse: définitions, seuils et conseils pour comprendre chaque indicateur et optimiser les performances.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="facteurs-qui-déterminent-les-performances-web">Facteurs qui déterminent les performances web</h2><p>Lors de l’optimisation des performances, on peut regrouper les facteurs déterminants en deux grandes catégories: performances de chargement et performances de rendu.</p><h3 id="performances-de-chargement-html">Performances de chargement HTML</h3><ul><li>Temps écoulé entre la première requête de page au serveur via le réseau et le moment où le navigateur commence à rendre le document HTML<li>Détermine la rapidité avec laquelle la page commence à s’afficher<li>Optimisation par la réduction des redirections, la mise en cache des réponses HTML, la compression des ressources, l’usage approprié d’un CDN, etc.</ul><h3 id="performances-de-rendu">Performances de rendu</h3><ul><li>Temps nécessaire au navigateur pour dessiner l’interface visible et la rendre interactive<li>Détermine la fluidité et la vitesse d’affichage<li>Optimisation via la suppression du CSS/JS inutile, la prévention des retards de chargement des polices et miniatures, la délégation des tâches lourdes à des Web Workers pour minimiser l’occupation du thread principal, l’optimisation des animations, etc.</ul><h2 id="indicateurs-de-performance-web-web-vitals">Indicateurs de performance web (Web Vitals)</h2><p>La description s’appuie sur <a href="https://web.dev/performance?hl=fr">web.dev</a> de Google et la <a href="https://developer.chrome.com/docs/lighthouse/performance/performance-scoring?hl=fr">documentation des développeurs Chrome</a>. Sauf raison particulière, il vaut mieux viser une amélioration globale plutôt que de se focaliser sur un seul indicateur, et identifier les véritables goulots d’étranglement de la page à optimiser. Lorsque des données réelles d’utilisateurs sont disponibles, il est préférable de se concentrer sur le premier quartile (Q1) plutôt que sur la moyenne ou le haut du panier, et de vérifier que les objectifs sont atteints même dans ces cas moins favorables.</p><h3 id="indicateurs-clés-de-performance-web-core-web-vitals">Indicateurs clés de performance web (Core Web Vitals)</h3><p>Comme nous le verrons, il existe plusieurs Web Vitals. Parmi eux, trois indicateurs, étroitement liés à l’expérience utilisateur et mesurables en conditions réelles, sont considérés comme particulièrement importants par Google: ce sont les <a href="https://web.dev/articles/vitals?hl=fr#core-web-vitals">Core Web Vitals</a>. Google les prend en compte dans le classement de son moteur de recherche; ils sont donc cruciaux pour l’optimisation pour les moteurs de recherche (SEO) du site.</p><ul><li><a href="#lcp-largest-contentful-paint">Largest Contentful Paint (LCP)</a>: reflète les <em>performances de chargement</em>, doit être ≤ 2,5 s<li><a href="https://web.dev/articles/inp?hl=fr">Interaction to Next Paint (INP)</a>: reflète la <em>réactivité</em>, doit être ≤ 200 ms<li><a href="#cls-cumulative-layout-shift">Cumulative Layout Shift (CLS)</a>: reflète la <em>stabilité visuelle</em>, doit rester ≤ 0,1</ul><p>Les Core Web Vitals sont conçus pour être mesurés en conditions réelles. Toutefois, à l’exception de l’INP, les deux autres peuvent aussi être mesurés en environnement simulé (Chrome DevTools, Lighthouse). L’INP exige de vraies interactions utilisateur et ne peut donc pas être mesuré en laboratoire; dans ce cas, le <a href="#tbt-total-blocking-time">TBT</a>, fortement corrélé à l’INP et de nature similaire, peut servir de référence, et <a href="https://web.dev/articles/vitals?hl=fr#lab_tools_to_measure_core_web_vitals">améliorer le TBT améliore généralement aussi l’INP</a>.</p><h3 id="pondération-du-score-de-performance-dans-lighthouse-10">Pondération du score de performance dans Lighthouse 10</h3><p><a href="https://developer.chrome.com/docs/lighthouse/performance/performance-scoring?hl=fr">Le score de performance de Lighthouse est la moyenne pondérée des métriques, avec les pondérations suivantes</a>.</p><table><thead><tr><th>Métrique<th>Pondération<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>Mesure le temps nécessaire pour rendre le premier contenu DOM après la requête de page<li>Considère comme contenu DOM les images, les éléments <code class="language-plaintext highlighter-rouge">&lt;canvas&gt;</code> non blancs, les SVG, etc.; le contenu des <code class="language-plaintext highlighter-rouge">iframe</code> n’est pas pris en compte</ul><blockquote class="prompt-tip"><p>Parmi les facteurs influençant fortement le FCP figure le temps de chargement des polices; la <a href="https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/?hl=fr">documentation des développeurs Chrome</a> recommande de consulter <a href="https://developer.chrome.com/docs/lighthouse/performance/font-display?hl=fr">l’article associé</a> pour l’optimiser.</p></blockquote><h4 id="critères-dévaluation-lighthouse">Critères d’évaluation Lighthouse</h4><p>Selon la <a href="https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/?hl=fr">documentation des développeurs Chrome</a>, les critères sont les suivants.</p><table><thead><tr><th>Couleur<th>FCP mobile (s)<th>FCP ordinateur (s)<tbody><tr><td>Vert (rapide)<td>0-1,8<td>0-0,9<tr><td>Orange (moyen)<td>1,8-3<td>0,9-1,6<tr><td>Rouge (lent)<td>supérieur à 3<td>supérieur à 1,6</table><h3 id="lcp-largest-contentful-paint">LCP (Largest Contentful Paint)</h3><ul><li>Mesure, au premier affichage de la page, le temps nécessaire pour rendre dans la fenêtre d’affichage (viewport) l’élément le plus volumineux (image, bloc de texte, vidéo, etc.) situé dans cette zone<li>Plus l’élément occupe de surface à l’écran, plus l’utilisateur est susceptible de le percevoir comme un contenu principal<li>Si le LCP est une image, on peut décomposer la durée en quatre sous-étapes; identifier le goulet d’étranglement est essentiel:<ol><li>Time to First Byte (TTFB): temps entre le début du chargement de la page et la réception du premier octet de la réponse HTML<li>Délai de chargement (Load delay): écart entre le TTFB et le moment où le navigateur commence à charger la ressource LCP<li>Temps de chargement (Load time): temps nécessaire pour charger la ressource LCP<li>Délai de rendu (Render delay): temps entre la fin du chargement de la ressource LCP et l’achèvement du rendu de l’élément LCP</ol></ul><h4 id="critères-dévaluation-lighthouse-1">Critères d’évaluation Lighthouse</h4><p>Selon la <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/?hl=fr">documentation des développeurs Chrome</a>, les critères sont les suivants.</p><table><thead><tr><th>Couleur<th>LCP mobile (s)<th>LCP ordinateur (s)<tbody><tr><td>Vert (rapide)<td>0-2,5<td>0-1,2<tr><td>Orange (moyen)<td>2,5-4<td>1,2-2,4<tr><td>Rouge (lent)<td>supérieur à 4<td>supérieur à 2,4</table><h3 id="tbt-total-blocking-time">TBT (Total Blocking Time)</h3><ul><li>Mesure le temps total pendant lequel la page ne répond pas aux interactions utilisateur (clics, taps, saisie clavier, etc.)<li>Parmi les tâches exécutées entre le FCP et le <a href="https://developer.chrome.com/docs/lighthouse/performance/interactive?hl=fr">TTI (Time to Interactive)</a>*, on considère comme <a href="https://web.dev/articles/long-tasks-devtools?hl=fr">long tasks</a> celles qui durent ≥ 50 ms; pour chacune, la portion excédant 50 ms constitue la <em>partie bloquante (blocking portion)</em> et la somme de ces portions correspond au TBT</ul><blockquote class="prompt-info"><p>* Le TTI lui-même est trop sensible aux anomalies réseau et aux long tasks, avec une faible cohérence et une grande variabilité; en conséquence, <a href="https://developer.chrome.com/blog/lighthouse-10-0#scoring-changes">il a été retiré du score de performance à partir de Lighthouse 10</a>.</p></blockquote><blockquote class="prompt-tip"><p>Les causes les plus fréquentes des long tasks sont le chargement, l’analyse et l’exécution JavaScript inutiles ou inefficaces. La <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/?hl=fr">documentation des développeurs Chrome</a> et <a href="https://web.dev/articles/long-tasks-devtools#what_is_causing_my_long_tasks?hl=fr">web.dev de Google</a> recommandent de recourir au <a href="https://web.dev/articles/reduce-javascript-payloads-with-code-splitting?hl=fr">code splitting</a> pour réduire la taille du payload et faire en sorte que chaque module s’exécute en moins de 50 ms, et si nécessaire de déplacer leur exécution en multithread via un Service Worker distinct plutôt que sur le thread principal.</p></blockquote><h4 id="critères-dévaluation-lighthouse-2">Critères d’évaluation Lighthouse</h4><p>Selon la <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/?hl=fr">documentation des développeurs Chrome</a>, les critères sont les suivants.</p><table><thead><tr><th>Couleur<th>TBT mobile (ms)<th>TBT ordinateur (ms)<tbody><tr><td>Vert (rapide)<td>0-200<td>0-150<tr><td>Orange (moyen)<td>200-600<td>150-350<tr><td>Rouge (lent)<td>supérieur à 600<td>supérieur à 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>Exemple de changement de mise en page soudain</em></p><blockquote><p>Source de la vidéo: <a href="https://web.dev/articles/cls?hl=fr">Cumulative Layout Shift (CLS) | Articles | web.dev</a></p></blockquote><p><del>On sent une profonde colère dans le mouvement du curseur</del></p><ul><li>Les changements de mise en page inattendus nuisent à l’expérience: le texte se déplace, on perd sa ligne de lecture, on clique sur le mauvais lien/bouton, etc.<li>La méthode détaillée de calcul du score CLS est décrite sur <a href="https://web.dev/articles/cls">web.dev de Google</a><li>Comme l’illustre l’image ci-dessous, il faut viser ≤ 0,1</ul><p><img src="https://web.dev/static/articles/cls/image/good-cls-values.svg" alt="Quel est un bon score CLS ?" width="640" height="480" /></p><blockquote><p>Source de l’image: <a href="https://web.dev/articles/cls#what-is-a-good-cls-score?hl=fr">Cumulative Layout Shift (CLS) | Articles | web.dev</a></p></blockquote><h3 id="si-speed-index">SI (Speed Index)</h3><ul><li>Mesure la vitesse à laquelle le contenu devient visuellement disponible pendant le chargement de la page<li>Lighthouse enregistre le chargement sous forme de vidéo, analyse la progression des frames, puis utilise le <a href="https://github.com/paulirish/speedline">module Node.js Speedline</a> pour calculer le score SI</ul><blockquote class="prompt-tip"><p>En plus de ce qui a été évoqué pour <a href="#fcp-first-contentful-paint">FCP</a>, <a href="#lcp-largest-contentful-paint">LCP</a> et <a href="#tbt-total-blocking-time">TBT</a>, toute action qui accélère le chargement de la page profite aussi au SI. Celui-ci reflète non pas une étape unique, mais l’ensemble du processus de chargement.</p></blockquote><h4 id="critères-dévaluation-lighthouse-3">Critères d’évaluation Lighthouse</h4><p>Selon la <a href="https://developer.chrome.com/docs/lighthouse/performance/speed-index/?hl=fr">documentation des développeurs Chrome</a>, les critères sont les suivants.</p><table><thead><tr><th>Couleur<th>SI mobile (s)<th>SI ordinateur (s)<tbody><tr><td>Vert (rapide)<td>0-3,4<td>0-1,3<tr><td>Orange (moyen)<td>3,4-5,8<td>1,3-2,3<tr><td>Rouge (lent)<td>supérieur à 5,8<td>supérieur à 2,3</table>]]> </content> </entry> <entry><title xml:lang="fr">Champ gravitationnel et potentiel gravitationnel</title><link href="https://www.yunseo.kim/fr/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-11-03T20:50:45+09:00</updated> <id>https://www.yunseo.kim/fr/posts/gravitational-field-and-potential/</id> <author> <name>Yunseo Kim</name> </author> <category term="Physics" /> <category term="Classical Dynamics" /> <summary xml:lang="fr">Découvrez la définition du vecteur champ gravitationnel et du potentiel gravitationnel selon la loi de la gravitation universelle de Newton, et explorez deux exemples importants : le théorème de la coquille sphérique et les courbes de rotation galactique.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Découvrez la définition du vecteur champ gravitationnel et du potentiel gravitationnel selon la loi de la gravitation universelle de Newton, et explorez deux exemples importants : le théorème de la coquille sphérique et les courbes de rotation galactique.</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>Loi de la gravitation universelle de Newton : $\mathbf{F} = -G\cfrac{mM}{r^2}\mathbf{e}_r$<li>Pour les objets ayant une distribution de masse continue et une taille : $\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}})$ : densité de masse au point situé au vecteur position $\mathbf{r^{\prime}}$ depuis une origine arbitraire<li>$dv^{\prime}$ : élément de volume au point situé au vecteur position $\mathbf{r^{\prime}}$ depuis une origine arbitraire</ul><li><strong>Vecteur champ gravitationnel</strong> :<ul><li>Vecteur représentant la force par unité de masse qu’une particule reçoit dans un champ créé par un objet de masse $M$<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>Dimension de <em>force par unité de masse</em> ou d’<em>accélération</em></ul><li><strong>Potentiel gravitationnel</strong> :<ul><li>$\mathbf{g} \equiv -\nabla \Phi$<li>Dimension de (<em>force par unité de masse</em>) × (<em>distance</em>) ou d’<em>énergie par unité de masse</em><li>$\Phi = -G\cfrac{M}{r}$<li>Seule la différence relative du potentiel gravitationnel a un sens, pas une valeur spécifique<li>On fixe généralement la condition $\Phi \to 0$ quand $r \to \infty$ pour éliminer l’ambiguïté<li>$U = m\Phi, \quad \mathbf{F} = -\nabla U$</ul><li><strong>Potentiel gravitationnel à l’intérieur et à l’extérieur d’une coquille sphérique (théorème de la coquille)</strong><ul><li>Quand $R&gt;a$ :<ul><li>$\Phi(R&gt;a) = -\cfrac{GM}{R}$<li>Pour calculer le potentiel gravitationnel en un point extérieur dû à une distribution de matière à symétrie sphérique, on peut considérer l’objet comme une masse ponctuelle</ul><li>Quand $R&lt;b$ :<ul><li>$\Phi(R&lt;b) = -2\pi\rho G(a^2 - b^2)$<li>À l’intérieur d’une coquille de masse à symétrie sphérique, le potentiel gravitationnel est constant indépendamment de la position, et la gravité exercée est nulle</ul><li>Quand $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="champ-gravitationnel">Champ gravitationnel</h2><h3 id="loi-de-la-gravitation-universelle-de-newton">Loi de la gravitation universelle de Newton</h3><p>Newton avait déjà systématisé et vérifié numériquement la loi de la gravitation universelle avant 11666 HE. Cependant, il fallut encore 20 ans avant qu’il publie ses résultats dans son ouvrage <em>Principia</em> en 11687 HE, car il ne pouvait pas justifier la méthode de calcul qui supposait que la Terre et la Lune étaient des masses ponctuelles sans taille. Heureusement, <a href="#quand-ra">en utilisant le calcul différentiel que Newton inventa par la suite, nous pouvons démontrer beaucoup plus facilement ce problème qui n’était pas simple pour Newton dans les années 11600</a>.</p><p>Selon la loi de la gravitation universelle de Newton, <em>chaque particule de masse attire toutes les autres particules de l’univers avec une force proportionnelle au produit des deux masses et inversement proportionnelle au carré de la distance qui les sépare.</em> Mathématiquement, cela s’exprime comme suit :</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>Source de l’image</em></p><ul><li>Auteur : utilisateur 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>Le vecteur unitaire $\mathbf{e}_r$ pointe de $M$ vers $m$, et le signe négatif indique que la force est attractive. Autrement dit, $m$ est attiré vers $M$.</p><h3 id="expérience-de-cavendish">Expérience de Cavendish</h3><p>La vérification expérimentale de cette loi et la détermination de la valeur de $G$ furent réalisées en 11798 HE par le physicien britannique Henry Cavendish. L’expérience de Cavendish utilise une balance de torsion constituée de deux petites sphères fixées aux extrémités d’une tige légère. Ces deux sphères sont chacune attirées vers deux autres grosses sphères situées à proximité. La valeur officielle de $G$ déterminée à ce jour est $6.673 \pm 0.010 \times 10^{-11} \mathrm{N\cdot m^2/kg^2}$.</p><blockquote class="prompt-tip"><p>Bien que $G$ soit l’une des constantes fondamentales connues depuis le plus longtemps, elle n’est connue qu’avec une précision plus faible que la plupart des autres constantes fondamentales comme $e$, $c$, $\hbar$. Aujourd’hui encore, de nombreuses recherches sont menées pour déterminer la valeur de $G$ avec une plus grande précision.</p></blockquote><h3 id="cas-dobjets-ayant-une-taille">Cas d’objets ayant une taille</h3><p>La loi de l’équation ($\ref{eqn:law_of_gravitation}$) ne s’applique rigoureusement qu’aux <em>particules ponctuelles</em>. Si l’un ou les deux objets ont une taille, il faut ajouter l’hypothèse supplémentaire que le champ gravitationnel est un <em>champ linéaire</em> pour calculer la force. Autrement dit, on suppose que la gravité totale qu’une particule de masse $m$ reçoit de plusieurs autres particules peut être obtenue en additionnant vectoriellement chaque force. Pour les objets à distribution de matière continue, on remplace la somme par une intégrale comme suit :</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}})$ : densité de masse au point situé au vecteur position $\mathbf{r^{\prime}}$ depuis une origine arbitraire<li>$dv^{\prime}$ : élément de volume au point situé au vecteur position $\mathbf{r^{\prime}}$ depuis une origine arbitraire</ul><p>Si les objets de masse $M$ et de masse $m$ ont tous deux une taille et qu’on veut calculer la gravité totale, une seconde intégrale de volume sur $m$ est également nécessaire.</p><h3 id="vecteur-champ-gravitationnel">Vecteur champ gravitationnel</h3><p>Le <strong>vecteur champ gravitationnel</strong> $\mathbf{g}$ est défini comme le vecteur représentant la force par unité de masse qu’une particule reçoit dans un champ créé par un objet de masse $M$ :</p>\[\mathbf{g} = \frac{\mathbf{F}}{m} = - G \frac{M}{r^2}\mathbf{e}_r \label{eqn:g_vector}\tag{3}\]<p>ou</p>\[\boxed{\mathbf{g} = - G \int_V \frac{\rho(\mathbf{r^\prime})\mathbf{e}_r}{r^2}dv^\prime} \tag{4}\]<p>Ici, la direction de $\mathbf{e}_r$ varie selon $\mathbf{r^\prime}$.</p><p>Cette quantité $\mathbf{g}$ a la dimension de <em>force par unité de masse</em> ou d’<em>accélération</em>. La magnitude du vecteur champ gravitationnel $\mathbf{g}$ près de la surface terrestre est égale à ce que nous appelons la <strong>constante d’accélération gravitationnelle</strong>, avec $|\mathbf{g}| \approx 9.80\mathrm{m/s^2}$.</p><h2 id="potentiel-gravitationnel">Potentiel gravitationnel</h2><h3 id="définition">Définition</h3><p>Le vecteur champ gravitationnel $\mathbf{g}$ varie en $1/r^2$, et satisfait donc la condition ($\nabla \times \mathbf{g} \equiv 0$) pour être exprimé comme le gradient d’une fonction scalaire (potentiel). On peut donc écrire :</p>\[\mathbf{g} \equiv -\nabla \Phi \label{eqn:gradient_phi}\tag{5}\]<p>où $\Phi$ est appelé <strong>potentiel gravitationnel</strong>, et a la dimension de (<em>force par unité de masse</em>) × (<em>distance</em>) ou d’<em>énergie par unité de masse</em>.</p><p>Puisque $\mathbf{g}$ ne dépend que du rayon, $\Phi$ varie également selon $r$. À partir des équations ($\ref{eqn:g_vector}$) et ($\ref{eqn:gradient_phi}$) :</p>\[\nabla\Phi = \frac{d\Phi}{dr}\mathbf{e}_r = G\frac{M}{r^2}\mathbf{e}_r\]<p>En intégrant, on obtient :</p>\[\boxed{\Phi = -G\frac{M}{r}} \label{eqn:g_potential}\tag{6}\]<p>Puisque seule la différence relative du potentiel gravitationnel a un sens et non la magnitude d’une valeur absolue, on peut omettre la constante d’intégration. On fixe généralement la condition $\Phi \to 0$ quand $r \to \infty$ pour éliminer l’ambiguïté, et l’équation ($\ref{eqn:g_potential}$) satisfait également cette condition.</p><p>Le potentiel gravitationnel pour une distribution continue de matière est :</p>\[\Phi = -G\int_V \frac{\rho(\mathbf{r\prime})}{r}dv^\prime \label{eqn:g_potential_v}\tag{7}\]<p>Pour une distribution surfacique de masse sur une coquille mince :</p>\[\Phi = -G\int_S \frac{\rho_s}{r}da^\prime. \label{eqn:g_potential_s}\tag{8}\]<p>Et pour une source de masse linéaire de densité linéaire $\rho_l$ :</p>\[\Phi = -G\int_\Gamma \frac{\rho_l}{r}ds^\prime. \label{eqn:g_potential_l}\tag{9}\]<h3 id="signification-physique">Signification physique</h3><p>Considérons le travail par unité de masse $dW^\prime$ qu’un objet effectue lorsqu’il se déplace de $d\mathbf{r}$ dans un champ gravitationnel.</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>Dans cette équation, $\Phi$ est une fonction des seules coordonnées de position, exprimée comme $\Phi=\Phi(x_1, x_2, x_3) = \Phi(x_i)$. On peut donc voir que le travail par unité de masse qu’un objet effectue lorsqu’il se déplace d’un point à un autre dans un champ gravitationnel est égal à la différence de potentiel entre ces deux points.</p><p>Si on définit le potentiel gravitationnel à l’infini comme $0$, alors $\Phi$ en un point quelconque peut être interprété comme le travail par unité de masse nécessaire pour déplacer l’objet de l’infini jusqu’à ce point. L’énergie potentielle d’un objet est égale au produit de sa masse et du potentiel gravitationnel $\Phi$, donc si $U$ est l’énergie potentielle :</p>\[U = m\Phi. \label{eqn:potential_e}\tag{11}\]<p>Par conséquent, la gravité qu’un objet subit s’obtient en appliquant un signe négatif au gradient de son énergie potentielle.</p>\[\mathbf{F} = -\nabla U \label{eqn:force_and_potential}\tag{12}\]<p>Lorsqu’un objet est placé dans un champ gravitationnel créé par une masse, il y a toujours une énergie potentielle. Cette énergie potentielle appartient strictement au champ lui-même, mais par convention, on l’exprime comme l’énergie potentielle de l’objet.</p><h2 id="exemple--potentiel-gravitationnel-à-lintérieur-et-à-lextérieur-dune-coquille-sphérique-théorème-de-la-coquille">Exemple : Potentiel gravitationnel à l’intérieur et à l’extérieur d’une coquille sphérique (théorème de la coquille)</h2><h3 id="configuration-des-coordonnées-et-expression-du-potentiel-gravitationnel-par-intégrale">Configuration des coordonnées et expression du potentiel gravitationnel par intégrale</h3><p>Calculons le potentiel gravitationnel à l’intérieur et à l’extérieur d’une coquille sphérique uniforme de rayon intérieur $b$ et de rayon extérieur $a$. Bien qu’on puisse obtenir la gravité due à la coquille sphérique en calculant directement les composantes de force agissant sur une masse unitaire dans le champ, la méthode du potentiel est plus simple.</p><p><img src="/assets/img/gravitational-field-and-potential/spherical-shell.png" alt="Spherical shell" /></p><p>Calculons le potentiel au point $P$ situé à une distance $R$ du centre dans la figure ci-dessus. En supposant une distribution de masse uniforme de la coquille, $\rho(r^\prime)=\rho$, et par symétrie par rapport à l’angle azimutal $\phi$ autour de la ligne reliant le centre de la sphère au point $P$ :</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>Selon la loi des cosinus :</p>\[r^2 = {r^\prime}^2 + R^2 - 2r^\prime R \cos\theta \label{eqn:law_of_cosines}\tag{14}\]<p>et puisque $R$ est constant, en dérivant cette équation par rapport à $r^\prime$ :</p>\[2rdr = 2r^\prime R \sin\theta d\theta\] \[\frac{\sin\theta}{r}d\theta = \frac{dr}{r^\prime R} \tag{15}\]<p>En substituant ceci dans l’équation ($\ref{eqn:spherical_shell_1}$) :</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>où $r_\mathrm{max}$ et $r_\mathrm{min}$ sont déterminés par la position du point $P$.</p><h3 id="quand-ra">Quand $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>La masse $M$ de la coquille sphérique est :</p>\[M = \frac{4}{3}\pi\rho(a^3 - b^3) \label{eqn:mass_of_shell}\tag{18}\]<p>donc le potentiel est :</p>\[\boxed{\Phi(R&gt;a) = -\frac{GM}{R}} \label{eqn:spherical_shell_outside_2}\tag{19}\]<blockquote class="prompt-info"><p>En comparant le potentiel gravitationnel dû à une masse ponctuelle $M$ de l’équation ($\ref{eqn:g_potential}$) avec le résultat que nous venons d’obtenir ($\ref{eqn:spherical_shell_outside_2}$), on voit qu’ils sont identiques. Cela signifie que pour calculer le potentiel gravitationnel en un point extérieur dû à une distribution de matière à symétrie sphérique, on peut considérer que toute la masse est concentrée au centre. Ceci s’applique à la plupart des corps célestes sphériques d’une certaine taille comme la Terre ou la Lune, qui peuvent être considérés comme une superposition d’innombrables coquilles sphériques concentriques de différents diamètres, comme des <a href="https://en.wikipedia.org/wiki/Matryoshka_doll">poupées russes</a>. Ceci constitue la <a href="#loi-de-la-gravitation-universelle-de-newton">justification pour supposer que des corps célestes comme la Terre ou la Lune sont des masses ponctuelles sans taille lors des calculs</a>.</p></blockquote><h3 id="quand-rb">Quand $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>À l’intérieur d’une coquille de masse à symétrie sphérique, le potentiel gravitationnel est constant indépendamment de la position, et la gravité exercée est nulle.</p></blockquote><blockquote class="prompt-tip"><p>Ceci constitue également une preuve majeure que la “théorie de la Terre creuse”, l’une des pseudosciences représentatives, est absurde. Si la Terre était une coquille sphérique avec un intérieur vide comme le prétend la théorie de la Terre creuse, la gravité terrestre n’agirait sur aucun objet à l’intérieur de cette cavité. Compte tenu de la masse et du volume de la Terre, une cavité terrestre ne peut pas exister, et même s’il y en avait une, les êtres vivants qui s’y trouveraient ne vivraient pas en prenant l’intérieur de la coquille sphérique comme sol, mais flotteraient en état d’apesanteur comme dans une station spatiale.<br /> <a href="https://youtu.be/VD6xJq8NguY?si=szgtuLkuk6rPJag3">Des micro-organismes peuvent vivre dans les couches géologiques profondes à quelques kilomètres sous terre</a>, mais au moins pas sous la forme prétendues par la théorie de la Terre creuse. J’aime beaucoup le roman de Jules Verne “Voyage au centre de la Terre” et le film “Journey to the Center of the Earth”, mais il faut apprécier les œuvres de fiction comme des fictions et ne pas les croire sérieusement.</p></blockquote><h3 id="quand-bra">Quand $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="résultats">Résultats</h3><p>Les graphiques suivants représentent le potentiel gravitationnel $\Phi$ dans les trois régions calculées précédemment, ainsi que la magnitude du vecteur champ gravitationnel correspondant $|\mathbf{g}|$ en fonction de la distance $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>Code de visualisation Python : <a href="https://github.com/yunseo-kim/physics-visualizations/blob/main/src/shell_theorem.py">dépôt yunseo-kim/physics-visualizations</a><li>Licence : <a href="https://github.com/yunseo-kim/physics-visualizations?tab=readme-ov-file#license">Voir ici</a></ul></blockquote><p>On peut voir que le potentiel gravitationnel et la magnitude du vecteur champ gravitationnel sont continus. Si le potentiel gravitationnel était discontinu en un point, le gradient du potentiel en ce point, c’est-à-dire la magnitude de la gravité, deviendrait infini, ce qui n’est pas physiquement valable, donc la fonction potentielle doit être continue en tous points. Cependant, la <em>dérivée</em> du vecteur champ gravitationnel est discontinue aux surfaces intérieure et extérieure de la coquille.</p><h2 id="exemple--courbes-de-rotation-galactique">Exemple : Courbes de rotation galactique</h2><p>Selon les observations astronomiques, dans de nombreuses galaxies spirales en rotation autour de leur centre, comme notre Voie lactée ou la galaxie d’Andromède, la plupart des masses observables sont concentrées près du centre. Cependant, les vitesses orbitales des masses dans ces galaxies spirales, comme on peut le voir dans le graphique suivant, ne correspondent pas aux valeurs théoriquement prédites à partir de la distribution de masse observable et restent presque constantes au-delà d’une certaine distance.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/b/b9/GalacticRotation2.svg" alt="Galactic Rotation" width="972" /></p><blockquote><p><em>Source de l’image</em></p><ul><li>Auteur : utilisateur Wikipedia <a href="https://en.wikipedia.org/wiki/User:PhilHibbs">PhilHibbs</a><li>Licence : Domaine Public</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>Gauche : rotation galactique prédite à partir de la masse observable | Droite : rotation galactique observée.</em></p><blockquote><p><em>Source de la vidéo</em></p><ul><li>Lien vers le fichier original (vidéo Ogg Theora) : <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>Auteur : <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>Méthode de simulation et code utilisés : <a href="https://beltoforion.de/en/spiral_galaxy_renderer/">https://beltoforion.de/en/spiral_galaxy_renderer/</a></ul></blockquote><blockquote class="prompt-danger"><p>Le fichier image <code class="language-plaintext highlighter-rouge">Rotation curve of spiral galaxy Messier 33 (Triangulum).png</code>, précédemment inséré sur cette page, <a href="https://commons.wikimedia.org/wiki/Commons:Deletion_requests/File:Rotation_curve_of_spiral_galaxy_Messier_33_(Triangulum).png">a été supprimé de Wikimedia Commons</a> car il s’est avéré être une œuvre dérivée plagiée du contenu non libre du <a href="https://markwhittle.uvacreate.virginia.edu/">professeur Mark Whittle</a> (University of Virginia) par l’utilisateur Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Accrama">Mario De Leo</a>, sans citation appropriée. Il a donc été retiré également de cette page.</p></blockquote><p>Prédisons la vitesse orbitale en fonction de la distance lorsque la masse de la galaxie est concentrée au centre, confirmons que cette prédiction ne correspond pas aux observations, et montrons que la masse $M(R)$ distribuée dans un rayon $R$ du centre galactique doit être proportionnelle à $R$ pour expliquer les résultats observés.</p><p>D’abord, si la masse galactique $M$ est concentrée au centre, la vitesse orbitale à la distance $R$ est :</p>\[\frac{GMm}{R^2} = \frac{mv^2}{R}\] \[v = \sqrt{\frac{GM}{R}} \propto \frac{1}{\sqrt{R}}.\]<p>Dans ce cas, on prédit une vitesse orbitale décroissant en $1/\sqrt{R}$ comme indiqué par les lignes pointillées dans les deux graphiques ci-dessus, mais selon les observations, la vitesse orbitale $v$ reste presque constante indépendamment de la distance $R$, donc la prédiction ne correspond pas aux observations. Ces résultats observationnels ne peuvent être expliqués que si $M(R)\propto R$.</p><p>En posant $M(R) = kR$ avec une constante de proportionnalité $k$ :</p>\[v = \sqrt{\frac{GM(R)}{R}} = \sqrt{Gk}\ \text{(constante)}.\]<p>De ceci, les astrophysiciens concluent qu’il doit y avoir de la “matière noire” non découverte dans de nombreuses galaxies, et que cette matière noire doit représenter plus de 90% de la masse de l’univers. Cependant, l’identité de la matière noire n’a pas encore été clairement élucidée, et bien que ce ne soit pas la théorie dominante, il existe des tentatives comme la dynamique newtonienne modifiée (Modified Newtonian Dynamics, MOND) qui essaient d’expliquer les résultats observés sans supposer l’existence de matière noire. Aujourd’hui, ces domaines de recherche sont à la pointe de l’astrophysique.</p>]]> </content> </entry> <entry><title xml:lang="fr">Méthode des coefficients indéterminés</title><link href="https://www.yunseo.kim/fr/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-07-11T20:37:36+09:00</updated> <id>https://www.yunseo.kim/fr/posts/method-of-undetermined-coefficients/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="fr">Explorons la méthode des coefficients indéterminés, une méthode de résolution simple et utile pour les problèmes de valeurs initiales d&apos;équations différentielles ordinaires linéaires non homogènes à coefficients constants de forme spécifique, fréquemment utilisée en ingénierie pour les systèmes oscillants, les modèles de circuits électriques RLC, etc.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Explorons la méthode des coefficients indéterminés, une méthode de résolution simple et utile pour les problèmes de valeurs initiales d'équations différentielles ordinaires linéaires non homogènes à coefficients constants de forme spécifique, fréquemment utilisée en ingénierie pour les systèmes oscillants, les modèles de circuits électriques RLC, etc.</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>Domaine d’application de la méthode des coefficients indéterminés</strong> :<ul><li>Équations différentielles ordinaires linéaires ayant des <strong>coefficients constants $a$ et $b$</strong><li>Avec une entrée $r(x)$ composée de fonctions exponentielles, puissances de $x$, $\cos$ ou $\sin$, ou de sommes et produits de telles fonctions<li>Équation différentielle ordinaire linéaire $y^{\prime\prime} + ay^{\prime} + by = r(x)$</ul><li><strong>Règles de sélection pour la méthode des coefficients indéterminés</strong><ul><li><strong>(a) Règle de base</strong> : Si $r(x)$ dans l’équation ($\ref{eqn:linear_ode_with_constant_coefficients}$) est l’une des fonctions de la première colonne du tableau, choisir le $y_p$ correspondant de la même ligne et déterminer les coefficients indéterminés en substituant $y_p$ et ses dérivées dans l’équation ($\ref{eqn:linear_ode_with_constant_coefficients}$).<li><strong>(b) Règle de modification</strong> : Si le terme choisi pour $y_p$ devient une solution de l’équation différentielle homogène $y^{\prime\prime} + ay^{\prime} + by = 0$ correspondant à l’équation ($\ref{eqn:linear_ode_with_constant_coefficients}$), multiplier ce terme par $x$ (ou par $x^2$ si cette solution correspond à une racine double de l’équation caractéristique de l’EDO homogène).<li><strong>(c) Règle de somme</strong> : Si $r(x)$ est une somme de fonctions de la première colonne du tableau, choisir comme $y_p$ la somme des fonctions correspondantes de la deuxième colonne.</ul></ul><table><thead><tr><th style="text-align: left">Terme de $r(x)$<th style="text-align: left">Choix pour $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="prérequis">Prérequis</h2><ul><li><a href="/fr/posts/homogeneous-linear-odes-of-second-order/">EDOs linéaires homogènes du second ordre</a><li><a href="/fr/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs linéaires homogènes du second ordre à coefficients constants</a><li><a href="/fr/posts/euler-cauchy-equation/">Équation d’Euler-Cauchy</a><li><a href="/fr/posts/wronskian-existence-and-uniqueness-of-solutions/">Wronskien, existence et unicité des solutions</a><li><a href="/fr/posts/nonhomogeneous-linear-odes-of-second-order/">EDOs linéaires non homogènes du second ordre</a><li>Espaces vectoriels, génération linéaire (algèbre linéaire)</ul><h2 id="méthode-des-coefficients-indéterminés">Méthode des coefficients indéterminés</h2><p>Considérons l’équation différentielle ordinaire linéaire non homogène du second ordre</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x) \label{eqn:nonhomogeneous_linear_ode}\tag{1}\]<p>avec $r(x) \not\equiv 0$ et l’équation différentielle ordinaire homogène correspondante</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode}\tag{2}\]<p>Comme nous l’avons vu précédemment dans <a href="/fr/posts/nonhomogeneous-linear-odes-of-second-order/">EDOs linéaires non homogènes du second ordre</a>, pour résoudre le problème de valeurs initiales de l’équation différentielle ordinaire linéaire non homogène ($\ref{eqn:nonhomogeneous_linear_ode}$), il faut résoudre l’équation différentielle ordinaire homogène ($\ref{eqn:homogeneous_linear_ode}$) pour obtenir $y_h$, puis trouver une solution $y_p$ de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) pour obtenir la solution générale</p>\[y(x) = y_h(x) + y_p(x) \label{eqn:general_sol}\tag{3}\]<p>Comment peut-on alors trouver $y_p$ ? La méthode générale pour trouver $y_p$ est la <strong>méthode de variation des paramètres</strong>, mais dans certains cas, on peut appliquer la <strong>méthode des coefficients indéterminés</strong> qui est beaucoup plus simple. Cette méthode est particulièrement utile car elle peut être appliquée aux systèmes oscillants et aux modèles de circuits électriques RLC, et est donc fréquemment utilisée en ingénierie.</p><p>La méthode des coefficients indéterminés convient aux équations différentielles ordinaires linéaires ayant des <strong>coefficients constants $a$ et $b$</strong>, avec une entrée $r(x)$ composée de fonctions exponentielles, puissances de $x$, $\cos$ ou $\sin$, ou de sommes et produits de telles fonctions</p>\[y^{\prime\prime} + ay^{\prime} + by = r(x) \label{eqn:linear_ode_with_constant_coefficients}\tag{4}\]<p>Le point clé de la méthode des coefficients indéterminés est que ce type de $r(x)$ a des dérivées de forme similaire à lui-même. Pour appliquer la méthode des coefficients indéterminés, on choisit un $y_p$ de forme similaire à $r(x)$ mais avec des coefficients indéterminés qui sont déterminés en substituant ce $y_p$ et ses dérivées dans l’équation différentielle ordinaire donnée. Les règles pour choisir un $y_p$ approprié pour les formes de $r(x)$ pratiquement importantes en ingénierie sont les suivantes.</p><blockquote class="prompt-info"><p><strong>Règles de sélection pour la méthode des coefficients indéterminés</strong><br /> <strong>(a) Règle de base</strong> : Si $r(x)$ dans l’équation ($\ref{eqn:linear_ode_with_constant_coefficients}$) est l’une des fonctions de la première colonne du tableau, choisir le $y_p$ correspondant de la même ligne et déterminer les coefficients indéterminés en substituant $y_p$ et ses dérivées dans l’équation ($\ref{eqn:linear_ode_with_constant_coefficients}$).<br /> <strong>(b) Règle de modification</strong> : Si le terme choisi pour $y_p$ devient une solution de l’équation différentielle homogène $y^{\prime\prime} + ay^{\prime} + by = 0$ correspondant à l’équation ($\ref{eqn:linear_ode_with_constant_coefficients}$), multiplier ce terme par $x$ (ou par $x^2$ si cette solution correspond à une racine double de l’équation caractéristique de l’EDO homogène).<br /> <strong>(c) Règle de somme</strong> : Si $r(x)$ est une somme de fonctions de la première colonne du tableau, choisir comme $y_p$ la somme des fonctions correspondantes de la deuxième colonne.</p><table><thead><tr><th style="text-align: left">Terme de $r(x)$<th style="text-align: left">Choix pour $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>Cette méthode est non seulement simple mais présente aussi l’avantage d’être auto-correctrice. Si on choisit mal $y_p$ ou si on sélectionne trop peu de termes, on aboutit à une contradiction, et si on choisit trop de termes, les coefficients des termes inutiles deviennent $0$ et on obtient le bon résultat. Même si quelque chose se passe mal lors de l’application de la méthode des coefficients indéterminés, on s’en aperçoit naturellement pendant le processus de résolution, donc si on a choisi un $y_p$ raisonnablement approprié selon les règles de sélection ci-dessus, on peut l’essayer sans crainte.</p><h3 id="démonstration-de-la-règle-de-somme">Démonstration de la règle de somme</h3><p>Considérons l’équation différentielle ordinaire linéaire non homogène</p>\[y^{\prime\prime} + ay^{\prime} + by = r_1(x) + r_2(x)\]<p>de la forme $r(x) = r_1(x) + r_2(x)$. Supposons maintenant que les deux équations suivantes ayant le même membre de gauche mais avec $r_1$ et $r_2$ comme entrées</p>\[\begin{gather*} y^{\prime\prime} + ay^{\prime} + by = r_1(x) \\ y^{\prime\prime} + ay^{\prime} + by = r_2(x) \end{gather*}\]<p>ont respectivement ${y_p}_1$ et ${y_p}_2$ comme solutions. En notant le membre de gauche de l’équation donnée par $L[y]$, par la linéarité de $L[y]$, pour $y_p = {y_p}_1 + {y_p}_2$, on satisfait ce qui suit, donc la règle de somme est établie.</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="exemple--yprimeprime--ayprime--by--kegamma-x">Exemple : $y^{\prime\prime} + ay^{\prime} + by = ke^{\gamma x}$</h2><p>Selon la règle de base (a), on pose $y_p = Ce^{\gamma x}$ et on substitue dans l’équation donnée $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="cas-où-gamma2--agamma--b-neq-0">Cas où $\gamma^2 + a\gamma + b \neq 0$</h3><p>On peut déterminer le coefficient indéterminé $C$ et obtenir $y_p$ comme suit :</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="cas-où-gamma2--agamma--b--0">Cas où $\gamma^2 + a\gamma + b = 0$</h3><p>Dans ce cas, il faut appliquer la règle de modification (b). D’abord, en utilisant $b = -\gamma^2 - a\gamma = -\gamma(a + \gamma)$, trouvons les racines de l’équation caractéristique de l’EDO homogène $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>On obtient ainsi la base de l’EDO homogène</p>\[y_1 = e^{\gamma x}, \quad y_2 = e^{(-a - \gamma)x}\]<h4 id="cas-où-gamma-neq--a-gamma">Cas où $\gamma \neq -a-\gamma$</h4><p>Puisque le $Ce^{\gamma x}$ choisi pour $y_p$ est une solution de l’EDO homogène correspondant à l’équation donnée mais n’est pas une racine double, selon la règle de modification (b), on multiplie ce terme par $x$ et on pose $y_p = Cxe^{\gamma x}$.</p><p>En substituant maintenant le $y_p$ modifié dans l’équation donnée $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="cas-où-gamma---a-gamma">Cas où $\gamma = -a-\gamma$</h4><p>Dans ce cas, le $Ce^{\gamma x}$ choisi pour $y_p$ est une racine double de l’EDO homogène correspondant à l’équation donnée, donc selon la règle de modification (b), on multiplie ce terme par $x^2$ et on pose $y_p = Cx^2 e^{\gamma x}$.</p><p>En substituant maintenant le $y_p$ modifié dans l’équation donnée $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="extension-de-la-méthode-des-coefficients-indéterminés--rx-sous-forme-de-produits-de-fonctions">Extension de la méthode des coefficients indéterminés : $r(x)$ sous forme de produits de fonctions</h2><p>Considérons l’équation différentielle ordinaire linéaire non homogène</p>\[y^{\prime\prime} + ay^{\prime} + by = C x^n e^{\alpha x}\cos(\omega x)\]<p>de la forme $r(x) = k x^n e^{\alpha x}\cos(\omega x)$. Si $r(x)$ peut s’exprimer comme une fonction exponentielle $e^{\alpha x}$, une puissance de $x$ $x^m$, $\cos{\omega x}$ ou $\sin{\omega x}$ (ici on suppose $\cos$, ce qui ne fait perdre aucune généralité), ou des sommes et produits de telles fonctions (c’est-à-dire qu’elle peut s’exprimer comme des sommes et produits des fonctions de la première colonne du tableau précédent), nous montrerons qu’il existe une solution $y_p$ de l’équation qui est une somme et un produit des fonctions de la deuxième colonne du même tableau.</p><blockquote class="prompt-tip"><p>Pour une démonstration rigoureuse, certaines parties utilisent l’algèbre linéaire et sont marquées d’un *. On peut ignorer ces parties et lire seulement le reste pour une compréhension générale.</p></blockquote><h3 id="définition-de-lespace-vectoriel-v">Définition de l’espace vectoriel $V$*</h3><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><p>Pour un tel $r(x)$, on peut définir l’espace vectoriel $V$ tel que $r(x) \in V$ comme suit :</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="forme-des-dérivées-des-fonctions-exponentielles-polynomiales-et-trigonométriques">Forme des dérivées des fonctions exponentielles, polynomiales et trigonométriques</h3><p>Les formes des dérivées des fonctions de base présentées dans la première colonne du tableau précédent sont les suivantes :</p><ul><li>Fonction exponentielle : $\cfrac{d}{dx}e^{\alpha x} = \alpha e^{\alpha x}$<li>Fonction polynomiale : $\cfrac{d}{dx}x^m = mx^{m-1}$<li>Fonctions trigonométriques : $\cfrac{d}{dx}\cos\omega x = -\omega\sin\omega x, \quad \cfrac{d}{dx}\sin\omega x = \omega\cos\omega x$</ul><p>Les dérivées obtenues en dérivant ces fonctions s’expriment également comme <u>des sommes de fonctions du même type</u>.</p><p>Par conséquent, lorsque les fonctions $f$ et $g$ sont les fonctions ci-dessus ou leurs sommes, pour $r(x) = f(x)g(x)$, en appliquant la règle de dérivation du produit :</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>où $f$, $f^{\prime}$, $f^{\prime\prime}$ et $g$, $g^{\prime}$, $g^{\prime\prime}$ peuvent tous s’écrire sous forme de sommes ou de multiples constants de fonctions exponentielles, polynomiales et trigonométriques. Par conséquent, $r^{\prime}(x) = (fg)^{\prime}$ et $r^{\prime\prime}(x) = (fg)^{\prime\prime}$ peuvent également s’exprimer comme des sommes et produits de ces fonctions, tout comme $r(x)$.</p><h3 id="invariance-de-v-par-lopérateur-de-dérivation-d-et-la-transformation-linéaire-l">Invariance de $V$ par l’opérateur de dérivation $D$ et la transformation linéaire $L$*</h3><p>Autrement dit, non seulement $r(x)$ lui-même, mais aussi $r^{\prime}(x)$ et $r^{\prime\prime}(x)$ sont des combinaisons linéaires de termes de la forme $x^k e^{\alpha x}\cos(\omega x)$ et de termes de la forme $x^k e^{\alpha x}\sin(\omega x)$, donc</p>\[r(x) \in V \implies r^{\prime}(x) \in V,\ r^{\prime\prime}(x) \in V.\]<p>En introduisant l’opérateur de dérivation $D$ pour tous les éléments de l’espace vectoriel $V$ défini précédemment, et non pas seulement pour $r(x)$, on peut exprimer plus généralement que <em>l’espace vectoriel $V$ est fermé par l’opération de dérivation $D$</em>. Par conséquent, en notant le membre de gauche de l’équation donnée $y^{\prime\prime} + ay^{\prime} + by$ par $L[y]$, <em>$V$ est invariant par $L$</em>.</p>\[D^2(V)\subseteq V,\quad aD(V)\subseteq V,\quad b\,V\subseteq V \implies L(V)\subseteq V.\]<p>Puisque $r(x) \in V$ et que $V$ est invariant par $L$, il existe un autre élément $y_p$ de $V$ tel que $L[y_p] = r$.</p>\[\exists y_p \in V: L[y_p] = r\]<h3 id="ansatz">Ansatz</h3><p>Par conséquent, en choisissant un $y_p$ approprié comme somme de tous les termes possibles sous forme de produits, en utilisant les coefficients indéterminés $A_0, A_1, \dots, A_n$ et $K$, $M$ comme suit, on peut déterminer les coefficients indéterminés selon les règles de base (a) et de modification (b) en substituant $y_p$ (ou $xy_p$, $x^2y_p$) et ses dérivées dans l’équation donnée. Ici, $n$ est déterminé selon le degré de $r(x)$ par rapport à $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>Si l’entrée donnée $r(x)$ contient plusieurs valeurs différentes $\alpha_i$, $\omega_j$, il faut choisir $y_p$ de manière à inclure sans exception tous les termes possibles de la forme $x^{k}e^{\alpha_i x}\cos(\omega_j x)$, $x^{k}e^{\alpha_i x}\sin(\omega_j x)$ pour chaque valeur $\alpha_i$ et $\omega_j$.<br /> L’avantage de la méthode des coefficients indéterminés étant sa simplicité, si l’hypothèse (ansatz) devient trop complexe et que cet avantage s’estompe, il peut être préférable d’appliquer plutôt la méthode de variation des paramètres qui sera traitée ultérieurement.</p></blockquote><h2 id="extension-de-la-méthode-des-coefficients-indéterminés--équation-deuler-cauchy">Extension de la méthode des coefficients indéterminés : équation d’Euler-Cauchy</h2><p>La méthode des coefficients indéterminés peut être utilisée non seulement pour les <a href="/fr/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs linéaires homogènes du second ordre à coefficients constants</a>, mais aussi pour l’<a href="/fr/posts/euler-cauchy-equation/">équation d’Euler-Cauchy</a></p>\[x^2y^{\prime\prime} + axy^{\prime} + by = r(x) \label{eqn:euler_cauchy}\tag{5}\]<h3 id="substitution-de-variable">Substitution de variable</h3><p>En <a href="/fr/posts/euler-cauchy-equation/#transformation-en-edo-linéaire-homogène-du-second-ordre-à-coefficients-constants">substituant $x = e^t$ pour transformer en EDO linéaire homogène du second ordre à coefficients constants</a>, on obtient</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>et l’équation d’Euler-Cauchy peut être transformée en l’EDO homogène à coefficients constants suivante en $t$, comme nous l’avons vu précédemment.</p>\[y^{\prime\prime} + (a-1)y^{\prime} + by = r(e^t). \label{eqn:substituted}\tag{6}\]<p>Il suffit maintenant d’appliquer la <a href="#méthode-des-coefficients-indéterminés">méthode des coefficients indéterminés examinée précédemment</a> à l’équation ($\ref{eqn:substituted}$) pour résoudre par rapport à $t$, puis d’obtenir la solution par rapport à $x$ en utilisant $t = \ln x$ à la fin.</p><h3 id="cas-où-rx-est-une-puissance-de-x-un-logarithme-naturel-ou-des-sommes-et-produits-de-telles-fonctions">Cas où $r(x)$ est une puissance de $x$, un logarithme naturel, ou des sommes et produits de telles fonctions</h3><p>En particulier, lorsque l’entrée $r(x)$ est composée de puissances de $x$, de logarithmes naturels, ou de sommes et produits de telles fonctions, on peut choisir directement un $y_p$ approprié selon les règles de sélection suivantes pour l’équation d’Euler-Cauchy.</p><blockquote class="prompt-info"><p><strong>Règles de sélection pour la méthode des coefficients indéterminés : pour l’équation d’Euler-Cauchy</strong><br /> <strong>(a) Règle de base</strong> : Si $r(x)$ dans l’équation ($\ref{eqn:euler_cauchy}$) est l’une des fonctions de la première colonne du tableau, choisir le $y_p$ correspondant de la même ligne et déterminer les coefficients indéterminés en substituant $y_p$ et ses dérivées dans l’équation ($\ref{eqn:euler_cauchy}$).<br /> <strong>(b) Règle de modification</strong> : Si le terme choisi pour $y_p$ devient une solution de l’équation différentielle homogène $x^2y^{\prime\prime} + axy^{\prime} + by = 0$ correspondant à l’équation ($\ref{eqn:euler_cauchy}$), multiplier ce terme par $\ln{x}$ (ou par $(\ln{x})^2$ si cette solution correspond à une racine double de l’équation caractéristique de l’EDO homogène).<br /> <strong>(c) Règle de somme</strong> : Si $r(x)$ est une somme de fonctions de la première colonne du tableau, choisir comme $y_p$ la somme des fonctions correspondantes de la deuxième colonne.</p><table><thead><tr><th style="text-align: left">Terme de $r(x)$<th style="text-align: left">Choix pour $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>Cela permet de trouver plus rapidement et simplement le même $y_p$ que celui obtenu par <a href="#substitution-de-variable">substitution de variable</a> pour les formes d’entrée $r(x)$ pratiquement importantes. On peut dériver ces règles de sélection pour l’équation d’Euler-Cauchy en remplaçant $x$ par $\ln{x}$ dans les <a href="#méthode-des-coefficients-indéterminés">règles de sélection originales</a>.</p>]]> </content> </entry> <entry><title xml:lang="fr">EDOs linéaires non homogènes du second ordre</title><link href="https://www.yunseo.kim/fr/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-07-11T20:37:36+09:00</updated> <id>https://www.yunseo.kim/fr/posts/nonhomogeneous-linear-odes-of-second-order/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="fr">Examen de la forme de la solution générale des EDOs linéaires non homogènes du second ordre en relation avec les solutions des EDOs linéaires homogènes correspondantes, et démonstration de l&apos;existence de la solution générale et de l&apos;absence de solutions singulières.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Examen de la forme de la solution générale des EDOs linéaires non homogènes du second ordre en relation avec les solutions des EDOs linéaires homogènes correspondantes, et démonstration de l'existence de la solution générale et de l'absence de solutions singulières.</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>Solution générale</strong> de l’EDO linéaire non homogène du second ordre $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$ : solution générale de l’EDO homogène $y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0$, soit $y_h = c_1y_1 + c_2y_2$<li>$y_p$ : solution particulière de l’EDO non homogène correspondante</ul><li>Le terme de réponse $y_p$ est déterminé uniquement par l’entrée $r(x)$, et pour la même EDO non homogène, $y_p$ ne change pas même si les conditions initiales changent. La différence entre deux solutions particulières de l’EDO non homogène devient une solution de l’EDO homogène correspondante.<li><strong>Existence de la solution générale</strong> : Si les coefficients $p(x)$, $q(x)$ de l’EDO non homogène et la fonction d’entrée $r(x)$ sont continues, alors la solution générale existe toujours<li><strong>Absence de solutions singulières</strong> : La solution générale inclut toutes les solutions de l’équation (c’est-à-dire qu’il n’existe pas de solutions singulières)</ul></blockquote><h2 id="prérequis">Prérequis</h2><ul><li><a href="/fr/posts/homogeneous-linear-odes-of-second-order/">EDOs linéaires homogènes du second ordre</a><li><a href="/fr/posts/wronskian-existence-and-uniqueness-of-solutions/">Wronskien, existence et unicité des solutions</a></ul><h2 id="solution-générale-et-solution-particulière-des-edos-linéaires-non-homogènes-du-second-ordre">Solution générale et solution particulière des EDOs linéaires non homogènes du second ordre</h2><p>Considérons l’EDO linéaire non homogène du second ordre</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x) \label{eqn:nonhomogeneous_linear_ode}\tag{1}\]<p>où $r(x) \not\equiv 0$. La <strong>solution générale</strong> de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) sur un intervalle ouvert $I$ est de la forme</p>\[y(x) = y_h(x) + y_p(x) \label{eqn:general_sol}\tag{3}\]<p>qui est la somme de la solution générale $y_h = c_1y_1 + c_2y_2$ de l’EDO homogène correspondante</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode}\tag{2}\]<p>et d’une solution particulière $y_p$ de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$). De plus, une <strong>solution particulière</strong> de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) sur l’intervalle $I$ est une solution obtenue à partir de l’équation ($\ref{eqn:general_sol}$) en attribuant des valeurs spécifiques aux constantes arbitraires $c_1$ et $c_2$ dans $y_h$.</p><p>En d’autres termes, lorsqu’on ajoute une entrée $r(x)$ qui ne dépend que de la variable indépendante $x$ à l’EDO homogène ($\ref{eqn:homogeneous_linear_ode}$), un terme correspondant $y_p$ est ajouté à la réponse, et ce terme de réponse ajouté $y_p$ est déterminé uniquement par l’entrée $r(x)$, indépendamment des conditions initiales. Comme nous le verrons plus tard, si on calcule la différence entre deux solutions arbitraires $y_1$ et $y_2$ de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) (c’est-à-dire la différence entre les solutions particulières respectives pour deux conditions initiales différentes), la partie $y_p$ indépendante des conditions initiales s’annule, ne laissant que la différence entre ${y_h}_1$ et ${y_h}_2$, qui devient une solution de l’équation ($\ref{eqn:homogeneous_linear_ode}$) par le <a href="/fr/posts/homogeneous-linear-odes-of-second-order/#principe-de-superposition">principe de superposition</a>.</p><h2 id="relation-entre-les-solutions-de-ledo-non-homogène-et-les-solutions-de-ledo-homogène-correspondante">Relation entre les solutions de l’EDO non homogène et les solutions de l’EDO homogène correspondante</h2><blockquote class="prompt-info"><p><strong>Théorème 1 : Relation entre les solutions de l’EDO non homogène ($\ref{eqn:nonhomogeneous_linear_ode}$) et les solutions de l’EDO homogène ($\ref{eqn:homogeneous_linear_ode}$)</strong><br /> <strong>(a)</strong> Sur un intervalle ouvert $I$, la somme d’une solution $y$ de l’EDO non homogène ($\ref{eqn:nonhomogeneous_linear_ode}$) et d’une solution $\tilde{y}$ de l’EDO homogène ($\ref{eqn:homogeneous_linear_ode}$) est une solution de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) sur l’intervalle $I$. En particulier, l’équation ($\ref{eqn:general_sol}$) est une solution de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) sur l’intervalle $I$.<br /> <strong>(b)</strong> Sur un intervalle $I$, la différence entre deux solutions de l’EDO non homogène ($\ref{eqn:nonhomogeneous_linear_ode}$) est une solution de l’EDO homogène ($\ref{eqn:homogeneous_linear_ode}$) sur l’intervalle $I$.</p></blockquote><h3 id="démonstration">Démonstration</h3><h4 id="a">(a)</h4><p>Notons $L[y]$ le membre de gauche des équations ($\ref{eqn:nonhomogeneous_linear_ode}$) et ($\ref{eqn:homogeneous_linear_ode}$). Alors, pour toute solution $y$ de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) sur l’intervalle $I$ et toute solution $\tilde{y}$ de l’équation ($\ref{eqn:homogeneous_linear_ode}$), nous avons :</p>\[L[y + \tilde{y}] = L[y] + L[\tilde{y}] = r + 0 = r.\]<h4 id="b">(b)</h4><p>Pour deux solutions arbitraires $y$ et $y^*$ de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) sur l’intervalle $I$, nous avons :</p>\[L[y - y^*] = L[y] - L[y^*] = r - r = 0.\ \blacksquare\]<h2 id="la-solution-générale-de-ledo-non-homogène-inclut-toutes-les-solutions">La solution générale de l’EDO non homogène inclut toutes les solutions</h2><p>Nous savons que pour l’EDO homogène ($\ref{eqn:homogeneous_linear_ode}$), <a href="/fr/posts/wronskian-existence-and-uniqueness-of-solutions/#la-solution-générale-inclut-toutes-les-solutions">la solution générale inclut toutes les solutions</a>. Montrons que la même propriété est valide pour l’EDO non homogène ($\ref{eqn:nonhomogeneous_linear_ode}$).</p><blockquote class="prompt-info"><p><strong>Théorème 2 : La solution générale de l’EDO non homogène inclut toutes les solutions</strong><br /> Si les coefficients $p(x)$, $q(x)$ de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) et la fonction d’entrée $r(x)$ sont continues sur un intervalle ouvert $I$, alors toute solution de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) sur l’intervalle $I$ peut être obtenue en attribuant des valeurs appropriées aux constantes arbitraires $c_1$ et $c_2$ dans $y_h$ de la solution générale ($\ref{eqn:general_sol}$) de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) sur l’intervalle $I$.</p></blockquote><h3 id="démonstration-1">Démonstration</h3><p>Soit $y^*$ une solution quelconque de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) sur $I$, et soit $x_0$ un $x$ quelconque dans l’intervalle $I$. Par le <a href="/fr/posts/wronskian-existence-and-uniqueness-of-solutions/#existence-de-la-solution-générale">théorème d’existence de la solution générale pour les EDOs homogènes à coefficients variables continus</a>, $y_h = c_1y_1 + c_2y_2$ existe, et par la <strong>méthode de variation des paramètres</strong> que nous étudierons plus tard, $y_p$ existe également, donc la solution générale ($\ref{eqn:general_sol}$) de l’équation ($\ref{eqn:nonhomogeneous_linear_ode}$) existe sur l’intervalle $I$. Maintenant, par le théorème <a href="#relation-entre-les-solutions-de-ledo-non-homogène-et-les-solutions-de-ledo-homogène-correspondante">1(b)</a> démontré précédemment, $Y = y^* - y_p$ est une solution de l’EDO homogène ($\ref{eqn:homogeneous_linear_ode}$) sur l’intervalle $I$, et en $x_0$ :</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>Par le <a href="/fr/posts/wronskian-existence-and-uniqueness-of-solutions/#théorème-dexistence-et-dunicité-des-solutions-du-problème-à-valeur-initiale">théorème d’existence et d’unicité des solutions du problème à valeur initiale</a>, il existe une solution particulière unique $Y$ de l’EDO homogène ($\ref{eqn:homogeneous_linear_ode}$) sur l’intervalle $I$ pour les conditions initiales ci-dessus, qui peut être obtenue en attribuant des valeurs appropriées à $c_1$, $c_2$ dans $y_h$. Puisque $y^* = Y + y_p$, nous avons montré que toute solution particulière $y^*$ de l’EDO non homogène ($\ref{eqn:nonhomogeneous_linear_ode}$) peut être obtenue à partir de la solution générale ($\ref{eqn:general_sol}$). $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="fr">Wronskien, existence et unicité des solutions</title><link href="https://www.yunseo.kim/fr/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-07-11T20:37:36+09:00</updated> <id>https://www.yunseo.kim/fr/posts/wronskian-existence-and-uniqueness-of-solutions/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="fr">Pour une EDO linéaire homogène du second ordre à coefficients variables continus, nous étudions le théorème d&apos;existence et d&apos;unicité des solutions du problème à valeur initiale, la méthode de discrimination de la dépendance/indépendance linéaire des solutions utilisant le Wronskien, et démontrons que de telles équations ont toujours une solution générale qui inclut toutes les solutions de l&apos;équation.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Pour une EDO linéaire homogène du second ordre à coefficients variables continus, nous étudions le théorème d'existence et d'unicité des solutions du problème à valeur initiale, la méthode de discrimination de la dépendance/indépendance linéaire des solutions utilisant le Wronskien, et démontrons que de telles équations ont toujours une solution générale qui inclut toutes les solutions de l'équation.</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>Pour une équation différentielle ordinaire linéaire homogène du second ordre à coefficients variables $p$ et $q$ continus sur un intervalle $I$</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0\]<p>et les conditions initiales</p>\[y(x_0)=K_0, \qquad y^{\prime}(x_0)=K_1\]<p>les quatre théorèmes suivants sont valides :</p><ol><li><strong>Théorème d’existence et d’unicité des solutions du problème à valeur initiale</strong> : Le problème à valeur initiale constitué de l’équation donnée et des conditions initiales a une solution unique $y(x)$ sur l’intervalle $I$.<li><strong>Discrimination de la dépendance/indépendance linéaire des solutions utilisant le Wronskien</strong> : Pour deux solutions $y_1$ et $y_2$ de l’équation, si le <strong>Wronskien</strong> $W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime}$ s’annule en un point $x_0$ dans l’intervalle $I$, alors les deux solutions sont linéairement dépendantes. De plus, s’il existe un point $x_1$ dans l’intervalle $I$ où $W\neq 0$, alors les deux solutions sont linéairement indépendantes.<li><strong>Existence de la solution générale</strong> : L’équation donnée a une solution générale sur l’intervalle $I$.<li><strong>Non-existence de solution singulière</strong> : Cette solution générale inclut toutes les solutions de l’équation (c’est-à-dire qu’il n’existe pas de solution singulière).</ol></blockquote><h2 id="prérequis">Prérequis</h2><ul><li><a href="/fr/posts/Solution-of-First-Order-Linear-ODE/">Résolution des EDOs linéaires du premier ordre</a><li><a href="/fr/posts/homogeneous-linear-odes-of-second-order/">EDOs linéaires homogènes du second ordre</a><li><a href="/fr/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs linéaires homogènes du second ordre à coefficients constants</a><li><a href="/fr/posts/euler-cauchy-equation/">Équation d’Euler-Cauchy</a><li>Matrice inverse et matrice singulière, déterminant</ul><h2 id="équation-différentielle-ordinaire-linéaire-homogène-à-coefficients-variables-continus">Équation différentielle ordinaire linéaire homogène à coefficients variables continus</h2><p>Nous avons précédemment étudié les solutions générales des <a href="/fr/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs linéaires homogènes du second ordre à coefficients constants</a> et de l’<a href="/fr/posts/euler-cauchy-equation/">équation d’Euler-Cauchy</a>. Dans cet article, nous étendons la discussion à un cas plus général, celui d’une équation différentielle ordinaire linéaire homogène du second ordre à <strong>coefficients variables</strong> continus arbitraires $p$ et $q$</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode_with_var_coefficients}\tag{1}\]<p>pour étudier l’existence et la forme de la solution générale. De plus, nous examinerons l’unicité du <a href="/fr/posts/homogeneous-linear-odes-of-second-order/#problème-à-valeur-initiale-et-conditions-initiales">problème à valeur initiale</a> constitué de l’équation différentielle ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) et des deux conditions initiales suivantes</p>\[y(x_0)=K_0, \qquad y^{\prime}(x_0)=K_1 \label{eqn:initial_conditions}\tag{2}\]<p>Pour anticiper la conclusion, l’essentiel du contenu traité ici est que les équations différentielles ordinaires <u>linéaires</u> à coefficients continus n’ont pas de <em>solution singulière</em> (solution qui ne peut être obtenue à partir de la solution générale).</p><h2 id="théorème-dexistence-et-dunicité-des-solutions-du-problème-à-valeur-initiale">Théorème d’existence et d’unicité des solutions du problème à valeur initiale</h2><blockquote class="prompt-info"><p><strong>Théorème d’existence et d’unicité des solutions du problème à valeur initiale</strong><br /> Si $p(x)$ et $q(x)$ sont des fonctions continues sur un intervalle ouvert $I$, et si $x_0$ est dans l’intervalle $I$, alors le problème à valeur initiale constitué des équations ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) et ($\ref{eqn:initial_conditions}$) a une solution unique $y(x)$ sur l’intervalle $I$.</p></blockquote><p>Nous ne traiterons pas ici la démonstration de l’existence, mais seulement celle de l’unicité. En général, démontrer l’unicité est plus simple que démontrer l’existence.<br /> Si vous n’êtes pas intéressé par la démonstration, vous pouvez passer cette partie et aller directement à <a href="#dépendance-et-indépendance-linéaires-des-solutions">Dépendance et indépendance linéaires des solutions</a>.</p><h3 id="démonstration-de-lunicité">Démonstration de l’unicité</h3><p>Supposons que le problème à valeur initiale constitué de l’équation différentielle ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) et des conditions initiales ($\ref{eqn:initial_conditions}$) ait deux solutions $y_1(x)$ et $y_2(x)$ sur l’intervalle $I$. Si nous pouvons montrer que la différence de ces deux solutions</p>\[y(x) = y_1(x) - y_2(x)\]<p>est identiquement égale à $0$ sur l’intervalle $I$, cela signifie que $y_1 \equiv y_2$ sur l’intervalle $I$, ce qui implique l’unicité de la solution.</p><p>Comme l’équation ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) est une EDO linéaire homogène, la combinaison linéaire $y$ de $y_1$ et $y_2$ est une solution de l’équation sur $I$. Puisque $y_1$ et $y_2$ satisfont les mêmes conditions initiales ($\ref{eqn:initial_conditions}$), $y$ satisfait les conditions</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>Considérons maintenant la fonction</p>\[z(x) = y(x)^2 + y^{\prime}(x)^2\]<p>et sa dérivée</p>\[z^{\prime} = 2yy^{\prime} + 2y^{\prime}y^{\prime\prime}\]<p>À partir de l’équation différentielle, nous obtenons</p>\[y^{\prime\prime} = -py^{\prime} - qy\]<p>En substituant ceci dans l’expression de $z^{\prime}$, nous obtenons</p>\[z^{\prime} = 2yy^{\prime} - 2p{y^{\prime}}^2 - 2qyy^{\prime} \label{eqn:z_prime}\tag{4}\]<p>Maintenant, puisque $y$ et $y^{\prime}$ sont réels, nous avons</p>\[(y\pm y^{\prime})^2 = y^2 \pm 2yy^{\prime} + {y^{\prime}}^2 \geq 0\]<p>À partir de ceci et de la définition de $z$, nous pouvons obtenir deux inégalités</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>À partir de ces deux inégalités, nous savons que $|2yy^{\prime}|\leq z$, et donc pour le dernier terme de l’équation ($\ref{eqn:z_prime}$), l’inégalité suivante est valide :</p>\[\pm2qyy^{\prime} \leq |\pm 2qyy^{\prime}| = |q||2yy^{\prime}| \leq |q|z.\]<p>En utilisant ce résultat avec $-p \leq |p|$ et en appliquant l’équation ($\ref{eqn:inequalities}$a) au terme $2yy^{\prime}$ de l’équation ($\ref{eqn:z_prime}$), nous obtenons</p>\[z^{\prime} \leq z + 2|p|{y^{\prime}}^2 + |q|z\]<p>Puisque ${y^{\prime}}^2 \leq y^2 + {y^{\prime}}^2 = z$, nous obtenons</p>\[z^{\prime} \leq (1 + 2|p| + |q|)z\]<p>En posant $h = 1 + 2|p| + |q|$ pour la fonction entre parenthèses, nous avons</p>\[z^{\prime} \leq hz \quad \forall x \in I \label{eqn:inequality_6a}\tag{6a}\]<p>De la même manière, à partir des équations ($\ref{eqn:z_prime}$) et ($\ref{eqn:inequalities}$), nous obtenons</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>Ces deux inégalités ($\ref{eqn:inequality_6a}$), ($\ref{eqn:inequality_6b}$) sont équivalentes aux inégalités suivantes</p>\[z^{\prime} - hz \leq 0, \qquad z^{\prime} + hz \geq 0 \label{eqn:inequalities_7}\tag{7}\]<p>et les <a href="/fr/posts/Solution-of-First-Order-Linear-ODE/#équation-différentielle-linéaire-non-homogène">facteurs intégrants</a> pour les membres de gauche de ces deux équations sont</p>\[F_1 = e^{-\int h(x)\ dx} \qquad \text{et} \qquad F_2 = e^{\int h(x)\ dx}\]<p>Puisque $h$ est continue, l’intégrale indéfinie $\int h(x)\ dx$ existe, et comme $F_1$ et $F_2$ sont positifs, nous obtenons à partir de l’équation ($\ref{eqn:inequalities_7}$)</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>Cela signifie que $F_1 z$ ne croît pas et $F_2 z$ ne décroît pas sur l’intervalle $I$. Puisque $z(x_0) = 0$ d’après l’équation ($\ref{eqn:initial_conditions_*}$), nous avons</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>Enfin, en divisant les deux membres des inégalités par les nombres positifs $F_1$ et $F_2$, nous pouvons démontrer l’unicité de la solution comme suit :</p>\[(z \leq 0) \ \&amp; \ (z \geq 0) \quad \forall x \in I\] \[z = y^2 + {y^{\prime}}^2 = 0 \quad \forall x \in I\] \[\therefore y \equiv y_1 - y_2 \equiv 0 \quad \forall x \in I. \ \blacksquare\]<h2 id="dépendance-et-indépendance-linéaires-des-solutions">Dépendance et indépendance linéaires des solutions</h2><p>Rappelons brièvement le contenu traité dans <a href="/fr/posts/homogeneous-linear-odes-of-second-order/#base-et-solution-générale">EDOs linéaires homogènes du second ordre</a>. La solution générale sur un intervalle ouvert $I$ est construite à partir d’une <strong>base</strong> $y_1$, $y_2$, c’est-à-dire une paire de solutions linéairement indépendantes sur $I$. Ici, le fait que $y_1$ et $y_2$ soient <strong>linéairement indépendantes</strong> sur l’intervalle $I$ signifie qu’elles satisfont ce qui suit pour tous les $x$ dans l’intervalle :</p>\[k_1y_1(x) + k_2y_2(x) = 0 \Leftrightarrow k_1=0\text{ et }k_2=0 \label{eqn:linearly_independent}\tag{8}\]<p>Si ceci n’est pas satisfait et qu’il existe au moins un $k_1$, $k_2$ non nul tel que $k_1y_1(x) + k_2y_2(x) = 0$, alors $y_1$ et $y_2$ sont <strong>linéairement dépendantes</strong> sur l’intervalle $I$. Dans ce cas, pour tous les $x$ de l’intervalle $I$, nous avons</p>\[\text{(a) } y_1 = ky_2 \quad \text{ou} \quad \text{(b) } y_2 = ly_1 \label{eqn:linearly_dependent}\tag{9}\]<p>et $y_1$ et $y_2$ sont proportionnelles.</p><p>Examinons maintenant la méthode suivante de discrimination de l’indépendance/dépendance linéaire des solutions.</p><blockquote class="prompt-info"><p><strong>Discrimination de la dépendance/indépendance linéaire des solutions utilisant le Wronskien</strong><br /> <strong>i.</strong> Si l’équation différentielle ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) a des coefficients $p(x)$ et $q(x)$ continus sur un intervalle ouvert $I$, alors la condition nécessaire et suffisante pour que deux solutions $y_1$ et $y_2$ de l’équation ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) sur l’intervalle $I$ soient linéairement dépendantes est que le <em>déterminant de Wronski</em>, abrégé <strong>Wronskien</strong>, défini par le déterminant suivant</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>s’annule en un point $x_0$ dans l’intervalle $I$.</p>\[\exists x_0 \in I: W(x_0)=0 \iff y_1 \text{ et } y_2 \text{ sont linéairement dépendantes}\]<p><strong>ii.</strong> Si $W=0$ en un point $x=x_0$ dans l’intervalle $I$, alors $W=0$ en tous les points $x$ de l’intervalle $I$.</p>\[\exists x_0 \in I: W(x_0)=0 \implies \forall x \in I: W(x)=0\]<p>En d’autres termes, s’il existe un $x_1$ dans l’intervalle $I$ tel que $W\neq 0$, alors $y_1$, $y_2$ sont linéairement indépendantes sur cet intervalle $I$.</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{ et } y_2 \text{ sont linéairement indépendantes} \end{align*}\]</blockquote><blockquote class="prompt-tip"><p>Le Wronskien a été introduit pour la première fois par le mathématicien polonais Józef Maria Hoene-Wroński, et a reçu son nom actuel en 11882 EH par le mathématicien écossais Thomas Muir.</p></blockquote><h3 id="démonstration">Démonstration</h3><h4 id="i-a">i. (a)</h4><p>Supposons que $y_1$ et $y_2$ soient linéairement dépendantes sur l’intervalle $I$. Alors l’équation ($\ref{eqn:linearly_dependent}$a) ou ($\ref{eqn:linearly_dependent}$b) est valide sur l’intervalle $I$. Si l’équation ($\ref{eqn:linearly_dependent}$a) est valide, alors</p>\[W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime} = ky_2ky_2^{\prime} - y_2ky_2^{\prime} = 0\]<p>et de même, si l’équation ($\ref{eqn:linearly_dependent}$b) est valide,</p>\[W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime} = y_1ly_1^{\prime} - ly_1y_1^{\prime} = 0\]<p>donc nous pouvons confirmer que le Wronskien $W(y_1, y_2)=0$ pour <u>tous les $x$ dans l'intervalle $I$</u>.</p><h4 id="i-b">i. (b)</h4><p>Réciproquement, supposons que $W(y_1, y_2)=0$ pour un certain $x = x_0$, et montrons que $y_1$ et $y_2$ sont linéairement dépendantes sur l’intervalle $I$. Considérons le système d’équations linéaires en les inconnues $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>Ceci peut être exprimé sous la forme d’équation vectorielle suivante :</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>La matrice des coefficients de cette équation vectorielle est</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>et le déterminant de cette matrice est précisément $W(y_1(x_0), y_2(x_0))$. Puisque $\det(A) = W=0$, $A$ est une <strong>matrice singulière</strong> qui n’a pas de <strong>matrice inverse</strong>, et donc le système d’équations ($\ref{eqn:linear_system}$) a une solution $(c_1, c_2)$ autre que le vecteur nul $(0,0)$ où au moins un de $k_1$ et $k_2$ n’est pas nul. Introduisons maintenant la fonction</p>\[y(x) = c_1y_1(x) + c_2y_2(x)\]<p>Puisque l’équation ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) est linéaire homogène, cette fonction est une solution de ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) sur l’intervalle $I$ par le <a href="/fr/posts/homogeneous-linear-odes-of-second-order/#principe-de-superposition">principe de superposition</a>. À partir de l’équation ($\ref{eqn:linear_system}$), nous pouvons voir que cette solution satisfait les conditions initiales $y(x_0)=0$, $y^{\prime}(x_0)=0$.</p><p>D’autre part, il existe une solution triviale $y^* \equiv 0$ qui satisfait les mêmes conditions initiales $y^*(x_0)=0$, ${y^*}^{\prime}(x_0)=0$. Puisque les coefficients $p$ et $q$ de l’équation ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) sont continus, l’unicité de la solution est garantie par le <a href="#théorème-dexistence-et-dunicité-des-solutions-du-problème-à-valeur-initiale">théorème d’existence et d’unicité des solutions du problème à valeur initiale</a>, donc $y \equiv y^*$. C’est-à-dire, sur l’intervalle $I$,</p>\[c_1y_1 + c_2y_2 \equiv 0\]<p>Puisque au moins un de $c_1$ et $c_2$ n’est pas nul, ($\ref{eqn:linearly_independent}$) n’est pas satisfait, ce qui signifie que $y_1$, $y_2$ sont linéairement dépendantes sur l’intervalle $I$.</p><h4 id="ii">ii.</h4><p>Si $W(x_0)=0$ en un point $x_0$ dans l’intervalle $I$, alors par <a href="#i-b">i.(b)</a>, $y_1$, $y_2$ sont linéairement dépendantes sur l’intervalle $I$, et alors par <a href="#i-a">i.(a)</a>, $W\equiv 0$. Par conséquent, s’il existe ne serait-ce qu’un $x_1$ dans l’intervalle $I$ tel que $W(x_1)\neq 0$, alors $y_1$ et $y_2$ sont linéairement indépendantes. $\blacksquare$</p><h2 id="la-solution-générale-inclut-toutes-les-solutions">La solution générale inclut toutes les solutions</h2><h3 id="existence-de-la-solution-générale">Existence de la solution générale</h3><blockquote class="prompt-info"><p>Si $p(x)$ et $q(x)$ sont continues sur un intervalle ouvert $I$, alors l’équation ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) a une solution générale sur l’intervalle $I$.</p></blockquote><h4 id="démonstration-1">Démonstration</h4><p>Par le <a href="#théorème-dexistence-et-dunicité-des-solutions-du-problème-à-valeur-initiale">théorème d’existence et d’unicité des solutions du problème à valeur initiale</a>, l’équation différentielle ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) a une solution $y_1(x)$ sur l’intervalle $I$ qui satisfait les conditions initiales</p>\[y_1(x_0) = 1, \qquad y_1^{\prime}(x_0) = 0\]<p>et une solution $y_2(x)$ sur l’intervalle $I$ qui satisfait les conditions initiales</p>\[y_2(x_0) = 0, \qquad y_2^{\prime}(x_0) = 1\]<p>Le Wronskien de ces deux solutions a une valeur non nulle en $x=x_0$ :</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>donc par la <a href="#dépendance-et-indépendance-linéaires-des-solutions">discrimination de la dépendance/indépendance linéaire des solutions utilisant le Wronskien</a>, $y_1$ et $y_2$ sont linéairement indépendantes sur l’intervalle $I$. Par conséquent, ces deux solutions forment une base des solutions de l’équation ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) sur l’intervalle $I$, et la solution générale $y = c_1y_1 + c_2y_2$ avec des constantes arbitraires $c_1$, $c_2$ existe nécessairement sur l’intervalle $I$. $\blacksquare$</p><h3 id="absence-de-solution-singulière">Absence de solution singulière</h3><blockquote class="prompt-info"><p>Si l’équation différentielle ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) a des coefficients $p(x)$ et $q(x)$ continus sur un intervalle ouvert $I$, alors toute solution $y=Y(x)$ de l’équation ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) sur l’intervalle $I$ est de la forme</p>\[Y(x) = C_1y_1(x) + C_2y_2(x) \label{eqn:particular_solution}\tag{13}\]<p>où $y_1$, $y_2$ sont une base des solutions de l’équation ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) sur l’intervalle $I$ et $C_1$, $C_2$ sont des constantes appropriées.<br /> C’est-à-dire que l’équation ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) n’a pas de <strong>solution singulière</strong> qui ne peut être obtenue à partir de la solution générale.</p></blockquote><h4 id="démonstration-2">Démonstration</h4><p>Soit $y=Y(x)$ une solution quelconque de l’équation ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) sur l’intervalle $I$. Maintenant, par le <a href="#existence-de-la-solution-générale">théorème d’existence de la solution générale</a>, l’équation différentielle ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) a une solution générale</p>\[y(x) = c_1y_1(x) + c_2y_2(x) \label{eqn:general_solution}\tag{14}\]<p>sur l’intervalle $I$. Il faut maintenant montrer que pour tout $Y(x)$ arbitraire, il existe des constantes $c_1$, $c_2$ telles que $y(x)=Y(x)$ sur l’intervalle $I$. Montrons d’abord que nous pouvons trouver les valeurs de $c_1$, $c_2$ telles que $y(x_0)=Y(x_0)$ et $y^{\prime}(x_0)=Y^{\prime}(x_0)$ pour un $x_0$ arbitraire dans l’intervalle $I$. À partir de l’équation ($\ref{eqn:general_solution}$), nous obtenons</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>Puisque $y_1$ et $y_2$ sont une base, le déterminant de la matrice des coefficients $W(y_1(x_0), y_2(x_0))\neq 0$, donc l’équation ($\ref{eqn:vector_equation_2}$) peut être résolue pour $c_1$ et $c_2$. Soit $(c_1, c_2) = (C_1, C_2)$ la solution. En substituant ceci dans l’équation ($\ref{eqn:general_solution}$), nous obtenons la solution particulière suivante :</p>\[y^*(x) = C_1y_1(x) + C_2y_2(x).\]<p>Puisque $C_1$, $C_2$ sont les solutions de l’équation ($\ref{eqn:vector_equation_2}$), nous avons</p>\[y^*(x_0) = Y(x_0), \qquad {y^*}^{\prime}(x_0) = Y^{\prime}(x_0)\]<p>Par l’unicité du <a href="#théorème-dexistence-et-dunicité-des-solutions-du-problème-à-valeur-initiale">théorème d’existence et d’unicité des solutions du problème à valeur initiale</a>, $y^* \equiv Y$ pour tous les $x$ dans l’intervalle $I$. $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="fr">Équation d'Euler-Cauchy</title><link href="https://www.yunseo.kim/fr/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-07-11T20:37:36+09:00</updated> <id>https://www.yunseo.kim/fr/posts/euler-cauchy-equation/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="fr">Examen des formes que prend la solution générale de l&apos;équation d&apos;Euler-Cauchy selon le signe du discriminant de l&apos;équation auxiliaire.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Examen des formes que prend la solution générale de l'équation d'Euler-Cauchy selon le signe du discriminant de l'équation auxiliaire.</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>Équation d’Euler-Cauchy : $x^2y^{\prime\prime} + axy^{\prime} + by = 0$<li><strong>Équation auxiliaire</strong> : $m^2 + (a-1)m + b = 0$<li>Selon le signe du discriminant $(1-a)^2 - 4b$ de l’équation auxiliaire, la forme de la solution générale peut être divisée en trois cas comme indiqué dans le tableau</ul><table><thead><tr><th style="text-align: center">Cas<th style="text-align: center">Solutions de l’équation auxiliaire<th style="text-align: center">Base des solutions de l’équation d’Euler-Cauchy<th style="text-align: center">Solution générale de l’équation d’Euler-Cauchy<tbody><tr><td style="text-align: center">I<td style="text-align: center">Racines réelles distinctes<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">Racine réelle double<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">Racines complexes conjuguées<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="prérequis">Prérequis</h2><ul><li><a href="/fr/posts/homogeneous-linear-odes-of-second-order/">EDOs linéaires homogènes du second ordre</a><li><a href="/fr/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs linéaires homogènes du second ordre à coefficients constants</a><li>Formule d’Euler</ul><h2 id="équation-auxiliaire">Équation auxiliaire</h2><p>L’<strong>équation d’Euler-Cauchy</strong> est une équation différentielle ordinaire de la forme</p>\[x^2y^{\prime\prime} + axy^{\prime} + by = 0 \label{eqn:euler_cauchy_eqn}\tag{1}\]<p>avec des constantes données $a$ et $b$, et une fonction inconnue $y(x)$. En substituant dans l’équation ($\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>on obtient</p>\[x^2m(m-1)x^{m-2} + axmx^{m-1} + bx^m = 0,\]<p>c’est-à-dire</p>\[[m(m-1) + am + b]x^m = 0\]<p>D’où l’équation auxiliaire</p>\[m^2 + (a-1)m + b = 0 \label{eqn:auxiliary_eqn}\tag{2}\]<p>La condition nécessaire et suffisante pour que $y=x^m$ soit une solution de l’équation d’Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) est que $m$ soit une solution de l’équation auxiliaire ($\ref{eqn:auxiliary_eqn}$).</p><p>En résolvant l’équation du second degré ($\ref{eqn:auxiliary_eqn}$), on obtient</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>et les deux fonctions</p>\[y_1 = x^{m_1}, \quad y_2 = x^{m_2}\]<p>deviennent des solutions de l’équation ($\ref{eqn:euler_cauchy_eqn}$).</p><p>Comme pour les <a href="/fr/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs linéaires homogènes du second ordre à coefficients constants</a>, on peut diviser en trois cas selon le signe du discriminant $(1-a)^2 - 4b$ de l’équation auxiliaire ($\ref{eqn:auxiliary_eqn}$).</p><ul><li>$(1-a)^2 - 4b &gt; 0$: deux racines réelles distinctes<li>$(1-a)^2 - 4b = 0$: racine réelle double<li>$(1-a)^2 - 4b &lt; 0$: racines complexes conjuguées</ul><h2 id="forme-de-la-solution-générale-selon-le-signe-du-discriminant-de-léquation-auxiliaire">Forme de la solution générale selon le signe du discriminant de l’équation auxiliaire</h2><h3 id="i-deux-racines-réelles-distinctes-m_1-et-m_2">I. Deux racines réelles distinctes $m_1$ et $m_2$</h3><p>Dans ce cas, la base des solutions de l’équation ($\ref{eqn:euler_cauchy_eqn}$) sur un intervalle quelconque est</p>\[y_1 = x^{m_1}, \quad y_2 = x^{m_2}\]<p>et la solution générale correspondante est</p>\[y = c_1 x^{m_1} + c_2 x^{m_2} \label{eqn:general_sol_1}\tag{4}\]<h3 id="ii-racine-réelle-double-m--cfrac1-a2">II. Racine réelle double $m = \cfrac{1-a}{2}$</h3><p>Lorsque $(1-a)^2 - 4b = 0$, c’est-à-dire $b=\cfrac{(1-a)^2}{4}$, l’équation du second degré ($\ref{eqn:auxiliary_eqn}$) n’a qu’une seule solution $m = m_1 = m_2 = \cfrac{1-a}{2}$, donc la seule solution de la forme $y = x^m$ qu’on peut obtenir est</p>\[y_1 = x^{(1-a)/2}\]<p>et l’équation d’Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) prend la forme</p>\[y^{\prime\prime} + \frac{a}{x}y^{\prime} + \frac{(1-a)^2}{4x^2}y = 0 \label{eqn:standard_form}\tag{5}\]<p>Trouvons maintenant une autre solution $y_2$ linéairement indépendante en utilisant la <a href="/fr/posts/homogeneous-linear-odes-of-second-order/#réduction-dordre">réduction d’ordre</a>.</p><p>En posant la deuxième solution recherchée comme $y_2=uy_1$, on obtient</p>\[u = \int U, \qquad U = \frac{1}{y_1^2}\exp\left(-\int \frac{a}{x}\ dx \right)\]<p>Comme $\exp \left(-\int \cfrac{a}{x}\ dx \right) = \exp (-a\ln x) = \exp(\ln{x^{-a}}) = x^{-a}$,</p>\[U = \frac{x^{-a}}{y_1^2} = \frac{x^{-a}}{x^{(1-a)}} = \frac{1}{x}\]<p>et en intégrant, on obtient $u = \ln x$.</p><p>Par conséquent, $y_2 = uy_1 = y_1 \ln x$, et comme le quotient de $y_1$ et $y_2$ n’est pas constant, ils sont linéairement indépendants. La solution générale correspondant à la base $y_1$ et $y_2$ est</p>\[y = (c_1 + c_2 \ln x)x^m \label{eqn:general_sol_2}\tag{6}\]<h3 id="iii-racines-complexes-conjuguées">III. Racines complexes conjuguées</h3><p>Dans ce cas, les solutions de l’équation auxiliaire ($\ref{eqn:auxiliary_eqn}$) sont $m = \cfrac{1}{2}(1-a) \pm i\sqrt{b - \frac{1}{4}(1-a)^2}$, et les deux solutions complexes correspondantes de l’équation ($\ref{eqn:euler_cauchy_eqn}$) peuvent s’écrire en utilisant $x=e^{\ln x}$ comme suit :</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>En posant $t=\sqrt{b - \frac{1}{4}(1-a)^2}\ln x$ et en utilisant la formule d’Euler $e^{it} = \cos{t} + i\sin{t}$, on obtient</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>D’où les deux solutions réelles suivantes</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>Comme leur quotient $\cos\left(\sqrt{b - \frac{1}{4}(1-a)^2}\ln x \right)$ n’est pas constant, ces deux solutions sont linéairement indépendantes et forment donc une base de l’équation d’Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) par le <a href="/fr/posts/homogeneous-linear-odes-of-second-order/#principe-de-superposition">principe de superposition</a>. On obtient ainsi la solution générale réelle suivante :</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>Cependant, le cas où l’équation auxiliaire de l’équation d’Euler-Cauchy a des racines complexes conjuguées n’a pas une grande importance pratique.</p><h2 id="transformation-en-edo-linéaire-homogène-du-second-ordre-à-coefficients-constants">Transformation en EDO linéaire homogène du second ordre à coefficients constants</h2><p>L’équation d’Euler-Cauchy peut être transformée en <a href="/fr/posts/homogeneous-linear-odes-with-constant-coefficients/">EDO linéaire homogène du second ordre à coefficients constants</a> par substitution de variable.</p><p>En substituant $x = e^t$, on obtient</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>et l’équation d’Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) devient l’EDO linéaire homogène à coefficients constants suivante en $t$ :</p>\[y^{\prime\prime}(t) + (a-1)y^{\prime}(t) + by(t) = 0. \label{eqn:substituted}\tag{11}\]<p>En résolvant l’équation ($\ref{eqn:substituted}$) par rapport à $t$ en appliquant la méthode des <a href="/fr/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs linéaires homogènes du second ordre à coefficients constants</a>, puis en transformant la solution obtenue en solution par rapport à $x$ en utilisant $t = \ln{x}$, on obtient <a href="#forme-de-la-solution-générale-selon-le-signe-du-discriminant-de-léquation-auxiliaire">le même résultat que celui examiné précédemment</a>.</p>]]> </content> </entry> <entry><title xml:lang="fr">Test de convergence/divergence d'une série (Testing for Convergence or Divergence of a Series)</title><link href="https://www.yunseo.kim/fr/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-05-13T16:24:07+09:00</updated> <id>https://www.yunseo.kim/fr/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="fr">Examen des différentes méthodes pour déterminer la convergence ou la divergence d&apos;une série.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Examen des différentes méthodes pour déterminer la convergence ou la divergence d'une série.</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 du terme général ($n$th-term test for divergence)</strong> : $\lim_{n\to\infty} a_n \neq 0 \Rightarrow \text{la série }\sum a_n \text{ diverge}$<li><strong>Convergence/divergence des séries géométriques</strong> : La série géométrique $\sum ar^{n-1}$ :<ul><li>converge si $|r| &lt; 1$<li>diverge si $|r| \geq 1$</ul><li><strong>Convergence/divergence des séries $p$</strong> : La série $p$ $\sum \cfrac{1}{n^p}$ :<ul><li>converge si $p&gt;1$<li>diverge si $p\leq 1$</ul><li><strong>Test de comparaison (Comparison Test)</strong> : Si $0 \leq a_n \leq b_n$, alors :<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>Test de comparaison limite (Limit Comparison Test)</strong> : Si $\lim_{n\to\infty} \frac{a_n}{b_n} = c \text{ (où }c\text{ est un nombre positif fini)}$, alors les deux séries $\sum a_n$ et $\sum b_n$ convergent toutes les deux ou divergent toutes les deux<li>Pour une série à termes positifs $\sum a_n$ et un nombre positif $\epsilon &lt; 1$ :<ul><li>Si pour tout $n$, $\sqrt[n]{a_n}&lt; 1-\epsilon$, alors la série $\sum a_n$ converge<li>Si pour tout $n$, $\sqrt[n]{a_n}&gt; 1+\epsilon$, alors la série $\sum a_n$ diverge</ul><li><strong>Test de la racine (Root Test)</strong> : Pour une série à termes positifs $\sum a_n$, si la limite $\lim_{n\to\infty} \sqrt[n]{a_n} =: r$ existe :<ul><li>Si $r&lt;1$, alors la série $\sum a_n$ converge<li>Si $r&gt;1$, alors la série $\sum a_n$ diverge</ul><li><strong>Test du rapport (Ratio Test)</strong> : Pour une suite de nombres positifs $(a_n)$ et $0 &lt; r &lt; 1$ :<ul><li>Si pour tout $n$, $a_{n+1}/a_n \leq r$, alors la série $\sum a_n$ converge<li>Si pour tout $n$, $a_{n+1}/a_n \geq 1$, alors la série $\sum a_n$ diverge</ul><li>Pour une suite de nombres positifs $(a_n)$, si la limite $\rho := \lim_{n\to\infty} \cfrac{a_{n+1}}{a_n}$ existe :<ul><li>Si $\rho &lt; 1$, alors la série $\sum a_n$ converge<li>Si $\rho &gt; 1$, alors la série $\sum a_n$ diverge</ul><li><strong>Test de l’intégrale (Integral Test)</strong> : Si $f: \left[1,\infty \right) \rightarrow \mathbb{R}$ est une fonction continue, décroissante et toujours positive, alors la série $\sum f(n)$ converge si et seulement si l’intégrale $\int_1^\infty f(x)\ dx := \lim_{b\to\infty} \int_1^b f(x)\ dx$ converge<li><strong>Test des séries alternées (Alternating Series Test)</strong> : Une série alternée $\sum a_n$ converge si les conditions suivantes sont satisfaites :<ol><li>Pour tout $n$, $a_n$ et $a_{n+1}$ ont des signes opposés<li>Pour tout $n$, $|a_n| \geq |a_{n+1}|$<li>$\lim_{n\to\infty} a_n = 0$</ol><li>Une série qui converge absolument converge. La réciproque n’est pas vraie.</ul></blockquote><h2 id="prérequis">Prérequis</h2><ul><li><a href="/fr/posts/sequences-and-series/">Suites et séries</a></ul><h2 id="introduction">Introduction</h2><p>Dans l’article précédent sur <a href="/fr/posts/sequences-and-series/#convergence-et-divergence-des-séries">les suites et séries</a>, nous avons vu les définitions de convergence et divergence des séries. Dans cet article, nous allons résumer les différentes méthodes pour déterminer si une série converge ou diverge. En général, déterminer la convergence ou la divergence d’une série est beaucoup plus facile que de calculer sa somme exacte.</p><h2 id="test-du-terme-général">Test du terme général</h2><p>Pour une série $\sum a_n$, on appelle $a_n$ le <strong>terme général</strong> de cette série.</p><p>Le théorème suivant permet de déterminer facilement la divergence de certaines séries, et il est donc judicieux de le vérifier en premier lieu pour éviter de perdre du temps.</p><blockquote class="prompt-info"><p><strong>Test du terme général ($n$th-term test for divergence)</strong><br /> Si une série $\sum a_n$ converge, alors :</p>\[\lim_{n\to\infty} a_n=0\]<p>C’est-à-dire :</p>\[\lim_{n\to\infty} a_n \neq 0 \Rightarrow \text{la série }\sum a_n \text{ diverge}\]</blockquote><h3 id="démonstration">Démonstration</h3><p>Soit $\sum a_n$ une série convergente de somme $l$, et soit $s_n$ la somme des $n$ premiers termes :</p>\[s_n := a_1 + a_2 + \cdots + a_n\]<p>Alors :</p>\[\forall \epsilon &gt; 0,\, \exists N \in \mathbb{N}\ (n &gt; N \Rightarrow |s_n - l| &lt; \epsilon).\]<p>Donc pour $n$ suffisamment grand ($&gt;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>Par la définition de la convergence d’une suite :</p>\[\lim_{n\to\infty} |a_n| = 0. \quad \blacksquare\]<h3 id="mise-en-garde">Mise en garde</h3><p>La réciproque de ce théorème n’est généralement pas vraie. Un exemple classique est la <strong>série harmonique (harmonic series)</strong>.</p><p>La série harmonique est une série dont les termes sont les inverses d’une <strong>suite arithmétique</strong>, c’est-à-dire une <strong>suite harmonique</strong>. La série harmonique la plus connue est :</p>\[H_n := 1 + \frac{1}{2} + \cdots + \frac{1}{n} \quad (n=1,2,3,\dots)\]<p>On peut montrer que cette série diverge comme suit :</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>Ainsi, bien que la série $H_n$ diverge, son terme général $1/n$ converge vers $0$.</p><blockquote class="prompt-danger"><p>Si $\lim_{n\to\infty} a_n \neq 0$, alors la série $\sum a_n$ diverge nécessairement, mais si $\lim_{n\to\infty} a_n = 0$, il est risqué de supposer que la série $\sum a_n$ converge. Dans ce cas, il faut utiliser d’autres méthodes pour déterminer la convergence ou la divergence.</p></blockquote><h2 id="séries-géométriques">Séries géométriques</h2><p>La <strong>série géométrique (geometric series)</strong> dont le premier terme est 1 et la <strong>raison</strong> est $r$ :</p>\[1 + r + r^2 + r^3 + \cdots \label{eqn:geometric_series}\tag{5}\]<p>est <u>la série la plus importante et fondamentale</u>. De l’égalité :</p>\[(1-r)(1+r+\cdots + r^{n-1}) = 1 - r^n\]<p>on obtient :</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’autre part :</p>\[\lim_{n\to\infty} r^n = 0 \quad \Leftrightarrow \quad |r| &lt; 1\]<p>Donc, la condition nécessaire et suffisante pour que la série géométrique ($\ref{eqn:geometric_series}$) converge est $|r| &lt; 1$.</p><blockquote class="prompt-info"><p><strong>Convergence/divergence des séries géométriques</strong><br /> La série géométrique $\sum ar^{n-1}$ :</p><ul><li>converge si $|r| &lt; 1$<li>diverge si $|r| \geq 1$</ul></blockquote><p>On en déduit :</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="séries-géométriques-et-approximations">Séries géométriques et approximations</h3><p>L’identité ($\ref{eqn:sum_of_geometric_series}$) est utile pour calculer des approximations de $\cfrac{1}{1-r}$ lorsque $|r| &lt; 1$.</p><p>En substituant $r=-\epsilon$ et $n=2$ dans cette formule, on obtient :</p>\[\frac{1}{1+\epsilon} - (1 - \epsilon) = \frac{\epsilon^2}{1 + \epsilon}\]<p>Donc, si $0 &lt; \epsilon &lt; 1$ :</p>\[0 &lt; \frac{1}{1 + \epsilon} - (1 - \epsilon) &lt; \epsilon^2\]<p>Ce qui donne :</p>\[\frac{1}{1 + \epsilon} \approx (1 - \epsilon) \pm \epsilon^2 \qquad (0 &lt; \epsilon &lt; 1)\]<p>On en déduit que pour un petit $\epsilon$ positif, $\cfrac{1}{1 + \epsilon}$ peut être approximé par $1 - \epsilon$.</p><h2 id="test-des-séries-p-p-series-test">Test des séries $p$ ($p$-Series Test)</h2><p>Pour un nombre réel positif $p$, une série de la forme suivante est appelée <strong>série $p$</strong> :</p>\[\sum_{n=1}^{\infty} \frac{1}{n^p}\]<blockquote class="prompt-info"><p><strong>Convergence/divergence des séries $p$</strong><br /> La série $p$ $\sum \cfrac{1}{n^p}$ :</p><ul><li>converge si $p&gt;1$<li>diverge si $p\leq 1$</ul></blockquote><p>Dans le cas où $p=1$, la série $p$ devient la série harmonique, dont nous avons déjà montré la divergence.<br /> Pour $p=2$, le calcul de la valeur de $\sum \cfrac{1}{n^2}$ est connu sous le nom de “problème de Bâle (Basel problem)”, du nom de la ville d’origine de la famille Bernoulli, qui a produit plusieurs mathématiciens célèbres sur plusieurs générations et qui a été la première à démontrer la convergence de cette série. La réponse à ce problème est $\cfrac{\pi^2}{6}$.</p><p>Plus généralement, la série $p$ pour $p&gt;1$ est appelée <strong>fonction zêta (zeta function)</strong>. Elle a été introduite par Leonhard Euler en 11740 <a href="https://en.wikipedia.org/wiki/Holocene_calendar">HE</a> et nommée plus tard par Riemann. C’est une fonction spéciale définie par :</p>\[\zeta(s) := \sum_{n=1}^{\infty} \frac{1}{n^s} \qquad (s&gt;1)\]<p>Ce sujet s’éloigne un peu de notre thème principal et, pour être franc, étant ingénieur et non mathématicien, je ne le maîtrise pas parfaitement. Je ne l’aborderai donc pas ici. Cependant, il est intéressant de noter que Leonhard Euler a montré que la fonction zêta peut également être exprimée sous forme d’un produit infini de nombres premiers, appelé <strong>produit d’Euler (Euler Product)</strong>. La fonction zêta occupe depuis une place centrale dans plusieurs domaines de la théorie analytique des nombres. La <strong>fonction zêta de Riemann (Riemann zeta function)</strong>, qui étend le domaine de définition aux nombres complexes, et la célèbre conjecture non résolue, l’<strong>hypothèse de Riemann (Riemann hypothesis)</strong>, en sont des exemples.</p><p>Pour revenir à notre sujet, la démonstration du test des séries $p$ nécessite le <a href="#test-de-comparaison">test de comparaison</a> et le <a href="#test-de-lintégrale">test de l’intégrale</a> que nous verrons plus loin. Cependant, la convergence/divergence des séries $p$ peut être utilisée efficacement avec les séries géométriques dans le <a href="#test-de-comparaison">test de comparaison</a> que nous allons voir juste après, c’est pourquoi je l’ai intentionnellement placée ici.</p><h3 id="démonstration-1">Démonstration</h3><h4 id="i-lorsque-p1">i) Lorsque $p&gt;1$</h4><p>L’intégrale :</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>converge, donc par le <a href="#test-de-lintégrale">test de l’intégrale</a>, la série $\sum \cfrac{1}{n^p}$ converge également.</p><h4 id="ii-lorsque-pleq-1">ii) Lorsque $p\leq 1$</h4><p>Dans ce cas :</p>\[0 \leq \frac{1}{n} \leq \frac{1}{n^p}\]<p>Comme nous savons que la série harmonique $\sum \cfrac{1}{n}$ diverge, par le <a href="#test-de-comparaison">test de comparaison</a>, $\sum \cfrac{1}{n^p}$ diverge également.</p><h4 id="conclusion">Conclusion</h4><p>D’après i) et ii), la série $p$ $\sum \cfrac{1}{n^p}$ converge si $p&gt;1$ et diverge si $p \leq 1$. $\blacksquare$</p><h2 id="test-de-comparaison">Test de comparaison</h2><p>Le <strong>test de comparaison (Comparison Test)</strong> de Jakob Bernoulli est utile pour déterminer la convergence ou la divergence des <strong>séries à termes positifs (series of positive terms)</strong>, c’est-à-dire des séries dont les termes généraux sont des nombres réels positifs ou nuls.</p><p>Une série à termes positifs $\sum a_n$ forme une suite croissante, donc si elle ne diverge pas vers l’infini ($\sum a_n = \infty$), elle converge nécessairement. Ainsi, dans le contexte des séries à termes positifs, l’expression :</p>\[\sum a_n &lt; \infty\]<p>signifie que <u>la série converge</u>.</p><blockquote class="prompt-info"><p><strong>Test de comparaison (Comparison Test)</strong><br /> Si $0 \leq a_n \leq b_n$, alors :</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>En particulier, pour les séries à termes positifs comme $\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}}$, qui ont une forme similaire aux séries géométriques $\sum ar^{n-1}$ ou aux séries $p$ $\sum \cfrac{1}{n^p}$ que nous avons vues précédemment, il est recommandé d’essayer activement le test de comparaison.</p><p>Plusieurs autres tests de convergence/divergence que nous verrons par la suite peuvent tous être dérivés de ce <strong>test de comparaison</strong>, ce qui en fait l’un des tests les plus importants.</p><h3 id="test-de-comparaison-limite">Test de comparaison limite</h3><p>Pour deux séries à termes positifs $\sum a_n$ et $\sum b_n$, si le rapport des termes généraux $a_n/b_n$ est tel que les termes dominants du numérateur et du dénominateur s’annulent, donnant $\lim_{n\to\infty} \cfrac{a_n}{b_n}=c \text{ (où }c\text{ est un nombre positif fini)}$, alors on peut utiliser le <strong>test de comparaison limite (Limit Comparison Test)</strong> si l’on connaît la convergence ou la divergence de la série $\sum b_n$.</p><blockquote class="prompt-info"><p><strong>Test de comparaison limite (Limit Comparison Test)</strong><br /> Si :</p>\[\lim_{n\to\infty} \frac{a_n}{b_n} = c \text{ (où }c\text{ est un nombre positif fini)}\]<p>alors les deux séries $\sum a_n$ et $\sum b_n$ convergent toutes les deux ou divergent toutes les deux. C’est-à-dire, $ \sum a_n &lt; \infty \ \Leftrightarrow \ \sum b_n &lt; \infty$.</p></blockquote><h2 id="test-de-la-racine">Test de la racine</h2><blockquote class="prompt-info"><p><strong>Théorème</strong><br /> Pour une série à termes positifs $\sum a_n$ et un nombre positif $\epsilon &lt; 1$ :</p><ul><li>Si pour tout $n$, $\sqrt[n]{a_n}&lt; 1-\epsilon$, alors la série $\sum a_n$ converge<li>Si pour tout $n$, $\sqrt[n]{a_n}&gt; 1+\epsilon$, alors la série $\sum a_n$ diverge</ul></blockquote><blockquote class="prompt-info"><p><strong>Corollaire : Test de la racine (Root Test)</strong><br /> Pour une série à termes positifs $\sum a_n$, si la limite :</p>\[\lim_{n\to\infty} \sqrt[n]{a_n} =: r\]<p>existe, alors :</p><ul><li>Si $r&lt;1$, la série $\sum a_n$ converge<li>Si $r&gt;1$, la série $\sum a_n$ diverge</ul></blockquote><blockquote class="prompt-warning"><p>Dans le corollaire ci-dessus, si $r=1$, le test ne permet pas de déterminer la convergence ou la divergence, et il faut utiliser une autre méthode.</p></blockquote><h2 id="test-du-rapport">Test du rapport</h2><blockquote class="prompt-info"><p><strong>Test du rapport (Ratio Test)</strong><br /> Pour une suite de nombres positifs $(a_n)$ et $0 &lt; r &lt; 1$ :</p><ul><li>Si pour tout $n$, $a_{n+1}/a_n \leq r$, alors la série $\sum a_n$ converge<li>Si pour tout $n$, $a_{n+1}/a_n \geq 1$, alors la série $\sum a_n$ diverge</ul></blockquote><blockquote class="prompt-info"><p><strong>Corollaire</strong><br /> Pour une suite de nombres positifs $(a_n)$, si la limite $\rho := \lim_{n\to\infty} \cfrac{a_{n+1}}{a_n}$ existe, alors :</p><ul><li>Si $\rho &lt; 1$, la série $\sum a_n$ converge<li>Si $\rho &gt; 1$, la série $\sum a_n$ diverge</ul></blockquote><h2 id="test-de-lintégrale">Test de l’intégrale</h2><p>Le calcul intégral peut être utilisé pour déterminer la convergence ou la divergence d’une série à termes positifs décroissants.</p><blockquote class="prompt-info"><p><strong>Test de l’intégrale (Integral Test)</strong><br /> Si $f: \left[1,\infty \right) \rightarrow \mathbb{R}$ est une fonction continue, décroissante et toujours positive, alors la série $\sum f(n)$ converge si et seulement si l’intégrale :</p>\[\int_1^\infty f(x)\ dx := \lim_{b\to\infty} \int_1^b f(x)\ dx\]<p>converge.</p></blockquote><h3 id="démonstration-2">Démonstration</h3><p>Si la fonction $f(x)$ est continue, décroissante et toujours positive, alors l’inégalité :</p>\[f(n+1) \leq \int_n^{n+1} f(x)\ dx \leq f(n)\]<p>est vérifiée. En additionnant cette inégalité de $n=1$ jusqu’au terme général, on obtient :</p>\[f(2) + \cdots + f(n+1) \leq \int_1^{n+1} f(x)\ dx \leq f(1) + \cdots + f(n)\]<p>En appliquant le <a href="#test-de-comparaison">test de comparaison</a>, on obtient le résultat souhaité. $\blacksquare$</p><h2 id="séries-alternées">Séries alternées</h2><p>Une <strong>série alternée (alternating series)</strong> est une série $\sum a_n$ dont les termes $a_n$ sont non nuls et dont le signe de chaque terme est différent de celui du terme suivant $a_{n+1}$, c’est-à-dire que les termes positifs et négatifs apparaissent alternativement.</p><p>Pour les séries alternées, le théorème suivant, découvert par le mathématicien allemand Gottfried Wilhelm Leibniz, est très utile pour déterminer la convergence ou la divergence.</p><blockquote class="prompt-info"><p><strong>Test des séries alternées (Alternating Series Test)</strong><br /> Si :</p><ol><li>Pour tout $n$, $a_n$ et $a_{n+1}$ ont des signes opposés,<li>Pour tout $n$, $|a_n| \geq |a_{n+1}|$, et<li>$\lim_{n\to\infty} a_n = 0$,</ol><p>alors la série alternée $\sum a_n$ converge.</p></blockquote><h2 id="convergence-absolue">Convergence absolue</h2><p>On dit qu’une série $\sum a_n$ <strong>converge absolument (converge absolutely)</strong> si la série $\sum |a_n|$ converge.</p><p>Le théorème suivant est alors vérifié :</p><blockquote class="prompt-info"><p><strong>Théorème</strong><br /> Une série qui converge absolument converge.</p></blockquote><blockquote class="prompt-warning"><p>La réciproque de ce théorème n’est pas vraie.<br /> Si une série converge mais ne converge pas absolument, on dit qu’elle <strong>converge conditionnellement (converge conditionally)</strong>.</p></blockquote><h3 id="démonstration-3">Démonstration</h3><p>Pour un nombre réel $a$, définissons :</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>Alors :</p>\[a = a^+ - a^-, \qquad |a| = a^+ + a^-\]<p>Comme $0 \leq a^\pm \leq |a|$, par le <a href="#test-de-comparaison">test de comparaison</a>, si la série $\sum |a_n|$ converge, alors les séries $\sum a_n^+$ et $\sum a_n^-$ convergent également. Par conséquent, d’après les <a href="/fr/posts/sequences-and-series/#propriétés-fondamentales-des-séries-convergentes">propriétés fondamentales des séries convergentes</a> :</p>\[\sum a_n = \sum (a_n^+ - a_n^-) = \sum a_n^+ - \sum a_n^-\]<p>converge également. $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="fr">Suites et séries</title><link href="https://www.yunseo.kim/fr/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>2025-05-13T16:24:07+09:00</updated> <id>https://www.yunseo.kim/fr/posts/sequences-and-series/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Calculus" /> <summary xml:lang="fr">Nous examinons les concepts fondamentaux du calcul différentiel et intégral, tels que la définition des suites et séries, la convergence et la divergence des suites, la convergence et la divergence des séries, et la définition de la base e du logarithme naturel.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Nous examinons les concepts fondamentaux du calcul différentiel et intégral, tels que la définition des suites et séries, la convergence et la divergence des suites, la convergence et la divergence des séries, et la définition de la base e du logarithme naturel.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="suites">Suites</h2><p>En calcul différentiel et intégral, une <strong>suite (sequence)</strong> fait généralement référence à une suite infinie. En d’autres termes, une suite est une fonction définie sur l’ensemble des <strong>nombres naturels (natural numbers)</strong></p>\[\mathbb{N} := \{1,2,3,\dots\}\]<p>Si les valeurs de cette fonction sont des nombres réels, on parle de ‘suite réelle’, si ce sont des nombres complexes, de ‘suite complexe’, si ce sont des points, de ‘suite de points’, si ce sont des matrices, de ‘suite de matrices’, si ce sont des fonctions, de ‘suite de fonctions’, si ce sont des ensembles, de ‘suite d’ensembles’, mais tous ces termes peuvent être simplement désignés comme ‘suite’ ou ‘séquence’.</p><p>Généralement, pour le <strong>corps des nombres réels (the field of real numbers)</strong> $\mathbb{R}$, dans une suite $\mathbf{a}: \mathbb{N} \to \mathbb{R}$, on pose</p>\[a_1 := \mathbf{a}(1), \quad a_2 := \mathbf{a}(2), \quad a_3 := \mathbf{a}(3)\]<p>et cette suite est représentée par</p>\[a_1,\, a_2,\, a_3,\, \dots\]<p>ou</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*}\]<blockquote class="prompt-info"><p>*Dans le processus de définition d’une suite, au lieu de l’ensemble complet des nombres naturels $\mathbb{N}$ comme domaine de définition, on peut également utiliser l’ensemble des entiers non négatifs</p>\[\mathbb{N}_0 := \{0\} \cup \mathbb{N} = \{0,1,2,\dots\}\]<p>ou</p>\[\{2,3,4,\dots \}\]<p>Par exemple, lors de l’étude de la théorie des séries de puissances, il est plus naturel d’avoir $\mathbb{N}_0$ comme domaine de définition.</p></blockquote><h2 id="convergence-et-divergence">Convergence et divergence</h2><p>Si une suite $(a_n)$ converge vers un nombre réel $l$, on écrit</p>\[\lim_{n\to \infty} a_n = l\]<p>et $l$ est appelé la <strong>valeur limite</strong> de la suite $(a_n)$.</p><blockquote class="prompt-info"><p>La définition rigoureuse utilisant l’<strong>argument epsilon-delta (epsilon-delta argument)</strong> est la suivante :</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>En d’autres termes, si pour tout nombre positif $\epsilon$, aussi petit soit-il, il existe toujours un nombre naturel $N$ tel que $|a_n - l | &lt; \epsilon$ pour $n&gt;N$, cela signifie que la différence entre $a_n$ et $l$ devient infiniment petite pour $n$ suffisamment grand, et donc on définit qu’une suite $(a_n)$ satisfaisant cette condition converge vers le nombre réel $l$.</p></blockquote><p>Une suite qui ne converge pas est dite <strong>divergente</strong>. <em>La convergence ou la divergence d’une suite ne change pas si un nombre fini de ses termes est modifié.</em></p><p>Si chaque terme de la suite $(a_n)$ devient infiniment grand, on écrit</p>\[\lim_{n\to \infty} a_n = \infty\]<p>et on dit que la suite <em>diverge vers plus l’infini</em>. De même, si chaque terme de la suite $(a_n)$ devient infiniment petit, on écrit</p>\[\lim_{n\to \infty} a_n = -\infty\]<p>et on dit que la suite <em>diverge vers moins l’infini</em>.</p><h2 id="propriétés-fondamentales-des-suites-convergentes">Propriétés fondamentales des suites convergentes</h2><p>Si les suites $(a_n)$ et $(b_n)$ convergent toutes les deux (c’est-à-dire qu’elles ont des valeurs limites), alors les suites $(a_n + b_n)$ et $(a_n \cdot b_n)$ convergent également, et dans ce cas</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>De plus, pour tout nombre réel $t$,</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>Ces propriétés sont appelées <strong>propriétés fondamentales des suites convergentes</strong> ou <strong>propriétés fondamentales des limites</strong>.</p><h2 id="la-base-e-du-logarithme-naturel">La base $e$ du logarithme naturel</h2><p><strong>La base du logarithme naturel</strong> est définie par</p>\[e := \lim_{n\to \infty} \left(1+\frac{1}{n} \right)^n \approx 2.718\]<p>C’est l’une des constantes les plus importantes en mathématiques.</p><blockquote class="prompt-tip"><p>L’expression ‘constante naturelle’ est largement utilisée uniquement en Corée, mais ce n’est pas un terme standard. Le terme officiel enregistré dans le dictionnaire mathématique de la Société mathématique coréenne est <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">‘base du logarithme naturel’</a>, et l’expression ‘constante naturelle’ ne peut être trouvée dans ce dictionnaire. De plus, on ne peut même pas trouver le mot ‘constante naturelle’ dans le dictionnaire standard coréen de l’Institut national de la langue coréenne, et dans la <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">définition du dictionnaire pour ‘logarithme naturel’</a>, il est seulement mentionné comme “un certain nombre généralement représenté par e”.<br /> Dans les pays anglophones et au Japon, il n’existe pas non plus de terme correspondant, et en anglais, on utilise principalement ‘the base of the natural logarithm’ ou en abrégé ‘natural base’, ou encore ‘Euler’s number’ ou ‘the number $e$’.<br /> Comme l’origine est incertaine, que la Société mathématique coréenne ne l’a jamais reconnu comme un terme officiel, et qu’il n’est utilisé nulle part dans le monde sauf en Corée, il n’y a absolument aucune raison d’insister sur ce terme. Par conséquent, à partir de maintenant, je l’appellerai ‘base du logarithme naturel’ ou simplement $e$.</p></blockquote><h2 id="séries">Séries</h2><p>Pour une suite</p>\[\mathbf{a} = (a_1, a_2, a_3, \dots)\]<p>la nouvelle suite formée par les sommes partielles de cette suite</p>\[a_1, \quad a_1 + a_2, \quad a_1 + a_2 + a_3, \quad \dots\]<p>est appelée <strong>série</strong> de la suite $\mathbf{a}$. La série de la suite $(a_n)$ est représentée par</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*}\]<h2 id="convergence-et-divergence-des-séries">Convergence et divergence des séries</h2><p>Si la série obtenue à partir de la suite $(a_n)$</p>\[a_1, \quad a_1 + a_2, \quad a_1 + a_2 + a_3, \quad \dots\]<p>converge vers un certain nombre réel $l$, on écrit</p>\[\sum_{n=1}^{\infty} a_n = l\]<p>Dans ce cas, la valeur limite $l$ est appelée la <strong>somme</strong> de la série $\sum a_n$. Le symbole</p>\[\sum a_n\]<p>peut représenter soit la <u>série</u>, soit la <u>somme de la série</u>, selon le contexte.</p><p>Une série qui ne converge pas est dite <strong>divergente</strong>.</p><h2 id="propriétés-fondamentales-des-séries-convergentes">Propriétés fondamentales des séries convergentes</h2><p>À partir des <a href="#propriétés-fondamentales-des-suites-convergentes">propriétés fondamentales des suites convergentes</a>, on obtient les propriétés fondamentales suivantes pour les séries convergentes. Pour un nombre réel $t$ et deux séries convergentes $\sum a_n$ et $\sum b_n$,</p>\[\sum(a_n + b_n) = \sum a_n + \sum b_n, \qquad \sum ta_n = t\sum a_n \tag{4}\]<p>La convergence d’une série n’est pas affectée par le changement d’un nombre fini de termes. En d’autres termes, si pour deux suites $(a_n)$ et $(b_n)$, $a_n=b_n$ sauf pour un nombre fini de $n$, alors la série $\sum a_n$ converge si et seulement si la série $\sum b_n$ converge.</p>]]> </content> </entry> <entry><title xml:lang="fr">Les lois du mouvement de Newton</title><link href="https://www.yunseo.kim/fr/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>2026-02-16T05:09:10+09:00</updated> <id>https://www.yunseo.kim/fr/posts/newtons-laws-of-motion/</id> <author> <name>Yunseo Kim</name> </author> <category term="Physics" /> <category term="Classical Dynamics" /> <summary xml:lang="fr">Nous explorons les lois du mouvement de Newton, la signification de ces trois lois, ainsi que les définitions de la masse inertielle et de la masse gravitationnelle, et examinons le principe d&apos;équivalence qui a une importance significative non seulement en mécanique classique mais aussi dans la théorie de la relativité générale.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Nous explorons les lois du mouvement de Newton, la signification de ces trois lois, ainsi que les définitions de la masse inertielle et de la masse gravitationnelle, et examinons le principe d'équivalence qui a une importance significative non seulement en mécanique classique mais aussi dans la théorie de la relativité générale.</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>Les lois du mouvement de Newton</strong></p><ol><li>Un corps persiste dans son état de repos ou de mouvement rectiligne uniforme à moins qu’une force extérieure ne le contraigne à changer cet état.<li>Le taux de variation temporelle de la quantité de mouvement d’un corps est égal à la force qui lui est appliquée.<ul><li>$\vec{F} = \cfrac{d\vec{p}}{dt} = \cfrac{d}{dt}(m\vec{v}) = m\vec{a}$</ul><li>Lorsque deux corps exercent des forces l’un sur l’autre, ces forces sont de même intensité et de direction opposée.<ul><li>$\vec{F_1} = -\vec{F_2}$</ul></ol></blockquote><blockquote class="prompt-info"><p><strong>Principe d’équivalence</strong></p><ul><li>Masse inertielle : la masse qui détermine l’accélération d’un corps soumis à une force donnée<li>Masse gravitationnelle : la masse qui détermine la force gravitationnelle entre un corps et un autre<li>Il est actuellement établi que la masse inertielle et la masse gravitationnelle sont manifestement identiques avec une marge d’erreur d’environ $10^{-12}$<li>L’affirmation selon laquelle la masse inertielle et la masse gravitationnelle sont exactement identiques est appelée <strong>principe d’équivalence</strong></ul></blockquote><h2 id="les-lois-du-mouvement-de-newton">Les lois du mouvement de Newton</h2><p>Les lois du mouvement de Newton sont trois lois publiées par Isaac Newton en 11687 dans son ouvrage Philosophiæ Naturalis Principia Mathematica (Principes mathématiques de la philosophie naturelle, abrégé en “Principia”), qui constituent le fondement de la mécanique newtonienne.</p><ol><li>Un corps persiste dans son état de repos ou de mouvement rectiligne uniforme à moins qu’une force extérieure ne le contraigne à changer cet état.<li>Le taux de variation temporelle de la quantité de mouvement d’un corps est égal à la force qui lui est appliquée.<li>Lorsque deux corps exercent des forces l’un sur l’autre, ces forces sont de même intensité et de direction opposée.</ol><h3 id="première-loi-de-newton">Première loi de Newton</h3><blockquote><p>I. Un corps persiste dans son état de repos ou de mouvement rectiligne uniforme à moins qu’une force extérieure ne le contraigne à changer cet état.</p></blockquote><p>Un corps qui n’est soumis à aucune force extérieure est appelé <strong>corps libre</strong> ou <strong>particule libre</strong>. Cependant, la première loi seule ne fournit qu’un concept qualitatif de la force.</p><h3 id="deuxième-loi-de-newton">Deuxième loi de Newton</h3><blockquote><p>II. Le taux de variation temporelle de la quantité de mouvement d’un corps est égal à la force qui lui est appliquée.</p></blockquote><p>Newton a défini la <strong>quantité de mouvement</strong> comme le produit de la masse par la vitesse</p>\[\vec{p} \equiv m\vec{v} \label{eqn:momentum}\tag{1}\]<p>À partir de cela, la deuxième loi de Newton peut être exprimée comme suit :</p>\[\vec{F} = \frac{d\vec{p}}{dt} = \frac{d}{dt}(m\vec{v}) = m\vec{a}. \label{eqn:2nd_law}\tag{2}\]<p>Contrairement à leur nom, la première et la deuxième loi de Newton sont en réalité plus proches d’une “définition” de la force que d’une “loi”. On peut également constater que la définition de la force dépend de la définition de la “masse”.</p><h3 id="troisième-loi-de-newton">Troisième loi de Newton</h3><blockquote><p>III. Lorsque deux corps exercent des forces l’un sur l’autre, ces forces sont de même intensité et de direction opposée.</p></blockquote><p>Cette loi est également connue sous le nom de “loi d’action et de réaction” et s’applique lorsque la force qu’un corps exerce sur un autre est dirigée selon la droite qui relie les deux points d’application. Une telle force est appelée <strong>force centrale</strong>, et la troisième loi s’applique que cette force soit attractive ou répulsive. La gravité ou la force électrostatique entre deux corps au repos, ainsi que la force élastique, sont des exemples de forces centrales. En revanche, les forces qui dépendent de la vitesse des corps en interaction, comme la force entre charges en mouvement ou la gravité entre corps en mouvement, sont des forces non centrales, et dans ces cas, la troisième loi ne s’applique pas.</p><p>En tenant compte de la définition de la masse vue précédemment, la troisième loi peut être reformulée comme suit :</p><blockquote><p>III$^\prime$. Si deux corps forment un système isolé idéal, leurs accélérations sont de direction opposée et le rapport de leurs intensités est égal à l’inverse du rapport de leurs masses.</p></blockquote><p>Selon la troisième loi de Newton :</p>\[\vec{F_1} = -\vec{F_2} \label{eqn:3rd_law}\tag{3}\]<p>En y substituant la deuxième loi ($\ref{eqn:2nd_law}$) :</p>\[\frac{d\vec{p_1}}{dt} = -\frac{d\vec{p_2}}{dt} \label{eqn:3rd-1_law}\tag{4}\]<p>Cela montre que la quantité de mouvement est conservée dans l’interaction isolée entre deux particules.</p>\[\frac{d}{dt}(\vec{p_1}+\vec{p_2}) = 0 \label{eqn:conservation_of_momentum}\tag{5}\]<p>De plus, comme dans l’équation ($\ref{eqn:3rd-1_law}$), $\vec{p}=m\vec{v}$ et la masse $m$ est constante :</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>Ce qui donne :</p>\[\frac{m_2}{m_1} = -\frac{a_1}{a_2}. \tag{7}\]<p>Bien que la troisième loi de Newton décrive le cas où deux corps forment un système isolé, il est en réalité impossible de réaliser de telles conditions idéales, ce qui rend l’affirmation de Newton quelque peu audacieuse. Malgré cette limitation, grâce à la profonde intuition physique de Newton, la mécanique newtonienne a maintenu sa position solide pendant près de 300 ans sans qu’aucune erreur ne soit détectée lors des diverses expériences de vérification. Ce n’est qu’au début des années 11900 que des mesures suffisamment précises ont pu montrer des différences entre les prédictions de la théorie newtonienne et la réalité, donnant ainsi naissance à la théorie de la relativité et à la mécanique quantique.</p><h2 id="masse-inertielle-et-masse-gravitationnelle">Masse inertielle et masse gravitationnelle</h2><p>Une méthode pour déterminer la masse d’un objet consiste à comparer son poids à un poids standard à l’aide d’instruments comme une balance. Cette méthode utilise le fait que le poids d’un objet dans un champ gravitationnel est égal à la grandeur de la force gravitationnelle qui s’exerce sur lui, transformant ainsi la deuxième loi $\vec{F}=m\vec{a}$ en $\vec{W}=m\vec{g}$. Cette méthode repose sur l’hypothèse fondamentale que la masse $m$ définie dans III$^\prime$ est identique à la masse $m$ qui apparaît dans l’équation gravitationnelle. Ces deux masses sont respectivement appelées <strong>masse inertielle</strong> et <strong>masse gravitationnelle</strong>, et sont définies comme suit :</p><ul><li>Masse inertielle : la masse qui détermine l’accélération d’un corps soumis à une force donnée<li>Masse gravitationnelle : la masse qui détermine la force gravitationnelle entre un corps et un autre</ul><p>Bien qu’il s’agisse d’une histoire inventée après coup et sans rapport avec Galileo Galilei, l’expérience de la chute depuis la tour de Pise est considérée comme la première expérience de pensée démontrant que la masse inertielle et la masse gravitationnelle pourraient être identiques. Newton lui-même a tenté de montrer qu’il n’y avait pas de différence entre ces deux masses en mesurant les périodes de pendules de même longueur mais avec des masses différentes, mais sa méthode expérimentale et sa précision étaient trop rudimentaires pour fournir une preuve concluante.</p><p>Plus tard, à la fin des années 11800, le physicien hongrois Eötvös Loránd Ágoston a réalisé l’expérience d’Eötvös pour mesurer précisément la différence entre la masse inertielle et la masse gravitationnelle, prouvant leur identité avec une précision considérable (marge d’erreur inférieure à 1/20 000 000).</p><p>Des expériences plus récentes menées par Robert Henry Dicke et d’autres ont encore amélioré cette précision, et il est maintenant établi que la masse inertielle et la masse gravitationnelle sont manifestement identiques avec une marge d’erreur d’environ $10^{-12}$. Ce résultat a une signification extrêmement importante dans la théorie de la relativité générale, et l’affirmation selon laquelle la masse inertielle et la masse gravitationnelle sont exactement identiques est appelée <strong>principe d’équivalence</strong>.</p>]]> </content> </entry> <entry><title xml:lang="fr">EDO linéaire homogène du second ordre à coefficients constants</title><link href="https://www.yunseo.kim/fr/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-07-11T20:37:36+09:00</updated> <id>https://www.yunseo.kim/fr/posts/homogeneous-linear-odes-with-constant-coefficients/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="fr">Selon le signe du discriminant de l&apos;équation caractéristique, nous examinons la forme que prend la solution générale de l&apos;EDO linéaire homogène à coefficients constants dans chaque cas.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Selon le signe du discriminant de l'équation caractéristique, nous examinons la forme que prend la solution générale de l'EDO linéaire homogène à coefficients constants dans chaque cas.</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>EDO linéaire homogène du second ordre à coefficients constants : $y^{\prime\prime} + ay^{\prime} + by = 0$<li><strong>Équation caractéristique</strong> : $\lambda^2 + a\lambda + b = 0$<li>Selon le signe du discriminant $a^2 - 4b$ de l’équation caractéristique, la forme de la solution générale peut être divisée en trois cas comme indiqué dans le tableau</ul><table><thead><tr><th style="text-align: center">Cas<th style="text-align: center">Solutions de l’équation caractéristique<th style="text-align: center">Base des solutions de l’EDO<th style="text-align: center">Solution générale de l’EDO<tbody><tr><td style="text-align: center">I<td style="text-align: center">Racines réelles distinctes<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">Racine réelle double<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">Racines complexes conjuguées<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="prérequis">Prérequis</h2><ul><li><a href="/fr/posts/Bernoulli-Equation/">Équation de Bernoulli</a><li><a href="/fr/posts/homogeneous-linear-odes-of-second-order/">EDOs linéaires homogènes du second ordre</a><li>Formule d’Euler</ul><h2 id="équation-caractéristique">Équation caractéristique</h2><p>Considérons l’EDO linéaire homogène du second ordre où les coefficients $a$ et $b$ sont des constantes</p>\[y^{\prime\prime} + ay^{\prime} + by = 0 \label{eqn:ode_with_constant_coefficients}\tag{1}\]<p>Ce type d’équation trouve des applications importantes dans les vibrations mécaniques et électriques.</p><p>Nous avons précédemment trouvé la solution générale de l’équation logistique dans <a href="/fr/posts/Bernoulli-Equation/">l’équation de Bernoulli</a>, et selon cela, l’EDO linéaire du premier ordre avec coefficient constant $k$</p>\[y^\prime + ky = 0\]<p>a pour solution la fonction exponentielle $y = ce^{-kx}$. (Dans l’équation (4) de cet article, cas où $A=-k$, $B=0$)</p><p>Par conséquent, pour l’équation ($\ref{eqn:ode_with_constant_coefficients}$) de forme similaire, nous pouvons d’abord essayer une solution de la forme</p>\[y=e^{\lambda x}\label{eqn:general_sol}\tag{2}\]<blockquote class="prompt-info"><p>Bien sûr, ceci n’est qu’une conjecture, et il n’y a aucune garantie que la solution générale soit vraiment de cette forme. Cependant, tant que nous trouvons deux solutions linéairement indépendantes, nous pouvons obtenir la solution générale grâce au <a href="/fr/posts/homogeneous-linear-odes-of-second-order/#principe-de-superposition">principe de superposition</a> comme nous l’avons vu dans <a href="/fr/posts/homogeneous-linear-odes-of-second-order/#base-et-solution-générale">les EDOs linéaires homogènes du second ordre</a>.<br /> Comme nous le verrons bientôt, <a href="#ii-racine-réelle-double-lambda---cfraca2">il y a des cas où nous devons trouver des solutions d’une forme différente</a>.</p></blockquote><p>En substituant l’équation ($\ref{eqn:general_sol}$) et ses dérivées</p>\[y^\prime = \lambda e^{\lambda x}, \quad y^{\prime\prime} = \lambda^2 e^{\lambda x}\]<p>dans l’équation ($\ref{eqn:ode_with_constant_coefficients}$), nous obtenons</p>\[(\lambda^2 + a\lambda + b)e^{\lambda x} = 0\]<p>Par conséquent, si $\lambda$ est une solution de l’<strong>équation caractéristique</strong></p>\[\lambda^2 + a\lambda + b = 0 \label{eqn:characteristic_eqn}\tag{3}\]<p>alors la fonction exponentielle ($\ref{eqn:general_sol}$) est une solution de l’EDO ($\ref{eqn:ode_with_constant_coefficients}$). En résolvant l’équation du second degré ($\ref{eqn:characteristic_eqn}$), nous obtenons</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>et de là, les deux fonctions</p>\[y_1 = e^{\lambda_1 x}, \quad y_2 = e^{\lambda_2 x} \tag{5}\]<p>deviennent des solutions de l’équation ($\ref{eqn:ode_with_constant_coefficients}$).</p><blockquote class="prompt-tip"><p>L’<strong>équation caractéristique</strong> et l’<strong>équation auxiliaire</strong> sont souvent utilisées de manière interchangeable, car elles ont exactement la même signification. Vous pouvez utiliser l’un ou l’autre terme.</p></blockquote><p>Maintenant, nous pouvons diviser en trois cas selon le signe du discriminant $a^2 - 4b$ de l’équation caractéristique ($\ref{eqn:characteristic_eqn}$).</p><ul><li>$a^2 - 4b &gt; 0$ : deux racines réelles distinctes<li>$a^2 - 4b = 0$ : racine réelle double<li>$a^2 - 4b &lt; 0$ : racines complexes conjuguées</ul><h2 id="forme-de-la-solution-générale-selon-le-signe-du-discriminant-de-léquation-caractéristique">Forme de la solution générale selon le signe du discriminant de l’équation caractéristique</h2><h3 id="i-deux-racines-réelles-distinctes-lambda_1-et-lambda_2">I. Deux racines réelles distinctes $\lambda_1$ et $\lambda_2$</h3><p>Dans ce cas, la base des solutions de l’équation ($\ref{eqn:ode_with_constant_coefficients}$) sur un intervalle arbitraire est</p>\[y_1 = e^{\lambda_1 x}, \quad y_2 = e^{\lambda_2 x}\]<p>et la solution générale correspondante est</p>\[y = c_1 e^{\lambda_1 x} + c_2 e^{\lambda_2 x} \label{eqn:general_sol_1}\tag{6}\]<h3 id="ii-racine-réelle-double-lambda---cfraca2">II. Racine réelle double $\lambda = -\cfrac{a}{2}$</h3><p>Lorsque $a^2 - 4b = 0$, l’équation du second degré ($\ref{eqn:characteristic_eqn}$) n’a qu’une seule solution $\lambda = \lambda_1 = \lambda_2 = -\cfrac{a}{2}$, et par conséquent, nous ne pouvons obtenir qu’une seule solution de la forme $y = e^{\lambda x}$</p>\[y_1 = e^{-(a/2)x}\]<p>Pour obtenir une base, nous devons trouver une deuxième solution $y_2$ indépendante de $y_1$ et d’une forme différente.</p><p>Dans cette situation, nous pouvons utiliser la <a href="/fr/posts/homogeneous-linear-odes-of-second-order/#réduction-dordre">réduction d’ordre</a> que nous avons étudiée précédemment. En posant la deuxième solution recherchée comme $y_2=uy_1$, et</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>en substituant dans l’équation ($\ref{eqn:ode_with_constant_coefficients}$), nous obtenons</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>En regroupant les termes en $u^{\prime\prime}$, $u^\prime$, $u$, nous obtenons</p>\[y_1u^{\prime\prime} + (2y_1^\prime + ay_1)u^\prime + (y_1^{\prime\prime} + ay_1^\prime + by_1)u = 0\]<p>Ici, puisque $y_1$ est une solution de l’équation ($\ref{eqn:ode_with_constant_coefficients}$), l’expression dans la dernière parenthèse est égale à $0$, et</p>\[2y_1^\prime = -ae^{-ax/2} = -ay_1\]<p>donc l’expression dans la première parenthèse est également égale à $0$. Par conséquent, il ne reste que $u^{\prime\prime}y_1 = 0$, d’où $u^{\prime\prime}=0$. En intégrant deux fois, nous obtenons $u = c_1x + c_2$, et puisque les constantes d’intégration $c_1$ et $c_2$ peuvent prendre n’importe quelle valeur, nous pouvons simplement choisir $c_1=1$, $c_2=0$ pour poser $u=x$. Alors $y_2 = uy_1 = xy_1$, et puisque $y_1$ et $y_2$ sont linéairement indépendantes, elles forment une base. Par conséquent, lorsque l’équation caractéristique ($\ref{eqn:characteristic_eqn}$) a une racine double, la base des solutions de l’équation ($\ref{eqn:ode_with_constant_coefficients}$) sur un intervalle arbitraire est</p>\[e^{-ax/2}, \quad xe^{-ax/2}\]<p>et la solution générale correspondante est</p>\[y = (c_1 + c_2x)e^{-ax/2} \label{eqn:general_sol_2}\tag{7}\]<h3 id="iii-racines-complexes-conjuguées--cfrac12a--iomega-et--cfrac12a---iomega">III. Racines complexes conjuguées $-\cfrac{1}{2}a + i\omega$ et $-\cfrac{1}{2}a - i\omega$</h3><p>Dans ce cas, $a^2 - 4b &lt; 0$ et $\sqrt{-1} = i$, donc dans l’équation ($\ref{eqn:lambdas}$)</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>et définissons le nombre réel $\sqrt{b-\cfrac{1}{4}a^2} = \omega$.</p><p>En définissant $\omega$ comme ci-dessus, les solutions de l’équation caractéristique ($\ref{eqn:characteristic_eqn}$) deviennent les racines complexes conjuguées $\lambda = -\cfrac{1}{2}a \pm i\omega$, et les deux solutions complexes correspondantes de l’équation ($\ref{eqn:ode_with_constant_coefficients}$)</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>sont obtenues. Cependant, dans ce cas aussi, nous pouvons obtenir une base de solutions réelles (non imaginaires) comme suit.</p><p>La formule d’Euler</p>\[e^{it} = \cos t + i\sin t \label{eqn:euler_formula}\tag{8}\]<p>et en substituant $-t$ à la place de $t$ dans l’équation ci-dessus</p>\[e^{-it} = \cos t - i\sin t\]<p>en additionnant et soustrayant ces deux équations membre à membre, nous obtenons</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>La fonction exponentielle complexe $e^z$ d’une variable complexe $z = r + it$ avec partie réelle $r$ et partie imaginaire $it$ peut être définie en utilisant les fonctions réelles $e^r$, $\cos t$ et $\sin t$ comme suit.</p>\[e^z = e^{r + it} = e^r e^{it} = e^r(\cos t + i\sin t) \label{eqn:complex_exp}\tag{10}\]<p>En posant $r=-\cfrac{1}{2}ax$, $t=\omega x$, nous pouvons écrire</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>Par le <a href="/fr/posts/homogeneous-linear-odes-of-second-order/#principe-de-superposition">principe de superposition</a>, les sommes et produits par des constantes des solutions complexes ci-dessus sont également des solutions. Par conséquent, en additionnant les deux équations membre à membre et en multipliant les deux côtés par $\cfrac{1}{2}$, nous pouvons obtenir la première solution réelle $y_1$ comme suit.</p>\[y_1 = e^{-(a/2)x} \cos{\omega x}. \label{eqn:basis_1}\tag{11}\]<p>De même, en soustrayant la deuxième équation de la première membre à membre et en multipliant les deux côtés par $\cfrac{1}{2i}$, nous pouvons obtenir la deuxième solution réelle $y_2$.</p>\[y_2 = e^{-(a/2)x} \sin{\omega x}. \label{eqn:basis_2}\tag{12}\]<p>Puisque $\cfrac{y_1}{y_2} = \cot{\omega x}$ et que ce n’est pas une constante, $y_1$ et $y_2$ sont linéairement indépendantes sur tout intervalle et forment donc une base des solutions réelles de l’équation ($\ref{eqn:ode_with_constant_coefficients}$). De là, nous obtenons la solution générale</p>\[y = e^{-ax/2}(A\cos{\omega x} + B\sin{\omega x}) \quad \text{(}A,\, B\text{ sont des constantes arbitraires)} \label{eqn:general_sol_3}\tag{13}\] ]]> </content> </entry> <entry><title xml:lang="fr">Comment prendre en charge plusieurs langues sur un blog Jekyll avec Polyglot (3) - Résolution des problèmes de compilation du thème Chirpy et des erreurs de recherche</title><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="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-10-08T00:53:56+09:00</updated> <id>https://www.yunseo.kim/fr/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="fr">Présentation du processus d&apos;implémentation du support multilingue en appliquant le plugin Polyglot à un blog Jekyll basé sur le thème &apos;jekyll-theme-chirpy&apos;. Ce billet est le troisième de la série, traitant de l&apos;identification et de la résolution des erreurs survenues lors de l&apos;application de Polyglot au thème Chirpy.</summary> <content type="html" xml:lang="fr"> <![CDATA[<p>Présentation du processus d'implémentation du support multilingue en appliquant le plugin Polyglot à un blog Jekyll basé sur le thème 'jekyll-theme-chirpy'. Ce billet est le troisième de la série, traitant de l'identification et de la résolution des erreurs survenues lors de l'application de Polyglot au thème Chirpy.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="aperçu">Aperçu</h2><p>Début juillet 12024, j’ai ajouté l’implémentation du support multilingue en appliquant le plugin <a href="https://github.com/untra/polyglot">Polyglot</a> à ce blog basé sur Jekyll et hébergé via GitHub Pages. Cette série partage les bugs rencontrés lors de l’application du plugin Polyglot au thème Chirpy et leur processus de résolution, ainsi que les méthodes de rédaction des en-têtes HTML et du sitemap.xml en tenant compte du SEO. La série se compose de 3 articles, et celui que vous lisez est le troisième.</p><ul><li>Partie 1 : <a href="/fr/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-1">Application du plugin Polyglot &amp; modification des en-têtes HTML et du sitemap</a><li>Partie 2 : <a href="/fr/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-2">Implémentation du bouton de sélection de langue &amp; localisation de la mise en page</a><li>Partie 3 : Résolution des problèmes de compilation du thème Chirpy et des erreurs de recherche (cet article)</ul><blockquote class="prompt-info"><p>À l’origine composée de 2 parties, la série a été étendue à 3 parties suite à plusieurs enrichissements de contenu qui ont considérablement augmenté le volume.</p></blockquote><h2 id="exigences">Exigences</h2><ul class="task-list"><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Le résultat du build (page web) doit pouvoir être fourni en séparant les chemins par langue (ex. <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" />Pour minimiser autant que possible le temps et les efforts supplémentaires requis pour le support multilingue, il doit être possible de reconnaître automatiquement la langue selon le chemin local où se trouve le fichier (ex. <code class="language-plaintext filepath highlighter-rouge">/_posts/ko/</code>, <code class="language-plaintext filepath highlighter-rouge">/_posts/ja/</code>) lors du build, sans avoir à spécifier manuellement les balises ‘lang’ et ‘permalink’ dans le YAML front matter du fichier markdown original écrit.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />La partie en-tête de chaque page du site doit inclure les balises méta Content-Language appropriées, les balises alternatives hreflang et les liens canoniques pour répondre aux directives SEO Google pour la recherche multilingue.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Il doit être possible de fournir tous les liens de pages par version linguistique du site sans omission via <code class="language-plaintext filepath highlighter-rouge">sitemap.xml</code>, et <code class="language-plaintext filepath highlighter-rouge">sitemap.xml</code> lui-même ne doit exister qu’une seule fois dans le chemin racine sans duplication.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Toutes les fonctionnalités fournies par le <a href="https://github.com/cotes2020/jekyll-theme-chirpy">thème Chirpy</a> doivent fonctionner normalement sur chaque page linguistique, sinon elles doivent être corrigées pour fonctionner normalement.<ul class="task-list"><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Fonctionnement normal des fonctionnalités ‘Recently Updated’ et ‘Trending Tags’<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Aucune erreur ne doit se produire lors du processus de build utilisant GitHub Actions<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Fonctionnement normal de la fonction de recherche de posts en haut à droite du blog</ul></ul><h2 id="avant-de-commencer">Avant de commencer</h2><p>Cet article fait suite à la <a href="/fr/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-1">première partie</a> et à la <a href="/fr/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-2">deuxième partie</a>, donc si vous ne les avez pas encore lues, je vous recommande de les lire d’abord.</p><h2 id="résolution-de-problèmes-relative_url_regex-target-of-repeat-operator-is-not-specified">Résolution de problèmes (‘relative_url_regex’: target of repeat operator is not specified)</h2><p>(+ 12025.10.08. Mise à jour) <a href="https://polyglot.untra.io/2025/09/20/polyglot.1.11.0/">Ce bug a été corrigé dans Polyglot 1.11</a>.</p><p>Après avoir terminé les étapes précédentes, j’ai exécuté la commande <code class="language-plaintext highlighter-rouge">bundle exec jekyll serve</code> pour tester la compilation, mais elle a échoué avec l’erreur <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>début omis<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)

...(fin omise)
</span></pre></div></div><p>Après avoir recherché si un problème similaire avait été signalé, j’ai trouvé <a href="https://github.com/untra/polyglot/issues/204">exactement le même problème</a> déjà enregistré dans le dépôt Polyglot, avec une solution.</p><p>Le fichier <a href="https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_config.yml"><code class="language-plaintext filepath highlighter-rouge">_config.yml</code></a> du thème Chirpy que j’utilise contient la syntaxe suivante :</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>Le problème vient des expressions régulières dans les deux fonctions du fichier <a href="https://github.com/untra/polyglot/blob/master/lib/jekyll/polyglot/patches/jekyll/site.rb"><code class="language-plaintext filepath highlighter-rouge">site.rb</code></a> de Polyglot qui ne traitent pas correctement les modèles de globbing contenant des caractères génériques comme <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="/fr/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>Il existe deux façons de résoudre ce problème.</p><h3 id="1-forker-polyglot-et-modifier-les-parties-problématiques">1. Forker Polyglot et modifier les parties problématiques</h3><p>Au moment de la rédaction de cet article (11.12024), la <a href="https://jekyllrb.com/docs/configuration/options/#global-configuration">documentation officielle de Jekyll</a> indique que le paramètre <code class="language-plaintext highlighter-rouge">exclude</code> prend en charge les modèles de globbing pour les noms de fichiers.</p><blockquote><p>“This configuration option supports Ruby’s File.fnmatch filename globbing patterns to match multiple entries to exclude.”</p></blockquote><p>Le problème ne vient donc pas du thème Chirpy mais des fonctions <code class="language-plaintext highlighter-rouge">relative_url_regex()</code> et <code class="language-plaintext highlighter-rouge">absolute_url_regex()</code> de Polyglot, donc la solution fondamentale est de les modifier pour éviter ce problème.</p><p><del>Comme ce bug n’est pas encore résolu dans Polyglot,</del> comme indiqué ci-dessus, <a href="https://polyglot.untra.io/2025/09/20/polyglot.1.11.0/">ce problème a été résolu à partir de la version 1.11 de Polyglot</a>. À l’époque où le problème survenait, on pouvait le résoudre en forquant le dépôt Polyglot en se référant <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">ce billet de blog</a>(site supprimé) et</del> à <a href="https://github.com/untra/polyglot/issues/204#issuecomment-2143270322">la réponse dans l’issue GitHub mentionnée</a>, puis en modifiant les parties problématiques comme suit pour utiliser cette version à la place de l’original.</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-remplacer-les-modèles-de-globbing-par-des-noms-de-fichiers-exacts-dans-le-fichier-_configyml-du-thème-chirpy">2. Remplacer les modèles de globbing par des noms de fichiers exacts dans le fichier ‘_config.yml’ du thème Chirpy</h3><p>La méthode idéale serait que ce correctif soit intégré au flux principal de Polyglot. Mais en attendant, il faudrait utiliser une version forkée, ce qui peut être fastidieux car il faut suivre les mises à jour de Polyglot. J’ai donc opté pour une autre approche.</p><p>En examinant les fichiers à la racine du <a href="https://github.com/cotes2020/jekyll-theme-chirpy">dépôt du thème Chirpy</a>, on constate que les modèles <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> ne correspondent qu’à 3 fichiers :</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>On peut donc supprimer les modèles de globbing dans la section <code class="language-plaintext highlighter-rouge">exclude</code> du fichier <code class="language-plaintext filepath highlighter-rouge">_config.yml</code> et les remplacer comme suit pour que Polyglot puisse les traiter sans problème.</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"># Modifié en référence à l'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="modification-de-la-fonction-de-recherche">Modification de la fonction de recherche</h2><p>Après avoir terminé les étapes précédentes, presque toutes les fonctionnalités du site fonctionnaient comme prévu. Cependant, j’ai découvert que la barre de recherche située en haut à droite de la page avec le thème Chirpy n’indexait pas les pages dans des langues autres que <code class="language-plaintext highlighter-rouge">site.default_lang</code> (l’anglais dans le cas de ce blog), et affichait des liens vers des pages en anglais même lors de recherches depuis d’autres pages linguistiques.</p><p>Pour comprendre la cause, examinons les fichiers impliqués dans la fonction de recherche et où le problème se produit.</p><h3 id="_layoutsdefaulthtml">‘_layouts/default.html’</h3><p>En examinant le fichier <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> qui structure toutes les pages du blog, on constate qu’il charge le contenu de <code class="language-plaintext filepath highlighter-rouge">search-results.html</code> et de <code class="language-plaintext filepath highlighter-rouge">search-loader.html</code> dans l’élément <code class="language-plaintext highlighter-rouge">&lt;body&gt;</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;
        
        (...omis...)

        <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;

    (...omis...)

    <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> crée le conteneur <code class="language-plaintext highlighter-rouge">search-results</code> pour stocker les résultats de recherche.</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><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> est la partie essentielle qui implémente la recherche basée sur la bibliothèque <a href="https://github.com/christian-fei/Simple-Jekyll-Search">Simple-Jekyll-Search</a>. Elle exécute un JavaScript côté client qui trouve les correspondances avec les mots-clés saisis dans le fichier d’index <a href="#assetsjsdatasearchjson"><code class="language-plaintext filepath highlighter-rouge">search.json</code></a> et renvoie les liens des articles correspondants sous forme d’éléments <code class="language-plaintext highlighter-rouge">&lt;article&gt;</code>.</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>Ce fichier utilise la syntaxe Liquid de Jekyll pour définir un fichier JSON contenant le titre, l’URL, les catégories et tags, la date de création, un extrait des 200 premiers caractères du contenu, et le contenu complet de tous les articles du site.</p><h3 id="structure-de-fonctionnement-de-la-recherche-et-identification-du-problème">Structure de fonctionnement de la recherche et identification du problème</h3><p>En résumé, la fonction de recherche sur GitHub Pages avec le thème Chirpy fonctionne selon le processus suivant :</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>J’ai constaté que Polyglot génère <code class="language-plaintext filepath highlighter-rouge">search.json</code> pour chaque langue comme suit :</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>Le problème se situe donc dans le “Search Loader”. Les pages dans des langues autres que l’anglais ne sont pas trouvées car <code class="language-plaintext filepath highlighter-rouge">_includes/search-loader.html</code> charge statiquement uniquement le fichier d’index anglais (<code class="language-plaintext filepath highlighter-rouge">/assets/js/data/search.json</code>), quelle que soit la langue de la page visitée.</p><blockquote class="prompt-warning"><ul><li>Contrairement aux fichiers markdown ou html, pour les fichiers JSON, le wrapper Polyglot fonctionne pour les variables Jekyll comme <code class="language-plaintext highlighter-rouge">post.title</code>, <code class="language-plaintext highlighter-rouge">post.content</code>, mais la fonctionnalité <a href="https://github.com/untra/polyglot?tab=readme-ov-file#relativized-local-urls">Relativized Local Urls</a> ne semble pas fonctionner.<li>De même, dans les templates de fichiers JSON, on ne peut pas accéder aux balises liquid <a href="https://github.com/untra/polyglot?tab=readme-ov-file#features">fournies par Polyglot <code class="language-plaintext highlighter-rouge">{{ site.default_lang }}</code>, <code class="language-plaintext highlighter-rouge">{{ site.active_lang }}</code></a> en plus des variables standard de Jekyll.</ul><p>Par conséquent, les valeurs comme <code class="language-plaintext highlighter-rouge">title</code>, <code class="language-plaintext highlighter-rouge">snippet</code>, <code class="language-plaintext highlighter-rouge">content</code> dans le fichier d’index sont générées différemment selon la langue, mais la valeur <code class="language-plaintext highlighter-rouge">url</code> renvoie le chemin de base sans tenir compte de la langue, et un traitement approprié doit être ajouté dans la partie “Search Loader”.</p></blockquote><h3 id="résolution-du-problème">Résolution du problème</h3><p>Pour résoudre ce problème, il faut modifier le contenu de <code class="language-plaintext filepath highlighter-rouge">_includes/search-loader.html</code> comme suit :</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 %}

(...omis...)

&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 }}',

(...suite)
</pre></div></div><ul><li>J’ai modifié la syntaxe liquid dans la partie <code class="language-plaintext highlighter-rouge">{% capture result_elem %}</code> pour ajouter le préfixe <code class="language-plaintext highlighter-rouge">"/{{ site.active_lang }}"</code> devant l’URL du post chargée depuis le fichier JSON lorsque <code class="language-plaintext highlighter-rouge">site.active_lang</code> (langue de la page actuelle) est différente de <code class="language-plaintext highlighter-rouge">site.default_lang</code> (langue par défaut du site).<li>De même, j’ai modifié la partie <code class="language-plaintext highlighter-rouge">&lt;script&gt;</code> pour définir <code class="language-plaintext highlighter-rouge">search_path</code> comme le chemin par défaut (<code class="language-plaintext filepath highlighter-rouge">/assets/js/data/search.json</code>) si la langue de la page actuelle est identique à la langue par défaut du site, ou comme le chemin correspondant à cette langue (par exemple, <code class="language-plaintext filepath highlighter-rouge">/ko/assets/js/data/search.json</code>) si elles sont différentes.</ul><p>Après ces modifications et une nouvelle compilation du site web, j’ai confirmé que les résultats de recherche s’affichent correctement pour chaque langue.</p><blockquote class="prompt-tip"><p><code class="language-plaintext highlighter-rouge">{url}</code> est un emplacement où sera insérée ultérieurement par JS la valeur URL lue depuis le fichier JSON lors de l’exécution de la recherche, et n’est pas une URL valide au moment de la compilation, donc Polyglot ne le reconnaît pas comme cible de localisation et doit être traité directement selon la langue. Le problème est que le template <code class="language-plaintext highlighter-rouge">"/{{ site.active_lang }}{url}"</code> ainsi traité est reconnu comme une URL relative lors de la compilation, et bien que la localisation soit déjà terminée, Polyglot ne le sait pas et tente de la localiser à nouveau (par exemple, <code class="language-plaintext filepath highlighter-rouge">"/ko/ko/posts/example-post"</code>). Pour éviter cela, j’ai spécifié la balise <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>
