<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <id>https://www.yunseo.kim/es/</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/es/</uri> </author><link rel="self" type="application/atom+xml" href="https://www.yunseo.kim/es/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="es">Notas sobre la traducción al coreano del Código de Conducta 3.0 de Contributor Covenant</title><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="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/es/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="es">Mientras preparaba la traducción al coreano de Contributor Covenant 3.0, publicado en julio de 12025, reuní criterios, motivos de varias elecciones y notas personales.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Mientras preparaba la traducción al coreano de Contributor Covenant 3.0, publicado en julio de 12025, reuní criterios, motivos de varias elecciones y notas personales.</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 para añadir la traducción oficial al coreano del Código de Conducta 3.0 de Contributor Covenant: <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">feat(i18n): add Korean translation for Contributor Covenant 3.0 (#1590)</a></p></blockquote><h2 id="contributor-covenant">Contributor Covenant</h2><p><a href="https://www.contributor-covenant.org/">Contributor Covenant</a> es hoy el código de conducta para comunidades digitales más utilizado en el mundo. Fue redactado y publicado por primera vez en 12014 por <strong>Coraline Ada Ehmke</strong>, y desde 12021 pasó a <strong>OES (Organization for Ethical Source)</strong>, donde sus colaboradores lo mantienen y mejoran. Su objetivo es explicitar los valores implícitos que las comunidades pueden compartir para fomentar una cultura comunitaria en la que todas las personas sean bienvenidas y puedan sentirse seguras.</p><p>En el pasado, en las comunidades de desarrolladores era frecuente que, bajo el pretexto de la meritocracia, se toleraran palabras y conductas agresivas o comentarios discriminatorios. Contributor Covenant sirvió como un punto de inflexión importante para que esas comunidades, mediante una autorregulación interna, avanzaran hacia una cultura centrada en las personas, más inclusiva, basada en el respeto mutuo y en la valoración del feedback constructivo. Hoy lo han adoptado cientos de miles de proyectos de código abierto en todo el mundo, entre ellos Creative Commons, Linux, Apple, Mastodon, Microsoft, WordPress e IBM.</p><h2 id="qué-cambió-en-la-actualización-a-contributor-covenant-30">Qué cambió en la actualización a Contributor Covenant 3.0</h2><p>La versión 3.0, en cuya preparación OES comenzó a trabajar en 12024 para conmemorar el décimo aniversario de Contributor Covenant y que se publicó en julio de 12025 tras cerca de un año de trabajo, introduce los siguientes cambios principales con respecto a la versión anterior, la 2.1.</p><ul><li>Material de referencia:<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="mayor-flexibilidad">Mayor flexibilidad</h3><ul><li>Frente a versiones anteriores, optimizadas para comunidades de código abierto, esta se diseñó para poder aplicarse también a comunidades diversas tanto en línea como presenciales, más allá del desarrollo de software<ul><li>p. ej., en lugar de <strong>“Project Maintainers”</strong>, se emplea el término más neutral e inclusivo <strong>“Community Moderators”</strong></ul><li>Se eliminaron modismos centrados en el contexto estadounidense y se sustituyeron por expresiones más claras, más fáciles de entender y traducir también para hablantes de otras culturas</ul><h3 id="cambio-de-paradigma-de-la-justicia-retributiva-a-la-justicia-restaurativa">Cambio de paradigma de la justicia retributiva a la justicia restaurativa</h3><p>Uno de los cambios más importantes de Contributor Covenant 3.0 con respecto a la versión anterior es precisamente ese cambio de paradigma: de la <strong>justicia retributiva (Retributive Justice)</strong> a la <strong>justicia restaurativa (Restorative Justice)</strong>. El apartado <strong>“enforcement guidelines”</strong> antes centrado en criterios escalonados de sanción se reorganizó como el apartado <strong>“Addressing and Repairing Harm”</strong>.</p><ul><li>Se renombraron algunas etapas de respuesta<li>Además de los apartados existentes de respuesta o consecuencia, se añadieron orientaciones específicas de reparación, de modo que ya no se trata solo de sancionar en primera instancia a quien causó el daño, sino también de cómo restaurar las relaciones quebradas entre las partes, cerrar el conflicto y corregir lo ocurrido<li>En lugar de enfatizar únicamente la ejecución y el castigo por parte de terceros, el enfoque pasa a propiciar, cuando sea posible, la reflexión voluntaria, la reconciliación y la mejora, pensando en cómo devolver la salud a la comunidad tras el problema</ul><h3 id="directrices-más-claras">Directrices más claras</h3><ul><li>El apartado <strong>“Our Standards”</strong> se dividió con claridad en dos apartados, <strong>“Encouraged Behaviors”</strong> y <strong>“Restricted Behaviors”</strong>, lo que mejora la legibilidad<li>En particular, el apartado <strong>“Restricted Behaviors”</strong> deja explícito que no solo se restringe ejecutar realmente ciertas conductas dañinas, sino también amenazar con ejecutarlas o promoverlas, fortaleciendo así la prevención<blockquote><p>We agree to restrict the following behaviors in our community. Instances, threats, and promotion of these behaviors are violations of this Code of Conduct.</p></blockquote><li>También se añadió, como subapartado de <strong>“Restricted Behaviors”</strong>, <strong>“Other Restrictions”</strong>, donde se explicitan nuevas restricciones sobre la suplantación o tergiversación de identidad (Misleading identity), la omisión de atribución de fuentes (Failing to credit sources), los materiales promocionales (Promotional materials) y la comunicación irresponsable (Irresponsible communication), aspectos antes insuficientemente detallados<li>A partir de respuestas de una encuesta dirigida a personas responsables de comunidades que ya habían adoptado y aplicado Contributor Covenant, se aclara que la escalera de aplicación escalonada (enforcement ladder) es solo una referencia base y no limita la discrecionalidad de quienes administran la comunidad<blockquote><p>This enforcement ladder is intended as a guideline. It does not limit the ability of Community Managers to use their discretion and judgment, in keeping with the best interests of our community.</p></blockquote></ul><h3 id="refuerzo-de-las-cláusulas-sobre-igualdad-y-no-discriminación">Refuerzo de las cláusulas sobre igualdad y no discriminación</h3><p>En el primer apartado, <strong>“Our Pledge”</strong>, se reforzaron las cláusulas sobre igualdad y no discriminación: algunos términos se sustituyeron por expresiones más amplias y se explicitaron además varios valores contemporáneos sobre diversidad.</p><ul><li>Se sustituyeron las expresiones “body size” y “personal appearance” por la más amplia “physical characteristics”<li>“religion” se sustituyó por la expresión más inclusiva “philosophy or religion”<li>“nationality” se sustituyó por la expresión más amplia “national or social origin”<li>Se añadió explícitamente “neurodiversity”<li>También se añadió explícitamente “language”, con mayor consideración hacia quienes no hablan inglés<li>Se aplicaron revisiones generales en la redacción relacionada con la igualdad y la diversidad de género<blockquote><p><strong>v2.1</strong><br /> sex characteristics, gender identity and expression, or sexual identity and orientation</p><p><strong>v3.0</strong><br /> sex or gender, gender identity or expression, sexual orientation</p></blockquote></ul><h2 id="aspectos-considerados-en-esta-traducción-al-coreano">Aspectos considerados en esta traducción al coreano</h2><h3 id="consideraciones-comunes">Consideraciones comunes</h3><h4 id="uso-del-registro-honorífico">Uso del registro honorífico</h4><p>Al redactar una promesa o un código de conducta en coreano, elegir entre registro honorífico y registro llano depende de la orientación deseada, de la cultura organizacional y de la actitud que se quiera transmitir. En el pasado predominaba el registro llano, que enfatiza autoridad y disciplina, pero recientemente también es frecuente el uso del registro honorífico para subrayar una cultura horizontal y respetuosa.</p><table><thead><tr><th>Estilo<th>Honorífico(~합니다, ~하겠습니다)<th>Llano(~한다)<tbody><tr><td>Matiz<td>Respeto mutuo,<br /> promesa voluntaria, exhortación<td>Firmeza, efecto jurídico,<br /> norma objetiva<tr><td>Cultura organizacional<td>Cultura flexible y horizontal<td>Cultura relativamente estricta<tr><td>Casos de uso principales<td>Códigos de conducta,<br /> declaraciones éticas<td>Compromisos de seguridad,<br /> contratos laborales,<br /> normas disciplinarias legales<tr><td>Efecto psicológico<td>“Lo protegemos juntos”<br /> (consentimiento voluntario)<td>“Debe cumplirse”<br /> (se subraya más el carácter vinculante)</table><p>Si se revisan <a href="https://github.com/EthicalSource/contributor_covenant/pull/895#pullrequestreview-563210153">las discusiones pasadas</a>, parece que incluso al traducir la versión 2.0 al coreano se consideró en un principio el registro honorífico, pero luego <a href="https://github.com/EthicalSource/contributor_covenant/commit/3971299d81149b3fc0ce603a5dd26400509f090f">se reescribió en registro llano</a>. Respeto aquellas discusiones y su conclusión, pero aun así esta vez opté de nuevo por traducirlo en registro honorífico por las siguientes razones.</p><p>La cultura actual de las comunidades de código abierto, en general, está algo alejada de la coerción, la rigidez o la aplicación fuertemente compulsiva, y tiende más bien hacia el respeto mutuo, la participación voluntaria y la contribución. <a href="#cambio-de-paradigma-de-la-justicia-retributiva-a-la-justicia-restaurativa">En Contributor Covenant 3.0 esta filosofía, en particular, se refleja con fuerza en todo el texto</a>. Teniendo en cuenta los valores y la filosofía centrales que el original busca transmitir en esta actualización, así como la cultura y las tendencias de las comunidades, consideré que el registro honorífico era la opción más adecuada al llevar este texto al coreano. También tomé como referencia casos como el <a href="https://rust-kr.org/pages/code-of-conduct/">grupo de usuarios coreano de Rust</a>, el <a href="https://pythonkr.github.io/pycon-code-of-conduct/ko/coc/a_intent_and_purpose.html">Código de Conducta de PyCon KR</a> y el <a href="https://kubernetes.io/ko/community/code-of-conduct/">Código de Conducta en coreano de la comunidad Kubernetes</a>, que igualmente usan registro honorífico.</p><h4 id="evitar-expresiones-pasivas-innecesarias">Evitar expresiones pasivas innecesarias</h4><p>A diferencia del inglés, donde la voz pasiva se usa con frecuencia, el coreano es una lengua que en principio prefiere la expresión activa frente a la pasiva. Si por el mero hecho de que el original en inglés usa la pasiva se la traslada mecánicamente a una forma pasiva en coreano, el resultado tiende a sonar artificial, como traducción, y en ocasiones incluso gramaticalmente impropio.</p><p>No es que el coreano no use nunca expresiones pasivas, pero, siempre que no se distorsionara el sentido del texto, intenté trasladar al coreano en forma activa incluso expresiones que en el original estaban en pasiva.</p><p><strong>p. ej.</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="priorizar-el-contexto-de-uso-en-el-texto-sobre-una-traducción-diccionarista-y-mecánica">Priorizar el contexto de uso en el texto sobre una traducción diccionarista y mecánica</h4><p>Como el inglés y el coreano son lenguas bastante distantes entre sí, naturalmente las palabras no se corresponden de manera exacta una a una. Y eso sigue siendo cierto incluso cuando un diccionario las presenta como equivalentes.</p><p>Por ejemplo, en el siguiente pasaje, “intimate” no se usa en el sentido de “친밀한”, sino en el de “sexual”.</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>Asimismo, en el siguiente fragmento, traducir “process” de manera diccionaria resultaría poco natural. En este contexto, la opción adecuada es verterlo como “추스를”.</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>Por otro lado, también hay préstamos para los que no existe una expresión nativa adecuada. En el caso de “community”, por ejemplo, podría pensarse en trasladarlo a una palabra nativa como “공동체”, pero consideré que el matiz de “community” en inglés y el de “공동체” en coreano difieren bastante. En principio intenté evitar préstamos y optar por términos nativos cuando fuera posible, pero, en casos como este, cuando juzgué que eso podía distorsionar seriamente el sentido o el tono del original, preferí mantenerlo tal cual, como “커뮤니티”.</p><p>Teniendo en cuenta todo esto, procuré no limitarme a una sustitución simple, diccionaria y mecánica de palabras, sino escoger en cada caso la expresión coreana más cercana al sentido y al contexto del original.</p><h4 id="cumplimiento-de-las-normas-ortográficas-y-de-estilo-del-coreano">Cumplimiento de las normas ortográficas y de estilo del coreano</h4><p>También procuré respetar con la mayor precisión posible las normas lingüísticas del coreano, incluidas la ortografía y la normativa del estándar.</p><h3 id="sección-서약our-pledge">Sección “서약(Our Pledge)”</h3><h4 id="subtítulo">Subtítulo</h4><p>Aunque la traducción literal de “Our Pledge” sería “우리의 맹세”, en <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">la traducción coreana existente</a> ya se había vertido como “서약”, y consideré que, desde el punto de vista de la naturalidad del texto, esa opción entra plenamente dentro de lo aceptable, por lo que esta vez también la mantuve como “서약”.</p><h4 id="traducción-del-término-caste">Traducción del término “caste”</h4><p>En <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">la traducción coreana existente de la versión 2.1</a> se tradujo literalmente como “카스트 제도”. No diría que sea estrictamente un error, porque la palabra caste también puede funcionar como sustantivo académico general que designa <u>sistemas de orden estamental rígidamente fijados en distintas partes del mundo</u>. Sin embargo, si no se proporciona ese trasfondo detallado, en el uso cotidiano del coreano la expresión “카스트 제도” suele entenderse mayoritariamente como “el sistema de estamentos propio de los hindúes en la India, derivado de textos como el Manusmriti”. Por ello, teniendo en cuenta el contexto del original, la traduje como “계급”. Aquí lo razonable es interpretar “caste” no como algo limitado a un país concreto (India) o a una religión concreta (hinduismo), sino como una referencia a todo tipo y forma de sistemas estamentales y a las clases derivadas de ellos.</p><h4 id="uso-de-성-en-lugar-de-성별">Uso de “성” en lugar de “성별”</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 se considera el valor y el contexto que el original quiere transmitir, es difícil pensar que aquí “sex”, “gender” y “sexual orientation” remitan a distinciones basadas en un binarismo hombre-mujer. Por eso, en lugar de “성별”, que insinúa de forma sutil una división binaria por sexo, opté por la palabra “성”, y traté de reflejar en lo posible la diferencia conceptual que, en humanidades y ciencias sociales, tienen los términos sex, gender y sexuality, traduciendo así:</p><blockquote><p>… 생물학적 또는 사회적 성, 성 정체성 또는 성 표현, 성적 지향…</p></blockquote><h3 id="secciones-장려하는-행동encouraged-behaviors-y-제한하는-행동restricted-behaviors">Secciones “장려하는 행동(Encouraged Behaviors)” y “제한하는 행동(Restricted Behaviors)”</h3><h4 id="eliminación-de-los-dos-puntos-">Eliminación de los dos puntos (<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>En el original inglés es habitual usar los dos puntos como en el ejemplo anterior, para presentar una lista tras una oración completa. Pero en el coreano contemporáneo las normas de uso del signo de dos puntos restringen su empleo principalmente a expresiones enumerativas, como presentar elementos después de un epígrafe o añadir una explicación. Por eso, salvo en un texto enteramente redactado en estilo esquemático, escribir algo como lo siguiente resulta muy extraño y fácilmente da la impresión de una traducción descuidada hecha con traducción automática o con un LLM.</p><blockquote><p>이러한 점을 유념하며, 우리는 서로를 사려 깊게 대하고 우리가 공유하는 다음 가치를 중심으로 행동할 것에 동의합니다:</p><ol><li>우리 <strong>공동체의 목적</strong>, 활동 및 모임 방식을 존중합니다.<li><strong>친절하고 정직하게</strong> 다른 사람들과 소통합니다. …</ol></blockquote><p>Por ello, para ajustarme al uso natural del coreano, en lugar de trasladar sin más los dos puntos como “쌍점”, los sustituí por un punto (<code class="language-plaintext highlighter-rouge">.</code>) para que el texto resultara más natural.</p><h4 id="traducción-de-la-expresión-that-would-generally-be-considered-inappropriately">Traducción de la expresión “that would generally be considered inappropriately”</h4><p>Aquí, en lugar de traducir literalmente “generally” como “일반적으로”, lo vertí como “대부분의 사람들에게”, que me parecía más natural en el contexto.</p><blockquote><p>…<u>대부분의 사람들이</u> 부적절하다고 간주할 만한…</p></blockquote><h3 id="traducción-de-la-expresión-act-on">Traducción de la expresión “act on”</h3><p>Al principio pensé en traducir “act on” simplemente como “이용하다”, pero en contexto el sentido está más cerca de prohibir <u>todo acto realizado, con independencia de la intención, a partir de datos personales o información privada de otra persona</u>. Traducirlo como “이용하다” me parecía reducir demasiado el significado, así que opté por lo siguiente:</p><blockquote><p><strong>비밀 침해.</strong> 타인의 신상 관련 정보 또는 개인적인 정보를 당사자의 허락 없이 공유하거나, 그 정보<u>를 바탕으로 행하는</u> 모든 행위.</p></blockquote><h3 id="sección-문제-신고reporting-an-issue">Sección “문제 신고(Reporting an Issue)”</h3><ul><li>“this Code of Conduct <strong>reinforces</strong> encouraged behaviors and norms that …”: traducido como “본 행동 강령은 …는 권장 행동 방식과 규범을 <strong>증진합니다</strong>”<li>“in a timely manner”: traducido como “적시에”<li>“while prioritizing safety and confidentiality”: traducido como “안전과 비밀 유지를 우선시한다는 전제 하에”<li>“In order to <strong>honor</strong> these values”: traducido como “이들 가치를 <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="sección-피해-대응-및-교정addressing-and-repairing-harm">Sección “피해 대응 및 교정(Addressing and Repairing Harm)”</h3><ul><li>“Addressing”: traducido como “대응”<li>“Repairing”: traducido como “교정”</ul><h4 id="traducción-de-event-consequence-repair">Traducción 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>Fue una de las partes que más dudé al trasladar al coreano. Si se traducían literalmente como “사건”, “결과”, “교정”, el texto quedaba bastante extraño.</p><p>Tras pensarlo con el objetivo de producir un texto natural y, a la vez, transmitir lo más íntegramente posible <a href="#cambio-de-paradigma-de-la-justicia-retributiva-a-la-justicia-restaurativa">la filosofía del original</a>, finalmente opté por lo siguiente.</p><ul><li>“Event”: traducido como “적용 상황”.<li>“Consequence”: traducido como “대응 조치”.<li>“Repair”: primero consideré “회복 조치”, pero deseché esa opción porque la expresión “조치” suena más a intervención y ejecución por parte de terceros que a reflexión y mejora voluntarias de la persona implicada, por lo que no encajaba con la intención del original. Al final lo traduje como “교정 노력”.</ul><h4 id="traducción-de-la-expresión-seeking-clarification-on-expectations">Traducción de la expresión “seeking clarification on expectations”</h4><p>“expectations” podría traducirse literalmente como “기대 사항”, y el sentido se entendería, pero para que el texto fluyera mejor lo vertí como “준수 사항”.</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” también podría traducirse como una “solicitud de aclaración”, pero en contexto, dentro del apartado de “교정 노력”, se está describiendo la actitud y las acciones posteriores deseables que debe adoptar quien causó el problema. Si se tradujeran clarification y seeking como “해명” y “요구”, el sentido se volvería extraño. Aquí me pareció más adecuado entenderlo como un <u>esfuerzo</u>(seeking) por <u>confirmar y comprender con claridad</u>(clarification) las <u>normas que deben cumplirse</u>(expectations), a fin de reflexionar y no repetir el mismo error.</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="traducción-de-la-expresión-cooldown">Traducción de la expresión “cooldown”</h4><p>En el diccionario puede significar enfriamiento, vuelta a la calma tras el ejercicio o apaciguamiento; aquí se usa en un sentido más cercano a “진정”, como en la idea de “머리 좀 식혀라.”</p><p>No obstante, traducir “time-limited cooldown period” como “한시적 진정 기간” sonaba algo raro, de modo que en esta traducción coreana vertí “cooldown period” como “자숙 기간”.</p><h4 id="traducción-de-la-expresión-time-to-process-the-incident">Traducción de la expresión “time to process the incident”</h4><p><a href="#priorizar-el-contexto-de-uso-en-el-texto-sobre-una-traduccion-diccionarista-y-mecanica">Como se explicó antes</a>, lo traduje como “해당 일을 추스를 시간”.</p><h4 id="traducción-de-las-expresiones-suspension-y-ban">Traducción de las expresiones “suspension” y “ban”</h4><p>En <a href="https://www.contributor-covenant.org/ko/version/2/1/code_of_conduct/">la traducción coreana existente de la versión 2.1</a> se tradujo “ban” como “제재”, pero “제재” es un término demasiado amplio, ya que abarca todas las medidas posibles frente a una infracción, incluidas etapas inferiores como advertencias o restricciones temporales de actividad, por lo que el significado queda difuso. Además, la palabra inglesa “ban” es clara en su sentido de prohibición o expulsión, y la expresión “(계정 등의) 영구 정지” es también una formulación cotidiana y natural en coreano, así que no vi necesidad de evitarla mediante una paráfrasis.</p><p>Con “suspension” ocurre algo parecido: su sentido de suspensión o detención temporal es suficientemente claro, y tampoco había motivo para recurrir a una traducción demasiado libre.</p><p>Por ello, traduje “Temporary Suspension” y “Permanent Ban” como “일시적 정지” y “영구 정지”, respectivamente.</p><h4 id="traducción-de-la-oración-this-enforcement-ladder-is-intended-as-a-guideline">Traducción de la oración “This enforcement ladder is intended as a guideline.”</h4><p>La expresión “enforcement ladder” la traduje como “단계적 집행 기준”. Además, como esta oración se usa en el contexto de aclarar que dicho criterio escalonado de aplicación se presenta solo como una de varias opciones posibles y que se preservan la discrecionalidad y la capacidad de decisión de quienes gestionan la comunidad, traduje el artículo “a” como “하나의”. En la traducción quedó así:</p><blockquote><p><u>이 단계적 집행 기준은 하나의 기준선으로 마련한 것입니다.</u> 이는 커뮤니티의 최선의 이익에 부합하는 커뮤니티 관리자의 재량권과 판단 권한을 제한하지 않습니다.</p></blockquote><h2 id="para-cerrar">Para cerrar</h2><p>Muchos documentos y proyectos de carácter público como este suelen ser traducidos a varios idiomas por voluntarios y personas colaboradoras. Sin embargo, en el caso del coreano, con bastante frecuencia no existe traducción por falta de contribuyentes, o, si existe, resulta tan mecánica y extraña que incluso siendo coreano uno termina pensando “prefiero leerlo en inglés” y cambia a la página en inglés. Me ha pasado no pocas veces.</p><p>Al decidir contribuir esta vez con la traducción al coreano, quise que, ya que iba a hacerlo, el resultado tuviera un nivel de calidad tal que quien lo leyera no sintiera extrañeza ni aunque creyera que se trataba de un texto escrito originalmente en coreano por un autor coreano. Me esforcé por comprender e incorporar la filosofía y los matices sutiles del original, especialmente qué expresiones cambiaron en esta versión 3.0 respecto de la 2.1 y por qué quienes la escribieron tomaron esas decisiones.</p><p>Por la propia naturaleza del lenguaje, la traducción no funciona como una función matemática que, dado el mismo original, produzca siempre exactamente la misma salida. Cada traductor acaba proponiendo una versión ligeramente distinta, y eso se debe en parte a su habilidad, sí, pero sobre todo a que en la traducción —y, más ampliamente, en la escritura— no existe una única respuesta correcta predeterminada. En estos últimos tiempos he venido utilizando IA de manera auxiliar en casi todos mis trabajos e incluso este mismo blog publica entradas traducidas automáticamente a varios idiomas conectando una API de LLM. Pero en este caso concreto quise hacer una traducción de verdad, seria y lo mejor posible dentro de mis capacidades. Revisé una y otra vez cada expresión, pensando cuál podía transmitir el sentido del original del modo más íntegro y menos distorsionado posible, pero también con naturalidad, y el resultado refleja mi juicio e interpretación subjetivos, aunque hechos con el máximo cuidado. Ahora que todo el mundo usa IA, creo que, al menos en la traducción de documentos tan importantes como promesas y códigos de conducta, una versión solo tiene valor si ofrece una ventaja comparativa clara frente a lo que sale de pedirle sin más a una IA que traduzca el texto original. Al menos a fecha de marzo de 12026, me atrevo a decir que en <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">esta traducción</a> sí he preservado plenamente matices y contextos sutiles del original que la traducción automática o los LLM todavía no consiguen recoger del todo.</p><p>A fecha del 20 de marzo de 12026, la versión 3.0 de Contributor Covenant, aparte del original en inglés y de esta traducción coreana que voy a presentar, solo está completamente traducida a tres idiomas: bengalí, alemán y chino continental, y, si se mira la <a href="https://github.com/EthicalSource/contributor_covenant/pulls">lista de PR abiertos</a>, también hay muchos idiomas cuyos borradores de traducción ya se enviaron como PR pero no han podido recibir aprobación final por falta de revisores. De hecho, en muchas lenguas todavía no se ha pasado siquiera de la versión 1.4. Si alguna persona cuya lengua no sea el coreano está leyendo esto por la razón que sea, <a href="https://github.com/EthicalSource/contributor_covenant?tab=contributing-ov-file#translators-and-native-speakers">como la forma de contribuir no es especialmente complicada</a>, dedicarle un día del fin de semana y aportar una traducción sin duda ayudaría mucho tanto a OES como a las comunidades usuarias de esa lengua. En mi caso, esta fue también la primera vez que contribuí a un trabajo de traducción de este tipo y la primera vez que leí íntegramente un código de conducta, y aun así creo que fue una tarea que valió sobradamente las varias horas que le dediqué. Corea cuenta, en proporción a su población total, con un número bastante alto de desarrolladores activos en comunidades de código abierto como GitHub; por eso, me alegraría que la <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">traducción coreana</a> del Código de Conducta 3.0 de Contributor Covenant que traduje y envié esta vez pudiera contar con la participación de otras personas coreanas en la revisión y, si es posible, también ser adoptada y utilizada ampliamente en muchos lugares.</p><p>Como dijo el <strong>profesor Nathan Schneider</strong> en <a href="https://ethicalsource.dev/blog/contributor-covenant-3/">la entrada del blog de OES</a>, Contributor Covenant funciona como una base esencial para construir comunidades responsables y transparentes, y en la práctica ha contribuido a resolver conflictos. Por costumbre, en sitios como GitHub es bastante común pulsar el botón “Add a code of conduct” y pegar una plantilla, pero, por alguna razón, la plantilla que GitHub ofrece automáticamente no se ha actualizado más allá de la versión 2.0. La versión 3.0 incorpora cambios y mejoras importantes con respecto a las versiones 2.0 y 2.1, así que me gustaría recomendar que, si es posible, se adopte la versión más reciente a través de la <a href="https://www.contributor-covenant.org/adopt/">página oficial</a>. El texto no es tan largo como podría parecer, así que creo que sería aún más valioso si, durante ese proceso, se aprovecha para leerlo entero con calma al menos una vez. Espero que tanto Contributor Covenant 3.0 como la <a href="https://github.com/EthicalSource/contributor_covenant/pull/1590">traducción coreana</a> en la que trabajé esta vez despierten mucho interés, y con esto termino.</p>]]> </content> </entry> <entry><title xml:lang="es">Cómo preparar materiales de IR (How to Prepare IR Materials)</title><link href="https://www.yunseo.kim/es/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/es/posts/how-to-prepare-ir-materials/</id> <author> <name>Yunseo Kim</name> </author> <category term="Startup" /> <category term="IR" /> <summary xml:lang="es">Qué son los materiales de IR y qué debe incluir un buen IR para captar inversión de forma efectiva.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Qué son los materiales de IR y qué debe incluir un buen IR para captar inversión de forma efectiva.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="qué-son-los-materiales-de-ir">¿Qué son los materiales de IR?</h2><p><strong>IR</strong> es la abreviatura de <strong>Investor Relations</strong> y es un término que engloba de forma integral todos los materiales y actividades necesarios para explicar y promocionar una empresa ante inversores, construir relación con ellos y captar inversión. Cuando se habla de “materiales de IR”, por lo general se refiere a los documentos con los que la empresa se presenta ante inversores para levantar capital.</p><h2 id="contenido-que-debe-incluir-un-material-de-ir">Contenido que debe incluir un material de IR</h2><p>Como el objetivo del IR es captar inversión, es necesario presentar, desde el punto de vista del inversor, razones convincentes de por qué debería invertir en esta empresa. Por tanto, debe incluir una visión global del negocio: resumen del servicio, entorno de mercado, descripción del producto/servicio, panorama competitivo, tracción/resultados, modelo de negocio, plan de crecimiento futuro, composición del equipo, etc.</p><ul><li><strong>Pitch deck</strong>:<ul><li>Su objetivo es, <strong>de forma breve e impactante</strong>, dejar una <strong>primera impresión positiva</strong> ante un amplio abanico de inversores potenciales<li>Se usa en rondas de inversión en etapas tempranas<li>Suele tener 10–15 diapositivas, con contenido conciso y predominantemente visual</ul><li><strong>IR deck</strong>:<ul><li>Proporciona <strong>información financiera en profundidad y estrategia a largo plazo</strong> de la empresa<li>Se entrega a inversores profesionales que ya han empezado a mostrar interés y están cerca de tomar una decisión<li>Permite que los inversores hagan una <strong>evaluación y un juicio más profundos</strong><li>Suele tener 20–30 diapositivas e incluye información más detallada como <strong>plan financiero, análisis de mercado, equipo, análisis de competidores</strong>, etc.</ul></ul><h3 id="misiónvisión-missionvision">Misión/Visión (Mission/Vision)</h3><ul><li>¿Cuál es el valor esencial que la empresa quiere aportar?</ul><blockquote class="prompt-tip"><p>Es la parte que puede considerarse la identidad central de la empresa; conviene expresar la misión y la visión en una frase cada una, de manera concisa pero clara, al comienzo del material de IR.</p></blockquote><h3 id="resumen-del-servicio">Resumen del servicio</h3><h4 id="problema-problem">Problema (Problem)</h4><ul><li>¿Qué problema del mercado busca resolver el servicio?<li>¿Cuánto les incomoda este problema a los consumidores?<li>¿Por qué ese problema es importante?<li>¿Existe demanda de una solución? ¿Quién es el público objetivo?</ul><h4 id="solución-solution">Solución (Solution)</h4><ul><li>¿Cómo se resolverá de forma concreta el problema mencionado?<li>En comparación con los métodos existentes, ¿qué beneficios obtienen los consumidores y los usuarios finales?</ul><blockquote class="prompt-tip"><p>A menudo los inversores no son expertos en ese ámbito, por lo que conviene explicar el servicio desde la perspectiva del consumidor (no desde la del desarrollador) y dejar los detalles técnicos para cuando haya preguntas, respondiéndolos de forma individual.</p></blockquote><h3 id="tamaño-de-mercado-market-size">Tamaño de mercado (Market Size)</h3><p>Si se fija el tamaño de mercado directamente en términos monetarios, el resultado puede variar mucho según la metodología de cálculo y distintas variables, y además existe un riesgo relativamente alto de que se planteen discrepancias. Si se proponen otros indicadores —como el número potencial de usuarios, el número/frecuencia de transacciones, etc.— se puede mostrar el tamaño de mercado de forma más segura y efectiva.</p><ul><li><strong>TAM (Total Addressable Market, mercado total)</strong>: tamaño máximo del mercado teóricamente accesible al ofrecer un producto o servicio a escala mundial, asumiendo una situación ideal en la que se excluyen todos los competidores y se alcanza el 100% de cuota global<li><strong>SAM (Service Available Market, mercado disponible)</strong>: tamaño de mercado dentro del alcance real al considerar limitaciones geográficas, de infraestructura y regulatorias; es el rango que la empresa persigue en la práctica<li><strong>SOM (Service Obtainable Market, mercado obtenible)</strong>: tamaño de mercado que se puede capturar realmente al inicio, incluso dentro del SAM, considerando competencia, capacidades de la empresa, estrategia de marketing, etc.</ul><blockquote class="prompt-tip"><p>Al estimar el tamaño de mercado, a menudo se citan estudios de terceros para presentar cifras e indicadores concretos sobre el mercado total o el mercado disponible, pero respecto al mercado obtenible —que es lo importante de inmediato para una startup— se suele explicar del estilo: “si logramos X% de cuota en este mercado, podemos alcanzar Y de ingresos”. Para ser sincero, yo también lo redacté así en el primer borrador interno de materiales de IR cuando apenas me estaba preparando para emprender.</p><p>El problema de este enfoque es que, desde el punto de vista del inversor, es difícil confiar en un plan sobre “qué porcentaje del mercado” se va a capturar. No es que por lanzar el servicio se gane cuota fácilmente, y afirmar vagamente que se conseguirá X% apuntando a todos los participantes del mercado no es muy persuasivo.</p><p>Además de demostrar que el tamaño del mercado total y del mercado disponible es suficientemente grande, es importante presentar una lógica clara de <strong>cómo se define el segmento inicial de clientes (Immediate Market)</strong> y cómo se ampliará progresivamente el mercado obtenible incorporando nuevos segmentos de clientes.</p></blockquote><blockquote class="prompt-tip"><p><strong>Timing del negocio</strong></p><ul><li>En los negocios, el timing también es crucial<li>Debes ser capaz de explicar a los inversores por qué este negocio puede funcionar bien ahora y por qué deberían invertir ahora<li>Hay que presentar razones por las que este es un momento adecuado: viabilidad tecnológica, cambios en los patrones de comportamiento, tendencias sociales, cambios ambientales, etc.</ul></blockquote><h3 id="descripción-del-productoservicio-product">Descripción del producto/servicio (Product)</h3><ul><li>¿Cuáles son las principales características y funcionalidades del producto/servicio?<li>¿Cuál es el funcionamiento concreto? ¿Qué ejemplos hay?</ul><h3 id="modelo-de-negocio-business-model">Modelo de negocio (Business Model)</h3><ul><li>¿Cómo se va a ganar dinero?<li>¿Quién paga? (Como el usuario final y el cliente que paga no siempre coinciden, hay que dejar claro quién es el cliente que realmente genera ingresos)<li>¿Qué se cobrará? ¿Cómo se fijarán los precios?</ul><h3 id="panorama-competitivo-competition">Panorama competitivo (Competition)</h3><ul><li>¿Quiénes son los principales competidores?<li><strong>Desde la perspectiva del cliente</strong>, ¿en qué aspectos el producto/servicio de la empresa es superior y tiene ventajas frente a los de otras compañías?<li>¿Qué se definirá como servicio competidor y qué clientes serán el objetivo principal?</ul><blockquote class="prompt-tip"><p>Si analizas bien a los competidores, podrás demostrar eficazmente a los inversores que entiendes el estado del mercado.</p></blockquote><h3 id="tracción-y-estrategia-de-salida-al-mercado-go-to-market-strategy">Tracción y estrategia de salida al mercado (Go-to Market Strategy)</h3><ul><li>¿Cuál es el KPI más importante para el éxito del negocio?<ul><li>e.g. número de pedidos, usuarios activos mensuales (MAU), volumen mensual de transacciones, etc.</ul><li>En torno a ese indicador, ¿qué resultados se han obtenido?<li>¿Cuáles son los principales medios y canales de marketing de la empresa?<li>¿Cuál es el método y el coste de adquisición de nuevos clientes?<li>*<strong>¿Cuál es el valor de vida del cliente (LTV)</strong>?</ul><blockquote class="prompt-info"><p>*<strong>Valor de vida del cliente (Customer Lifetime Value, LTV)</strong>: cuantificación de cuánto beneficio total aporta un usuario durante todo el periodo en el que utiliza el servicio</p></blockquote><blockquote class="prompt-tip"><p>Conviene excluir métricas secundarias distintas de los KPI.</p></blockquote><blockquote class="prompt-tip"><p><strong>Si eres una startup muy temprana y aún no tienes ingresos</strong></p><ul><li>Presenta el <strong>punto de equilibrio</strong> del servicio que quieres ofrecer<li>En este punto, no infles los indicadores de ingresos; define los supuestos de forma realista desde una perspectiva conservadora<li>Presenta un escenario de ingresos para el primer año en que se generan ingresos y añade el plan de ventas para los próximos años para transmitir confianza de que se puede crecer de forma sostenida<ul><li>previsión a 1 año (corto plazo)<li>previsión a 3 años (medio plazo)<li>previsión a 5 años (largo plazo)</ul><li>Usa activamente gráficos y tablas para que se vea de un vistazo<li>Incluye <strong>diapositivas de validación de hipótesis</strong>, reforzando la base argumental al explicar de forma convincente por qué se definieron esos KPI y ese escenario de ingresos<ul><li>Hay que construir una base sólida para el escenario de ingresos previsto mediante múltiples experimentos y validaciones de hipótesis</ul></ul></blockquote><h3 id="equipo-the-team">Equipo (The Team)</h3><ul><li>En lugar de presentar a todo el mundo, enfócate en los miembros clave que desempeñan roles esenciales, incluido el CEO/fundador<li>Presenta 2–3 puntos sobre experiencia y habilidades, usando logos, etc., para mejorar la legibilidad<li>Si hay inversores o asesores que hayan desempeñado (o estén desempeñando) un papel clave, también es buena idea incluirlos</ul><h3 id="plan-de-crecimiento-futuro-milestones">Plan de crecimiento futuro (Milestones)</h3><ul><li>Presenta objetivos a lograr por periodo y por etapa<li>Lo habitual es fijar metas hasta antes de la siguiente ronda (si es semilla, hasta antes de Serie A; si es Serie A, hasta antes de Serie B)<li>Indica el monto de inversión deseado y el plan de uso<li>En lugar de usar unidades demasiado largas (más de medio año), conviene segmentarlo en unidades de aproximadamente 2 meses</ul><h3 id="plan-financiero-financials">Plan financiero (Financials)</h3><p>En un IR deck debe incluirse el plan financiero.</p><ul><li>tabla de planificación financiera para los próximos 3–5 años<li><strong>unit economics</strong>: ingresos y costes por unidad de cliente<li><strong>tasa de quema (burn rate)</strong>: ritmo al que una empresa nueva gasta efectivo en costes de puesta en marcha, I+D y otros costes<li>ingresos y costes totales<li>EBITDA o estado de flujo de caja, etc.</ul><blockquote class="prompt-warning"><ul><li>Hay que evitar presentar planes financieros demasiado poco realistas<li>Es frecuente sobreestimar ingresos y subestimar costes; por ello, hay que ser cuidadoso al estimar el tamaño de ingresos previsto<li>Estima los costes lo más precisamente posible, considerando gastos de desarrollo del producto/servicio y costes operativos, etc.</ul></blockquote><h2 id="puntos-a-enfatizar-según-la-etapa-de-inversión">Puntos a enfatizar según la etapa de inversión</h2><h3 id="semilla-seed">Semilla (Seed)</h3><ul><li>Etapa en la que se desarrolla el MVP, se comprueba la respuesta del mercado y se valida la viabilidad del modelo de negocio<li>Hay que enfatizar especialmente los resultados de las hipótesis iniciales y de la validación del modelo de negocio, los resultados del experimento con el MVP y los ingresos derivados</ul><h3 id="pre-a">Pre-A</h3><ul><li>Etapa en la que hay que demostrar el potencial de crecimiento y asegurar financiación adicional para desarrollo de producto, marketing, contratación, etc.<li>Se necesita explicar cuáles son los KPI del negocio, cuánto y qué tan bien se está creciendo mediante determinadas actividades, y el potencial de crecimiento futuro</ul><h3 id="serie-a">Serie A</h3><ul><li>Etapa en la que se escala en serio y se incrementa el valor de la empresa<li>En este punto, la validación de hipótesis ya debería estar cerrada; hay que ganar la confianza del inversor con resultados cuantitativos del desempeño del negocio</ul><h2 id="algunos-consejos">Algunos consejos</h2><ul><li>Pon especial esfuerzo en las primeras cinco diapositivas para dejar una primera impresión positiva<li>La misión/visión de la primera diapositiva también puede repetirse una vez más en la última<li>Comunica todo en formato de conclusión primero (lo esencial al inicio)<li>El objeto de inversión es la <strong>empresa</strong>, así que en el IR el nombre de la empresa va antes que el del servicio<li>Los inversores potenciales que lean el IR pueden no ser profesionales del sector: explica, en lo posible, con términos sencillos; y si es inevitable usar jerga, añade una breve explicación<li>No mezcles el problema de mercado y la solución; sepáralos<li>Usa texto centrado en palabras clave; si usas imágenes, evita capturas de pantalla para mejorar la legibilidad<li>Incluye cifras precisas y concretas en tablas o gráficos<li>Asegúrate de no omitir la presentación del equipo, el monto de inversión deseado y el plan de uso<li>También es buena idea presentar la estrategia de salida/recuperación de la inversión<li>Presenta, aunque no sea perfecto, un plan (siquiera breve) sobre cómo se estructurará el accionariado por porcentajes<li>No metas demasiado material en el cuerpo principal; si hace falta, sepáralo como anexo<li>En la última diapositiva, incluye datos de contacto (email, teléfono, nombre)<li>La tipografía también es muy importante: usa fuentes legibles como <a href="https://cactus.tistory.com/306">Pretendard</a> y prepara el material en PDF para evitar problemas de renderizado</ul><h2 id="referencias">Referencias</h2><h3 id="canal-de-divulgación-corporativa-kind">Canal de divulgación corporativa 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>Canal de divulgación corporativa operado por la Bolsa de Corea<li>Proporciona información de divulgación de empresas listadas en KOSPI, KOSDAQ y KONEX<li>Permite revisar materiales de IR de empresas cotizadas, por lo que sirve para ver cómo se estructuran otros IR elaborados recientemente</ul>]]> </content> </entry> <entry><title xml:lang="es">Conceptos básicos de criptografía</title><link href="https://www.yunseo.kim/es/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="am" /><published>2025-11-26T00:00:00+09:00</published> <updated>2025-11-26T00:00:00+09:00</updated> <id>https://www.yunseo.kim/es/posts/basic-concepts-of-cryptography/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Cryptography" /> <summary xml:lang="es">Introducción a la criptografía: qué es, diferencias entre cifrado simétrico y asimétrico, principio de Kerckhoffs, firmas digitales y otros conceptos básicos.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Introducción a la criptografía: qué es, diferencias entre cifrado simétrico y asimétrico, principio de Kerckhoffs, firmas digitales y otros conceptos básicos.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="qué-es-la-criptografía">¿Qué es la criptografía?</h2><p>La <strong>criptografía</strong> es, en esencia, una subdisciplina de la ciencia cuyo objetivo es defender los <strong>protocolos</strong> frente a acciones hostiles.</p><p>Aquí, por protocolo entendemos una lista de pasos que una o más personas deben seguir para lograr algo. Por ejemplo, si se quiere compartir el portapapeles entre dispositivos, un posible protocolo para compartirlo sería el siguiente:</p><ol><li>Cuando haya un cambio en el portapapeles de alguno de los dispositivos, se copia el contenido del portapapeles y se sube al servidor.<li>El servidor avisa al resto de dispositivos de que ha habido un cambio en el portapapeles compartido.<li>Los demás dispositivos descargan del servidor ese contenido de portapapeles compartido.</ol><p>Sin embargo, este no es un buen protocolo: si se sube y descarga el contenido del portapapeles en texto plano, tal cual, alguien en medio de la comunicación —o incluso el propio servidor— podría espiar ese contenido. Es tarea de la criptografía considerar la posible existencia de enemigos que intenten espiar el portapapeles y defenderse de ellos.</p><h2 id="criptografía-simétrica">Criptografía simétrica</h2><h3 id="cifrado-simétrico">Cifrado simétrico</h3><blockquote><p>Pensemos en una situación en la que Alicia (Alice) tiene que enviar una carta a Beto (Bob). Para transmitirle información confidencial, Alicia ordena a un mensajero (<em>messenger</em>) que lleve la carta hasta Beto.<br /> Pero Alicia no confía del todo en el mensajero y quiere que el mensaje se mantenga secreto para todo el mundo excepto Beto, incluyendo al propio mensajero que lleva la carta.</p></blockquote><p>El algoritmo criptográfico que se inventó hace mucho tiempo para este tipo de situaciones es precisamente el <strong>algoritmo de cifrado simétrico (symmetric encryption algorithm)</strong>.</p><blockquote class="prompt-info"><p><strong>Primitiva (primitive)</strong><br /> La palabra inglesa <em>primitive</em> significa literalmente “primitivo”, “algo primitivo”.<br /> En criptografía se usa con mucha frecuencia este término: una primitiva es la unidad funcional o algorítmica más pequeña con la que se construye un sistema criptográfico.<br /> Puede pensarse como un “bloque básico” o “lógica fundamental”.</p></blockquote><p>Consideremos una primitiva que proporcione las dos funciones siguientes:</p><ul><li><code class="language-plaintext highlighter-rouge">ENCRYPT</code>: recibe como entrada una <strong>clave secreta (secret key)</strong> (normalmente, un número grande) y un <strong>mensaje (message)</strong>, y devuelve como salida una secuencia de números que constituye el mensaje cifrado.<li><code class="language-plaintext highlighter-rouge">DECRYPT</code>: es la función inversa de <code class="language-plaintext highlighter-rouge">ENCRYPT</code>; recibe la misma clave secreta y el mensaje cifrado, y devuelve el mensaje original.</ul><p>Para ocultar el mensaje de Alicia de manera que ni el mensajero ni ningún tercero puedan leerlo usando una primitiva de este tipo, Alicia y Beto deben reunirse de antemano y acordar qué clave secreta van a usar. Después, Alicia puede cifrar su mensaje con la clave acordada usando la función <code class="language-plaintext highlighter-rouge">ENCRYPT</code> y entregar el mensaje cifrado al mensajero para que lo lleve a Beto. Entonces Beto, usando la misma clave secreta y la función <code class="language-plaintext highlighter-rouge">DECRYPT</code>, recupera el mensaje original.</p><p>Este proceso de usar una clave secreta para cifrar algo, de modo que resulte indistinguible de un ruido sin sentido a simple vista, es el método habitual en criptografía para proteger los protocolos.</p><p>El cifrado simétrico forma parte de una categoría más amplia de algoritmos criptográficos denominada <strong>criptografía simétrica (symmetric cryptography)</strong> o <strong>criptografía de clave secreta (secret key cryptography)</strong>, y en función del caso pueden intervenir incluso más de dos claves.</p><h2 id="principio-de-kerckhoffs">Principio de Kerckhoffs</h2><p>Hoy en día disponemos de medios de comunicación mucho más potentes que la carta en papel: ordenadores e internet, que permiten comunicarnos casi en tiempo real. Pero, dicho de otro modo, esto también implica que los mensajeros maliciosos se han vuelto mucho más poderosos: pueden ser una red Wi‑Fi pública insegura de una cafetería, un proveedor de servicios de internet (ISP), diversos equipos y servidores de comunicación que componen internet y transmiten los mensajes, organismos gubernamentales, o incluso el propio dispositivo en el que se ejecuta el algoritmo. Los atacantes pueden observar en tiempo real un gran volumen de mensajes y, sin ser detectados, alterar, pinchar o censurar mensajes a escala de nanosegundos.</p><p>A lo largo de la dilatada historia de prueba y error de la criptografía ha surgido un principio fundamental para lograr una seguridad fiable: <u>las primitivas deben ser analizadas públicamente</u>. La metodología opuesta se conoce como <strong>seguridad por oscuridad (<em>security by obscurity</em>)</strong>, cuyas limitaciones son claras y hoy en día está prácticamente descartada.</p><p>Este principio fue formulado por primera vez en 11883 por el lingüista y criptógrafo neerlandés Auguste Kerckhoffs, y se conoce como el <strong>principio de Kerckhoffs (Kerckhoffs’s principle)</strong>. El mismo principio fue expresado de otra manera por Claude Shannon, matemático, informático, criptógrafo y padre de la teoría de la información, como “el enemigo conoce el sistema” (<em>The enemy knows the system</em>), es decir, “al diseñar un sistema, hay que suponer que el enemigo llegará a conocerlo”. A esta formulación se la conoce como la <strong>máxima de Shannon (<em>Shannon’s maxim</em>)</strong>.</p><p>La seguridad de un sistema criptográfico debe depender únicamente del secreto de la clave: el propio sistema puede ser público sin que ello suponga un problema; de hecho, debe hacerse público activamente —como en el caso de AES— para que muchos <strong>criptoanalistas (cryptanalyst)</strong> puedan evaluarlo. Todo secreto corre el riesgo de filtrarse y, por tanto, constituye un posible punto de fallo; cuanto más pequeña sea la parte que deba mantenerse en secreto, más favorable será la situación para el defensor. Mantener en secreto durante largos periodos un sistema tan grande y complejo como un esquema criptográfico completo es extremadamente difícil, mientras que mantener en secreto solo la clave es relativamente fácil. Además, incluso si un secreto se filtra, es mucho más sencillo sustituir únicamente las claves comprometidas por otras nuevas que reemplazar todo el sistema criptográfico.</p><h2 id="criptografía-asimétrica">Criptografía asimétrica</h2><p>Muchos protocolos funcionan en la práctica sobre la base de criptografía simétrica, pero este enfoque presupone que las dos partes han de reunirse al menos una vez al principio para acordar la clave. Así que surge el problema de cómo decidir de antemano la clave y cómo compartirla de forma segura; a este problema se le llama <strong>distribución de claves (<em>key distribution</em>)</strong>. Durante mucho tiempo fue un problema difícil, y no se resolvió hasta finales de la década de 11970, cuando se desarrollaron los algoritmos conocidos como <strong>criptografía asimétrica (asymmetric cryptography)</strong> o <strong>criptografía de clave pública (public key cryptography)</strong>.</p><p>Entre las primitivas asimétricas más representativas están el <strong>intercambio de claves (key exchange)</strong>, el <strong>cifrado asimétrico (asymmetric encryption)</strong> y la <strong>firma digital (digital signature)</strong>.</p><h3 id="intercambio-de-claves">Intercambio de claves</h3><p>El <strong>intercambio de claves</strong> funciona, de forma esquemática, del siguiente modo:</p><ol><li>Alicia y Beto acuerdan usar en común cierto conjunto de parámetros $G$.<li>Alicia y Beto deciden sus respectivas <strong>claves privadas (private key)</strong> $a, b$.<li>Alicia y Beto combinan los parámetros comunes $G$ con sus claves privadas $a$, $b$ para calcular sus <strong>claves públicas (public key)</strong> $A = f(G,a)$ y $B = f(G,b)$, y las comparten públicamente.<li>Alicia, usando la clave pública de Beto $B = f(G,b)$ y su clave privada $a$, calcula $f(B,a) = f(f(G,b),a)$; Beto, de modo análogo, usando la clave pública de Alicia $A = f(G,a)$ y su clave privada $b$, calcula $f(A,b) = f(f(G,a),b)$.<li>Si se usa una función $f$ adecuada que satisfaga $f(f(G,a),b) = f(f(G,b),a)$, entonces Alicia y Beto acaban compartiendo el mismo secreto, mientras que un tercero, aunque conozca $G$ y las claves públicas $A = f(G,a)$ y $B = f(G,b)$, no puede obtener $f(A,b)$ únicamente a partir de esos datos, y por tanto el secreto se mantiene.</ol><p>Normalmente, este secreto compartido se utiliza como clave secreta para un <a href="#cifrado-simetrico">cifrado simétrico</a>, y se emplea después para intercambiar otros mensajes.</p><p>El primer algoritmo de intercambio de claves que se publicó, y el más representativo, es el intercambio de claves de Diffie–Hellman, que recibe su nombre de los apellidos de sus autores, Whitfield Diffie y Martin Hellman.</p><p>Sin embargo, el intercambio de claves de Diffie–Hellman también tiene limitaciones. Pensemos en la situación en la que un atacante intercepta las claves públicas $A = f(G,a)$ y $B = f(G,b)$ durante la fase de intercambio, y las sustituye por la suya propia $M = f(G,m)$ antes de enviarlas a Alicia y Beto. En ese caso, Alicia y el atacante compartirán un falso secreto $f(M, a) = f(A, m)$, y Beto y el atacante compartirán otro falso secreto $f(M, b) = f(B, m)$. El atacante puede entonces hacerse pasar por Beto ante Alicia y por Alicia ante Beto. A esta situación se la describe diciendo que <u><strong>un ataque de intermediario (man-in-the-middle, MITM)</strong> ha tenido éxito contra el protocolo</u>. Por tanto, el intercambio de claves no resuelve el problema de la confianza; simplemente simplifica el procedimiento cuando hay muchos participantes.</p><h3 id="cifrado-asimétrico">Cifrado asimétrico</h3><p>Tras la invención del intercambio de claves de Diffie–Hellman surgieron rápidamente nuevos desarrollos, entre ellos el <strong>algoritmo RSA (RSA algorithm)</strong>, llamado así por los apellidos de sus inventores, Ronald Rivest, Adi Shamir y Leonard Adleman. RSA incluye dos primitivas: cifrado de clave pública (cifrado asimétrico) y firma digital, ambas pertenecientes a la criptografía asimétrica.</p><p>En el <strong>cifrado asimétrico</strong>, el objetivo básico de cifrar un mensaje para asegurar su confidencialidad es similar al del <a href="#cifrado-simetrico">cifrado simétrico</a>. Sin embargo, a diferencia del cifrado simétrico —en el que se usa la misma clave para cifrar y descifrar—, el cifrado asimétrico presenta las siguientes características:</p><ul><li>Funciona con dos claves: una pública y una privada.<li>Cualquiera puede cifrar usando la clave pública, pero solo quien posee la clave privada puede descifrar.</ul><ol><li>Existe una caja abierta (clave pública) en la que cualquiera puede introducir un mensaje y cerrarla con llave; una vez cerrada, solo Beto puede abrirla con su llave (clave privada).<li>Alicia coloca el mensaje que quiere enviar dentro de la caja y la cierra (cifra el mensaje), y luego la entrega a Beto.<li>Beto, tras recibir la caja cerrada (el mensaje cifrado), la abre con la llave que posee (su clave privada) y extrae el mensaje (lo descifra).</ol><h3 id="firma-digital">Firma digital</h3><p>RSA no solo ofrece cifrado asimétrico, sino también <strong>firma digital</strong>; esta primitiva de firma digital resultó de enorme ayuda para establecer confianza entre Alicia y Beto. Para firmar un mensaje se usa la clave privada del firmante, y cualquiera puede comprobar la autenticidad de la firma usando el mensaje firmado, la firma y la clave pública del firmante.</p><h2 id="utilidad-de-la-criptografía">Utilidad de la criptografía</h2><p>El objetivo de la criptografía es proteger los protocolos frente a acciones hostiles, de modo que su utilidad depende de qué busque conseguir el protocolo en cuestión. La mayoría de primitivas y protocolos criptográficos proporcionan una o varias de las propiedades siguientes:</p><ul><li><strong>Confidencialidad (confidentiality)</strong>: ocultar y proteger cierta información frente a quienes no deberían verla.<li><strong>Autenticación (authentication)</strong>: identificar a la contraparte en la comunicación (por ejemplo, comprobar si el mensaje recibido lo ha enviado realmente Alicia).</ul><h2 id="ecosistema-de-la-criptografía">Ecosistema de la criptografía</h2><pre><code class="language-mermaid">flowchart TD
    Alice[Investigadora en criptografía]-- inventa primitivas --&gt;Primitive(Nueva primitiva propuesta)
    Alice-- diseña protocolos --&gt;Protocol(Nuevo protocolo propuesto)
    Alice-. organiza concurso .-&gt;C(Concurso de algoritmos)

    David[Sector privado]-. financiación .-&gt;Alice
    David-. organiza concurso .-&gt;C

    Eve[Organismo público]-. financiación .-&gt;Alice
    Eve-. organiza concurso .-&gt;C

    Primitive --&gt; t1{"¿Es implementable?"}
    t1-- Sí --&gt;Protocol
    t1-- No --&gt;term1@{ shape: framed-circle, label: "Fin" }

    Protocol-- participa en concurso --&gt;C
    Protocol-- estandarización --&gt;Standard(Estándar)
    Protocol-- solicitud de patente --&gt;Patent(Patente expira)
    Protocol-- implementación --&gt;Library(Biblioteca)
    
    C-- gana el concurso --&gt;Standard
    C-- descartado --&gt;term2@{ shape: framed-circle, label: "Fin" }

    Standard-- implementación --&gt;Library
    Standard-- descartado --&gt;term3@{ shape: framed-circle, label: "Fin" }

    Patent-- descartado --&gt;term2@{ shape: framed-circle, label: "Fin" }
    Patent-- estandarización --&gt;Standard
    Patent-- implementación --&gt;Library

    Library-- estandarización --&gt;Standard
    Library-- seguridad rota --&gt;term4@{ shape: framed-circle, label: "Fin" }
</code></pre>]]> </content> </entry> <entry><title xml:lang="es">Transformación lineal, núcleo e imagen</title><link href="https://www.yunseo.kim/es/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/es/posts/linear-transformation-nullspace-and-image/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="es">Definimos la transformación lineal y estudiamos dos subespacios fundamentales —núcleo (espacio nulo) e imagen— junto con sus dimensiones (nulidad y rango) y los teoremas más importantes relacionados.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Definimos la transformación lineal y estudiamos dos subespacios fundamentales —núcleo (espacio nulo) e imagen— junto con sus dimensiones (nulidad y rango) y los teoremas más importantes relacionados.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="prerequisites">Prerequisites</h2><ul><li><a href="/es/posts/vectors-and-linear-combinations/">Vectores y combinaciones lineales</a><li><a href="/es/posts/vector-spaces-subspaces-and-matrices/">Espacios vectoriales, subespacios y matrices</a><li><a href="posts/linear-dependence-and-independence-basis-and-dimension/">Dependencia lineal e independencia lineal, base y dimensión</a><li>inyección, sobreyección</ul><h2 id="transformación-lineal">Transformación lineal</h2><p>Una función especial que preserva la estructura de espacio vectorial se llama <strong>transformación lineal (linear transformation)</strong>; es un concepto clave que aparece con mucha frecuencia en matemáticas puras, matemáticas aplicadas, ciencias sociales, ciencias naturales e ingeniería.</p><blockquote class="prompt-info"><p><strong>Definición</strong><br /> Sean $\mathbb{V}$ y $\mathbb{W}$ $F$-espacios vectoriales. Una función $T: \mathbb{V} \to \mathbb{W}$ que satisface las dos condiciones siguientes para todo $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ y todo $c \in F$ se llama <strong>transformación lineal (linear transformation)</strong> de $\mathbb{V}$ en $\mathbb{W}$.</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>Decimos simplemente que $T$ es <strong>lineal</strong>. Una transformación lineal $T: \mathbb{V} \to \mathbb{W}$ satisface las cuatro propiedades siguientes.</p><blockquote class="prompt-info"><ol><li>$T$ lineal $\quad \Rightarrow \quad $ $T(\mathbf{0}) = \mathbf{0}$<li>$T$ es lineal $\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$ lineal $\quad \Rightarrow \quad $ $T(\mathbf{x} - \mathbf{y}) = T(\mathbf{x}) - T(\mathbf{y}) \; \forall \, \mathbf{x}, \mathbf{y} \in \mathbb{V}$<li>$T$ es lineal $\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>Para probar que una función es lineal, suele ser conveniente usar la propiedad 2.</p></blockquote><blockquote class="prompt-tip"><p>El álgebra lineal tiene un uso amplio y variado en geometría porque muchas transformaciones geométricas importantes son lineales. En particular, las tres transformaciones principales —<strong>rotación</strong>, <strong>simetría</strong> y <strong>proyección</strong>— son transformaciones lineales.</p></blockquote><p>Dos transformaciones lineales aparecen especialmente a menudo.</p><blockquote class="prompt-info"><p><strong>Transformación identidad y transformación nula</strong><br /> Para $F$-espacios vectoriales $\mathbb{V}, \mathbb{W}$:</p><ul><li><strong>Transformación identidad (identity transformation)</strong>: la función $I_\mathbb{V}: \mathbb{V} \to \mathbb{V}$ definida por $I_\mathbb{V}(\mathbf{x}) = \mathbf{x}$ para todo $\mathbf{x} \in \mathbb{V}$<li><strong>Transformación nula (zero transformation)</strong>: la función $T_0: \mathbb{V} \to \mathbb{W}$ definida por $T_0(\mathbf{x}) = \mathbf{0}$ para todo $\mathbf{x} \in \mathbb{V}$</ul></blockquote><p>Además de estas, muchos otros objetos son transformaciones lineales.</p><blockquote class="prompt-tip"><p><strong>Ejemplos de transformaciones lineales</strong></p><ul><li>rotación<li>simetría<li>proyección<li><a href="/es/posts/vector-spaces-subspaces-and-matrices/#matriz-traspuesta-simétrica-y-antisimétrica">traspuesta</a><li>la derivada de una función diferenciable<li>la integral de una función continua</ul></blockquote><h2 id="núcleo-e-imagen">Núcleo e imagen</h2><h3 id="definición-de-núcleo-e-imagen">Definición de núcleo e imagen</h3><blockquote class="prompt-info"><p><strong>Definición</strong><br /> Dados espacios vectoriales $\mathbb{V}, \mathbb{W}$ y una transformación lineal $T: \mathbb{V} \to \mathbb{W}$:</p><ul><li><p><strong>Espacio nulo (null space)</strong> o <strong>núcleo (kernel)</strong>: el conjunto de los $\mathbf{x} \in \mathbb{V}$ tales que $T(\mathbf{x}) = \mathbf{0}$; se denota por $\mathrm{N}(T)$</p>\[\mathrm{N}(T) = \{ \mathbf{x} \in \mathbb{V}: T(\mathbf{x}) = \mathbf{0} \}\]<li><p><strong>Imagen (image)</strong> o <strong>rango (range)</strong>: el subconjunto de $\mathbb{W}$ formado por los valores de $T$; se denota por $\mathrm{R}(T)$</p>\[\mathrm{R}(T) = \{ T(\mathbf{x}): \mathbf{x} \in \mathbb{V} \}\]</ul></blockquote><blockquote class="prompt-tip"><p><strong>p. ej.</strong> Para espacios vectoriales $\mathbb{V}, \mathbb{W}$, la identidad $I: \mathbb{V} \to \mathbb{V}$ y la transformación nula $T_0: \mathbb{V} \to \mathbb{W}$ satisfacen:</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>Algo que será importante en adelante: el núcleo y la imagen de una transformación lineal son <a href="/es/posts/vector-spaces-subspaces-and-matrices/#subespacios">subespacios</a>.</p><blockquote class="prompt-info"><p><strong>Teorema 1</strong><br /> Dado $\mathbb{V}, \mathbb{W}$ y $T: \mathbb{V} \to \mathbb{W}$ lineal, $\mathrm{N}(T)$ y $\mathrm{R}(T)$ son subespacios de $\mathbb{V}$ y $\mathbb{W}$, respectivamente.</p><p><strong>Demostración</strong><br /> Denotemos por $\mathbf{0}_\mathbb{V}, \mathbf{0}_\mathbb{W}$ los vectores cero de $\mathbb{V}$ y $\mathbb{W}$, respectivamente.</p><p>Como $T(\mathbf{0}_\mathbb{V}) = \mathbf{0}_\mathbb{W}$, se tiene $\mathbf{0}_\mathbb{V} \in \mathrm{N}(T)$. Además, para $\mathbf{x}, \mathbf{y} \in \mathrm{N}(T)$ y $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="/es/posts/vector-spaces-subspaces-and-matrices/#subespacios">Como $\mathbf{0}_\mathbb{V} \in \mathrm{N}(T)$, $\mathbf{x} + \mathbf{y} \in \mathrm{N}(T)$ y $c\mathbf{x} \in \mathrm{N}(T)$, $\mathrm{N}(T)$ es un subespacio de $\mathbb{V}$</a>.</p><p>Del mismo modo, $T(\mathbf{0}_\mathbb{V}) = \mathbf{0}_\mathbb{W}$ implica $\mathbf{0}_\mathbb{W} \in \mathrm{R}(T)$; y como $\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}))$, entonces</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="/es/posts/vector-spaces-subspaces-and-matrices/#subespacios">Como $\mathbf{0}_\mathbb{W} \in \mathrm{R}(T)$, $\mathbf{x} + \mathbf{y} \in \mathrm{R}(T)$ y $c\mathbf{x} \in \mathrm{R}(T)$, $\mathrm{R}(T)$ es un subespacio de $\mathbb{W}$</a>. $\blacksquare$</p></blockquote><p>Por otra parte, dados $\mathbb{V}, \mathbb{W}$ y $T: \mathbb{V} \to \mathbb{W}$ lineal, si conocemos una <a href="/es/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}$, podemos hallar un <a href="/es/posts/vectors-and-linear-combinations/#generación">conjunto generador</a> de la imagen $\mathrm{R}(T)$ como sigue.</p><blockquote class="prompt-info"><p><strong>Teorema 2</strong><br /> Sean $\mathbb{V}, \mathbb{W}$ y $T: \mathbb{V} \to \mathbb{W}$ lineal, y sea $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ una <a href="/es/posts/linear-dependence-and-independence-basis-and-dimension/#base">base</a> de $\mathbb{V}$. Entonces:</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>Demostración</strong></p>\[T(\mathbf{v}_i) \in \mathrm{R}(T) \quad \forall \mathbf{v}_i \in \beta.\]<p>Como $\mathrm{R}(T)$ es un subespacio, por el <strong>Teorema 2</strong> de <a href="/es/posts/vector-spaces-subspaces-and-matrices/#subespacios">Espacios vectoriales, subespacios y 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>Además,</p>\[\forall \mathbf{w} \in \mathrm{R}(T) \ (\exists \mathbf{v} \in \mathbb{V} \ (\mathbf{w} = T(\mathbf{v}))).\]<p>Como $\beta$ es base de $\mathbb{V}$,</p>\[\mathbf{v} = \sum_{i=1}^n a_i \mathbf{v}_i \quad \text{(donde } a_1, a_2, \dots, a_n \in F \text{)}.\]<p>Como $T$ es lineal,</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$ Como $\mathrm{R}(T) \supseteq \mathrm{span}({T(\mathbf{v}_i): \mathbf{v}_i \in \beta })$ y a la vez $\mathrm{R}(T) \subseteq \mathrm{span}({T(\mathbf{v}_i): \mathbf{v}_i \in \beta })$, se sigue que $\mathrm{R}(T) = \mathrm{span}({T(\mathbf{v}): \mathbf{v} \in \beta })$. $\blacksquare$</p></blockquote><p>Este teorema también vale cuando la base $\beta$ es infinita.</p><h3 id="teorema-de-la-dimensión">Teorema de la dimensión</h3><p>Como núcleo e imagen son subespacios muy importantes, sus <a href="/es/posts/linear-dependence-and-independence-basis-and-dimension/#dimensión">dimensiones</a> reciben nombres específicos.</p><blockquote class="prompt-info"><p>Sean $\mathbb{V}, \mathbb{W}$ y $T: \mathbb{V} \to \mathbb{W}$ lineal, y supongamos que $\mathrm{N}(T), \mathrm{R}(T)$ son de dimensión finita.</p><ul><li><strong>Nulidad (nullity)</strong>: la dimensión de $\mathrm{N}(T)$; se denota por $\mathrm{nullity}(T)$<li><strong>Rango (rank)</strong>: la dimensión de $\mathrm{R}(T)$; se denota por $\mathrm{rank}(T)$</ul></blockquote><p>Para transformaciones lineales, cuanto mayor es la nulidad, menor es el rango, y viceversa.</p><blockquote class="prompt-info"><p><strong>Teorema 3: teorema de la dimensión</strong><br /> Sean $\mathbb{V}, \mathbb{W}$ y $T: \mathbb{V}\to \mathbb{W}$ lineal. Si $\mathbb{V}$ es de dimensión finita, entonces:</p>\[\mathrm{nullity}(T) + \mathrm{rank}(T) = \dim(\mathbb{V})\]</blockquote><h4 id="demostración">Demostración</h4><p>Sea $\dim(\mathbb{V}) = n$, $\mathrm{nullity}(T) = \dim(\mathrm{N}(T)) = k$, y sea $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \}$ una base de $\mathrm{N}(T)$.</p><p>Por el <strong>Corolario 6-1</strong> de <a href="/es/posts/linear-dependence-and-independence-basis-and-dimension/#dimensión-de-subespacios">“Dependencia lineal e independencia lineal, base y dimensión”</a>, podemos ampliar $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \}$ a una base de $\mathbb{V}$, $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$.</p><p>Mostraremos ahora que $S = \{T(\mathbf{v}_{k+1}), T(\mathbf{v}_{k+2}), \dots, T(\mathbf{v}_n) \}$ es una base de $\mathrm{R}(T)$. Como $T(\mathbf{v}_i) = 0$ para $1 \leq i \leq k$, por el <a href="#definición-de-núcleo-e-imagen"><strong>Teorema 2</strong></a> se tiene</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>Es decir, $S$ es un conjunto generador de $\mathrm{R}(T)$. Por el <a href="/es/posts/linear-dependence-and-independence-basis-and-dimension/#dimensión"><strong>Corolario 5-2 del teorema del reemplazo</strong></a>, bastará probar que $S$ es linealmente independiente para concluir que es base de $\mathrm{R}(T)$.</p><p>Si $\sum_{i=k+1}^n b_i T(\mathbf{v}_i) = 0$ (con $b_{k+1}, b_{k+2}, \dots, b_n \in F$), como $T$ es lineal,</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>Por tanto,</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>Como $\beta$ es base de $\mathbb{V}$, la única solución de $\sum_{i=1}^k (-c_i)\mathbf{v}_i + \sum_{i=k+1}^n b_i \mathbf{v}_i = 0$ es</p>\[c_1 = c_2 = \cdots = c_k = b_{k+1} = b_{k+2} = \cdots = b_n = 0\]<p>y de aquí</p>\[\sum_{i=k+1}^n b_i T(\mathbf{v}_i) = 0 \quad \Rightarrow \quad b_i = 0.\]<p>Así, $S$ es linealmente independiente y base de $\mathrm{R}(T)$.</p>\[\therefore \mathrm{rank}(T) = n - k = \dim{\mathbb{V}} - \mathrm{nullity}(T). \blacksquare\]<h3 id="transformación-lineal-inyectividad-y-sobreyectividad">Transformación lineal, inyectividad y sobreyectividad</h3><p>En transformaciones lineales, la inyectividad (injection) y la sobreyectividad (surjection) están estrechamente relacionadas con el rango y la nulidad.</p><blockquote class="prompt-info"><p><strong>Teorema 4</strong><br /> Dados $\mathbb{V}, \mathbb{W}$ y $T: \mathbb{V} \to \mathbb{W}$ lineal,</p>\[T \text{ es inyectiva} \quad \Leftrightarrow \quad \mathrm{N}(T) = \{\mathbf{0}\}.\]</blockquote><blockquote class="prompt-info"><p><strong>Teorema 5</strong><br /> Si $\mathbb{V}, \mathbb{W}$ son espacios vectoriales de dimensión finita con la misma dimensión y $T: \mathbb{V} \to \mathbb{W}$ es lineal, entonces son equivalentes las cuatro afirmaciones:</p><ol><li>$T$ es inyectiva.<li>$\mathrm{nullity}(T) = 0$<li>$\mathrm{rank}(T) = \dim(\mathbb{V})$<li>$T$ es sobreyectiva.</ol></blockquote><p>Usando el <a href="#teorema-de-la-dimensión">teorema de la dimensión</a>, las <a href="#transformación-lineal">propiedades 1 y 3 de las transformaciones lineales</a> y el <a href="/es/posts/linear-dependence-and-independence-basis-and-dimension/#dimensión-de-subespacios"><strong>Teorema 6</strong> de “Dependencia lineal e independencia lineal, base y dimensión”</a>, se pueden demostrar los <strong>Teoremas 4</strong> y <strong>5</strong>.</p><p>Estos dos teoremas son útiles para decidir si una transformación lineal dada es inyectiva o sobreyectiva.</p><blockquote class="prompt-warning"><p>Para un espacio vectorial infinito dimensional $\mathbb{V}$ y $T: \mathbb{V} \to \mathbb{V}$ lineal, inyectividad y sobreyectividad no son equivalentes.</p></blockquote><p>Además, si una transformación lineal es inyectiva, el siguiente teorema puede ser útil para decidir si un subconjunto dado de un espacio vectorial es linealmente independiente.</p><blockquote class="prompt-info"><p><strong>Teorema 6</strong><br /> Sean $\mathbb{V}, \mathbb{W}$ y $T: \mathbb{V} \to \mathbb{W}$ lineal e inyectiva, y sea $S \subseteq \mathbb{V}$. Entonces:</p>\[S \text{ es linealmente independiente} \quad \Leftrightarrow \quad \{T(\mathbf{v}): \mathbf{v} \in S \} \text{ es linealmente independiente.}\]</blockquote><h2 id="transformación-lineal-y-bases">Transformación lineal y bases</h2><p>Una propiedad importante de las transformaciones lineales es que su comportamiento queda determinado por su acción sobre una base.</p><blockquote class="prompt-info"><p><strong>Teorema 7</strong><br /> Sean los $F$-espacios vectoriales $\mathbb{V}, \mathbb{W}$, una base $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ de $\mathbb{V}$ y vectores $\mathbf{w}_1, \mathbf{w}_2, \dots, \mathbf{w}_n \in \mathbb{W}$. Existe una única transformación lineal $T: \mathbb{V} \to \mathbb{W}$ que satisface:</p>\[T(\mathbf{v}_i) = \mathbf{w}_i \quad \text{para } i = 1, 2, \dots, n\]<p><strong>Demostración</strong><br /> Para cada $\mathbf{x} \in \mathbb{V}$, la siguiente representación como combinación lineal es única:</p>\[\mathbf{x} = \sum_{i=1}^n a_i \mathbf{v}_i \text{ (}a_1, a_2, \dots, a_n \in F \text{)}\]<p>Definamos la transformación lineal $T: \mathbb{V} \to \mathbb{W}$ por</p>\[T(\mathbf{x}) = T\left( \sum_{i=1}^n a_i \mathbf{v}_i \right) = \sum_{i=1}^n a_i \mathbf{w}_i\]<p>i) Para $i = 1, 2, \dots, n$, se cumple $T(\mathbf{v}_i) = \mathbf{w}_i$.</p><p>ii)</p><p>Si otra transformación lineal $U: \mathbb{V} \to \mathbb{W}$ satisface $U(\mathbf{v}_i) = \mathbf{w}_i$ para $i = 1, 2, \dots, n$, entonces, para $\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>Por i) y ii), la transformación lineal que cumple $T(\mathbf{v}_i) = \mathbf{w}_i$ para $i = 1, 2, \dots, n$ es</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>y es única. $\blacksquare$</p><p><strong>Corolario 7-1</strong><br /> Sean espacios vectoriales $\mathbb{V}, \mathbb{W}$ y supongamos que $\mathbb{V}$ tiene una base finita $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$. Si dos transformaciones lineales $U, T: \mathbb{V} \to \mathbf{W}$ satisfacen $U(\mathbf{v}_i) = T(\mathbf{v}_i)$ para $i = 1, 2, \dots, n$, entonces $U = T$.<br /> Es decir, <u>si dos transformaciones lineales coinciden en una base, son la misma transformación</u>.</p></blockquote>]]> </content> </entry> <entry><title xml:lang="es">Dependencia lineal e independencia lineal, base y dimensión</title><link href="https://www.yunseo.kim/es/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="cs" /><link href="https://www.yunseo.kim/sw/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="sw" /><link href="https://www.yunseo.kim/am/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="am" /><published>2025-09-16T00:00:00+09:00</published> <updated>2025-09-16T00:00:00+09:00</updated> <id>https://www.yunseo.kim/es/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="es">Resumen claro de dependencia e independencia lineal, y de los conceptos de base y dimensión en espacios vectoriales; teoremas clave y criterios de decisión.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Resumen claro de dependencia e independencia lineal, y de los conceptos de base y dimensión en espacios vectoriales; teoremas clave y criterios de decisión.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="prerequisites">Prerequisites</h2><ul><li><a href="/es/posts/vectors-and-linear-combinations/">Vectores y combinaciones lineales</a><li><a href="/es/posts/vector-spaces-subspaces-and-matrices/">Espacios vectoriales, subespacios y matrices</a></ul><h2 id="dependencia-lineal-e-independencia-lineal">Dependencia lineal e independencia lineal</h2><p>Dado un <a href="/es/posts/vector-spaces-subspaces-and-matrices/#espacios-vectoriales">espacio vectorial</a> $\mathbb{V}$ y un <a href="/es/posts/vector-spaces-subspaces-and-matrices/#subespacios">subespacio</a> $\mathbb{W}$, supongamos que queremos encontrar un subconjunto finito mínimo $S$ que <a href="/es/posts/vectors-and-linear-combinations/#combinación-lineal-cmathbfv--dmathbfw">genere</a> $\mathbb{W}$.</p><p>Sea $S = \{\mathbf{u}_1, \mathbf{u}_2, \mathbf{u}_3, \mathbf{u}_4 \}$ tal que $\mathrm{span}(S) = \mathbb{W}$. ¿Cómo decidir si existe un subconjunto propio de $S$ que aún genere $\mathbb{W}$? Esto equivale a decidir si un vector de $S$ puede escribirse como <a href="/es/posts/vectors-and-linear-combinations/#combinación-lineal-de-vectores">combinación lineal</a> de los demás. Por ejemplo, una condición necesaria y suficiente para poder expresar $\mathbf{u}_4$ como combinación lineal de los otros tres vectores es que existan escalares $a_1, a_2, a_3$ que satisfagan:</p>\[\mathbf{u}_4 = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + a_3\mathbf{u}_3\]<p>Sin embargo, plantear y resolver cada vez un sistema lineal para $\mathbf{u}_1$, $\mathbf{u}_2$, $\mathbf{u}_3$, $\mathbf{u}_4$ sería engorroso; mejor reescribamos ligeramente:</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 algún vector de $S$ es combinación lineal de los otros, entonces existe una forma de expresar el vector cero como combinación lineal de elementos de $S$ en la que al menos uno de los coeficientes $a_1, a_2, a_3, a_4$ sea distinto de $0$. El recíproco también es cierto: si existe una combinación de los vectores de $S$ que da el vector cero con al menos un coeficiente no nulo, entonces algún vector de $S$ es combinación lineal de los demás.</p><p>Generalizando, definimos <strong>dependencia lineal</strong> e <strong>independencia lineal</strong> como sigue.</p><blockquote class="prompt-info"><p><strong>Definición</strong><br /> Para un subconjunto $S$ de un espacio vectorial $\mathbb{V}$, si existen un número finito de vectores distintos $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \in S$ y escalares $a_1, a_2, \dots, a_n$, no todos nulos, tales que $a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n = \mathbf{0}$, entonces el conjunto $S$ y esos vectores se dicen <strong>linealmente dependientes</strong>. En caso contrario, se dicen <strong>linealmente independientes</strong>.</p></blockquote><p>Para cualesquiera vectores $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$, si $a_1 = a_2 = \cdots = a_n = 0$, entonces $a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n = \mathbf{0}$; a esto se le llama la <strong>representación trivial del vector cero (trivial representation of $\mathbf{0}$)</strong>.</p><p>Los siguientes tres enunciados sobre conjuntos linealmente independientes son siempre verdaderos en cualquier espacio vectorial. En particular, la <strong>Proposición 3</strong> es muy útil para decidir si un conjunto finito es independiente.</p><blockquote class="prompt-info"><ul><li><strong>Proposición 1</strong>: El conjunto vacío es linealmente independiente. Para que un conjunto sea linealmente dependiente debe ser no vacío.<li><strong>Proposición 2</strong>: Un conjunto formado por un único vector no nulo es linealmente independiente.<li><strong>Proposición 3</strong>: Un conjunto es linealmente independiente si y solo si la única forma de expresar $\mathbf{0}$ como combinación lineal de sus vectores es la representación trivial.</ul></blockquote><p>También son importantes los siguientes resultados.</p><blockquote class="prompt-info"><p><strong>Teorema 1</strong><br /> Si $\mathbb{V}$ es un espacio vectorial y $S_1 \subseteq S_2 \subseteq \mathbb{V}$, entonces si $S_1$ es linealmente dependiente, $S_2$ también lo es.</p><p><strong>Corolario 1-1</strong><br /> Si $\mathbb{V}$ es un espacio vectorial y $S_1 \subseteq S_2 \subseteq \mathbb{V}$, entonces si $S_2$ es linealmente independiente, $S_1$ también lo es.</p></blockquote><blockquote class="prompt-info"><p><strong>Teorema 2</strong><br /> Sea $\mathbb{V}$ un espacio vectorial y $S$ un subconjunto linealmente independiente. Para un vector $\mathbf{v} \in \mathbb{V}$ que no pertenezca a $S$, una condición necesaria y suficiente para que $S \cup \{\mathbf{v}\}$ sea linealmente dependiente es que $\mathbf{v} \in \mathrm{span}(S)$.</p><p>Dicho de otro modo, <strong>si ningún subconjunto propio de $S$ genera el mismo espacio que $S$, entonces $S$ es linealmente independiente.</strong></p></blockquote><h2 id="base-y-dimensión">Base y dimensión</h2><h3 id="base">Base</h3><p>Un conjunto generador $S$ de $\mathbb{W}$ que sea <a href="#dependencia-lineal-e-independencia-lineal">linealmente independiente</a> tiene una propiedad especial: todo vector de $\mathbb{W}$ puede expresarse necesariamente como combinación lineal de elementos de $S$, y además esa expresión es única (<strong>Teorema 3</strong>). Por ello, llamamos <strong>base</strong> a un conjunto generador linealmente independiente de un espacio vectorial.</p><blockquote class="prompt-info"><p><strong>Definición de base</strong><br /> Dado un espacio vectorial $\mathbb{V}$ y un subconjunto $\beta$, si $\beta$ es linealmente independiente y genera $\mathbb{V}$, entonces $\beta$ es una <strong>base</strong> de $\mathbb{V}$. En tal caso, se dice que los vectores de $\beta$ forman una base de $\mathbb{V}$.</p></blockquote><blockquote class="prompt-tip"><p>Se tiene $\mathrm{span}(\emptyset) = \{\mathbf{0}\}$ y $\emptyset$ es linealmente independiente. Por tanto, $\emptyset$ es una base del espacio cero.</p></blockquote><p>En particular, la siguiente base especial de $F^n$ se llama <strong>base estándar (standard basis)</strong> de $F^n$.</p><blockquote class="prompt-info"><p><strong>Definición de base estándar</strong><br /> Para el espacio vectorial $F^n$, consideremos los siguientes vectores:</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>Entonces, el conjunto $\{\mathbf{e}_1, \mathbf{e}_2, \dots, \mathbf{e}_n \}$ es una base de $F^n$, llamada la <strong>base estándar</strong> de $F^n$.</p></blockquote><blockquote class="prompt-info"><p><strong>Teorema 3</strong><br /> Sea $\mathbb{V}$ un espacio vectorial y sean $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \in \mathbb{V}$ vectores distintos. Un conjunto $\beta = \{\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \}$ es una base de $\mathbb{V}$ si y solo si todo vector $\mathbf{v} \in \mathbb{V}$ puede representarse como combinación lineal de los vectores de $\beta$, y dicha representación es única. Es decir, existe un único $n$-tuplo de escalares $(a_1, a_2, \dots, a_n)$ tal que</p>\[\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n\]</blockquote><p>Según el <strong>Teorema 3</strong>, si $n$ vectores distintos $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ forman una base de $\mathbb{V}$, entonces en ese espacio queda determinado el $n$-tuplo de escalares $(a_1, a_2, \dots, a_n)$ asociado a un vector dado $\mathbf{v}$, y recíprocamente, dado un $n$-tuplo de escalares se obtiene el vector correspondiente $\mathbf{v}$. Más adelante, al estudiar la <strong>invertibilidad</strong> y el <strong>isomorfismo</strong>, volveremos sobre esto; en este caso, $\mathbb{V}$ y $F^n$ son <u>esencialmente iguales</u>.</p><blockquote class="prompt-info"><p><strong>Teorema 4</strong><br /> Si $S$ es un conjunto finito con $\mathrm{span}(S) = \mathbb{V}$, entonces existe un subconjunto de $S$ que es base de $\mathbb{V}$. En particular, en este caso, cualquier base de $\mathbb{V}$ es finita.</p></blockquote><blockquote class="prompt-tip"><p>Muchos espacios vectoriales cumplen el <strong>Teorema 4</strong>, pero no todos. <u>Una base puede no ser un conjunto finito</u>.</p></blockquote><h3 id="dimensión">Dimensión</h3><blockquote class="prompt-info"><p><strong>Teorema 5: teorema del reemplazo (replacement theorem)</strong><br /> Sea $G$ un conjunto de $n$ vectores tal que $\mathrm{span}(G) = \mathbb{V}$. Si $L$ es un subconjunto de $\mathbb{V}$ formado por $m$ vectores linealmente independientes, entonces $m \leq n$. Además, existe un conjunto $H \subseteq G$ con $n-m$ vectores tal que $\mathrm{span}(L \cup H) = \mathbb{V}$.</p></blockquote><p>De aquí se obtienen dos corolarios muy importantes.</p><blockquote class="prompt-info"><p><strong>Corolario 5-1 del teorema del reemplazo</strong><br /> Si un espacio vectorial $\mathbb{V}$ tiene alguna base finita, entonces toda base de $\mathbb{V}$ es finita y todas tienen el mismo número de vectores.</p></blockquote><p>Según esto, el número de vectores que forman una base de $\mathbb{V}$ es una propiedad esencial e invariante de $\mathbb{V}$, llamada <strong>dimensión</strong>.</p><blockquote class="prompt-info"><p><strong>Definición de dimensión</strong><br /> Un espacio vectorial cuya base es finita se dice de <strong>dimensión finita</strong>; en tal caso, al número $n$ de elementos de una base se le llama la <strong>dimensión</strong> del espacio y se denota por $\dim(\mathbb{V})$. Un espacio vectorial que no es de dimensión finita es de <strong>dimensión infinita</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 dimensión de un espacio vectorial puede cambiar según el cuerpo de base.</p><ul><li>Sobre el cuerpo de los complejos $\mathbb{C}$, la dimensión del espacio vectorial de los complejos es $1$, con base $\{1\}$<li>Sobre el cuerpo de los reales $\mathbb{R}$, la dimensión del espacio vectorial de los complejos es $2$, con base $\{1,i\}$</ul></blockquote><p>En un espacio vectorial de dimensión finita $\mathbb{V}$, ningún subconjunto con más de $\dim(\mathbb{V})$ vectores puede ser linealmente independiente.</p><blockquote class="prompt-info"><p><strong>Corolario 5-2 del teorema del reemplazo</strong><br /> Sea $\mathbb{V}$ un espacio vectorial de dimensión $n$.</p><ol><li>Todo conjunto generador finito de $\mathbb{V}$ contiene al menos $n$ vectores, y cualquier conjunto generador de $\mathbb{V}$ con $n$ vectores es una base de $\mathbb{V}$.<li>Todo subconjunto de $\mathbb{V}$ con $n$ vectores linealmente independientes es una base de $\mathbb{V}$. 3. Todo subconjunto linealmente independiente de $\mathbb{V}$ puede ampliarse a una base. Es decir, si $L \subseteq \mathbb{V}$ es linealmente independiente, existe una base $\beta$ de $\mathbb{V}$ con $\beta \supseteq L$.</ol></blockquote><h3 id="dimensión-de-subespacios">Dimensión de subespacios</h3><blockquote class="prompt-info"><p><strong>Teorema 6</strong><br /> Si $\mathbb{V}$ es un espacio vectorial de dimensión finita, entonces todo subespacio $\mathbb{W}$ es también de dimensión finita y se cumple $\dim(\mathbb{W}) \leq \dim(\mathbb{V})$. En particular, si $\dim(\mathbb{W}) = \dim(\mathbb{V})$, entonces $\mathbb{V} = \mathbb{W}$.</p><p><strong>Corolario 6-1</strong><br /> Dado un subespacio $\mathbb{W}$ de un espacio vectorial de dimensión finita $\mathbb{V}$, cualquier base de $\mathbb{W}$ puede ampliarse a una base de $\mathbb{V}$.</p></blockquote><p>Por el <strong>Teorema 6</strong>, la dimensión de los subespacios de $\mathbb{R}^3$ puede ser $0,1,2,3$.</p><ul><li>Dimensión 0: el espacio $\{\mathbf{0}\}$ que solo contiene el origen ($\mathbf{0}$)<li>Dimensión 1: una recta que pasa por el origen ($\mathbf{0}$)<li>Dimensión 2: un plano que contiene el origen ($\mathbf{0}$)<li>Dimensión 3: todo el espacio euclídeo tridimensional</ul>]]> </content> </entry> <entry><title xml:lang="es">Espacios vectoriales, subespacios y matrices</title><link href="https://www.yunseo.kim/es/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/es/posts/vector-spaces-subspaces-and-matrices/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="es">Definimos espacios vectoriales y subespacios con ejemplos (F^n, espacios de matrices y de funciones). En matrices: simétricas, antisimétricas, triangulares y diagonales como subespacios.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Definimos espacios vectoriales y subespacios con ejemplos (F^n, espacios de matrices y de funciones). En matrices: simétricas, antisimétricas, triangulares y diagonales como subespacios.</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>Matriz</strong><ul><li>El elemento de la fila $i$ y columna $j$ de una matriz $A$ se denota por $A_{ij}$ o $a_{ij}$<li><strong>Entrada diagonal</strong>: el elemento $a_{ij}$ con $i=j$<li>Los elementos $a_{i1}, a_{i2}, \dots, a_{in}$ forman la <strong>fila</strong> $i$-ésima de la matriz<ul><li>Cada fila de una matriz puede verse como un vector de $F^n$<li>A su vez, un vector fila de $F^n$ puede representarse como otra matriz de tamaño $1 \times n$</ul><li>Los elementos $a_{1j}, a_{2j}, \dots, a_{mj}$ forman la <strong>columna</strong> $j$-ésima de la matriz<ul><li>Cada columna de una matriz puede verse como un vector de $F^m$<li>A su vez, un vector columna de $F^m$ puede representarse como otra matriz de tamaño $m \times 1$</ul><li><strong>Matriz cero</strong>: matriz cuyas entradas son todas $0$, se denota por $O$<li><strong>Matriz cuadrada</strong>: matriz con igual número de filas y de columnas<li>Dadas dos matrices $m \times n$ $A, B$, si para todo $1 \leq i \leq m$, $1 \leq j \leq n$ se cumple $A_{ij} = B_{ij}$ (es decir, todas las entradas correspondientes coinciden), definimos que las dos matrices son <strong>iguales</strong> ($A=B$)<li><strong>Matriz traspuesta</strong>: para una matriz $m \times n$ $A$, la matriz $n \times m$ $A^T$ que se obtiene intercambiando filas y columnas de $A$<li><strong>Matriz simétrica</strong>: matriz cuadrada $A$ tal que $A^T = A$<li><strong>Matriz antisimétrica</strong>: matriz cuadrada $B$ tal que $B^T = -B$<li><strong>Matriz triangular</strong><ul><li><strong>Triangular superior</strong>: matriz cuyas entradas por debajo de la diagonal son $0$ (esto es, $i&gt;j \Rightarrow A_{ij}=0$), suele denotarse por $U$<li><strong>Triangular inferior</strong>: matriz cuyas entradas por encima de la diagonal son $0$ (esto es, $i&lt;j \Rightarrow A_{ij}=0$), suele denotarse por $L$</ul><li><strong>Matriz diagonal</strong>: matriz cuadrada $n \times n$ en la que todas las entradas fuera de la diagonal son $0$ (esto es, $i \neq j \Rightarrow M_{ij}=0$), suele denotarse por $D$</ul><li>Espacios vectoriales representativos<ul><li><strong>$n$-tuplas $F^n$</strong>:<ul><li>Conjunto de todas las $n$-tuplas con entradas en un cuerpo $F$<li>Se denota $F^n$ y es un espacio vectorial sobre $F$</ul><li><strong>Espacio de matrices</strong>:<ul><li>Conjunto de todas las matrices $m \times n$ con entradas en el cuerpo $F$<li>Se denota $\mathcal{M}_{m \times n}(F)$ y es un espacio vectorial</ul><li><strong>Espacio de funciones</strong>:<ul><li>Para un conjunto no vacío $S$ y un cuerpo $F$, el conjunto de todas las funciones de $S$ en $F$<li>Se denota $\mathcal{F}(S,F)$ y es un espacio vectorial</ul></ul><li><strong>Subespacio</strong><ul><li>Un subconjunto $\mathbb{W}$ de un $F$-espacio vectorial $\mathbb{V}$ es un <strong>subespacio</strong> de $\mathbb{V}$ si, con las mismas operaciones de suma y multiplicación por escalar definidas en $\mathbb{V}$, $\mathbb{W}$ es también un $F$-espacio vectorial<li>Para todo espacio vectorial $\mathbb{V}$, $\mathbb{V}$ mismo y $\{0\}$ son subespacios; en particular, a $\{0\}$ se le llama <strong>subespacio cero</strong><li>Un subconjunto de un espacio vectorial que contiene el vector cero y es cerrado bajo <a href="/es/posts/vectors-and-linear-combinations/#combinación-lineal-de-vectores">combinación lineal</a> ($\mathrm{span}(\mathbb{W})=\mathbb{W}$) es un subespacio</ul></ul></blockquote><h2 id="prerequisites">Prerequisites</h2><ul><li><a href="/es/posts/vectors-and-linear-combinations/">Vectores y combinaciones lineales</a></ul><h2 id="espacios-vectoriales">Espacios vectoriales</h2><p>Como ya vimos brevemente en <a href="/es/posts/vectors-and-linear-combinations/#sentido-amplio-elemento-de-un-espacio-vectorial">Vectores y combinaciones lineales</a>, la definición algebraica de vector y de espacio vectorial es la siguiente.</p><blockquote class="prompt-info"><p><strong>Definición</strong><br /> Un <strong>espacio vectorial (vector space)</strong> o <strong>espacio lineal (linear space)</strong> $\mathbb{V}$ sobre un cuerpo $F$ es un conjunto provisto de dos operaciones, <strong>suma</strong> y <strong>multiplicación por un escalar</strong>, que satisfacen las siguientes 8 condiciones. A los elementos de $F$ se les llama <strong>escalares (scalar)</strong> y a los de $\mathbb{V}$, <strong>vectores (vector)</strong>.</p><ul><li><strong>Suma</strong>: para cualesquiera $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ existe un único elemento $\mathbf{x} + \mathbf{y} \in \mathbb{V}$. A $\mathbf{x} + \mathbf{y}$ se le llama la <strong>suma</strong> de $\mathbf{x}$ e $\mathbf{y}$.<li><strong>Multiplicación por un escalar</strong>: para cada $a \in F$ y $\mathbf{x} \in \mathbb{V}$ existe un único elemento $a\mathbf{x} \in \mathbb{V}$. A $a\mathbf{x}$ se le llama un <strong>múltiplo escalar (scalar multiple)</strong> de $\mathbf{x}$.</ul><ol><li>Para todo $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $\mathbf{x} + \mathbf{y} = \mathbf{y} + \mathbf{x}$. (conmutatividad de la suma)<li>Para todo $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$, $(\mathbf{x}+\mathbf{y})+\mathbf{z} = \mathbf{x}+(\mathbf{y}+\mathbf{z})$. (asociatividad de la suma)<li>Para todo $\mathbf{x} \in \mathbb{V}$, existe $\mathbf{0} \in \mathbb{V}$ tal que $\mathbf{x} + \mathbf{0} = \mathbf{x}$. (vector cero, elemento neutro de la suma)<li>Para cada $\mathbf{x} \in \mathbb{V}$, existe $\mathbf{y} \in \mathbb{V}$ tal que $\mathbf{x}+\mathbf{y}=\mathbf{0}$. (inverso aditivo)<li>Para cada $\mathbf{x} \in \mathbb{V}$, $1\mathbf{x} = \mathbf{x}$. (elemento neutro de la multiplicación)<li>Para todo $a,b \in F$ y todo $\mathbf{x} \in \mathbb{V}$, $(ab)\mathbf{x} = a(b\mathbf{x})$. (asociatividad de la multiplicación por escalar)<li>Para todo $a \in F$ y todo $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $a(\mathbf{x}+\mathbf{y}) = a\mathbf{x} + a\mathbf{y}$. (distributividad del escalar respecto de la suma 1)<li>Para todo $a,b \in F$ y todo $\mathbf{x} \in \mathbb{V}$, $(a+b)\mathbf{x} = a\mathbf{x} + b\mathbf{x}$. (distributividad del escalar respecto de la suma 2)</ol></blockquote><p>Aunque estrictamente debería escribirse “$F$-espacio vectorial $\mathbb{V}$”, al tratar espacios vectoriales el cuerpo suele no ser el foco principal; por tanto, si no hay riesgo de confusión, omitimos $F$ y escribimos simplemente “espacio vectorial $\mathbb{V}$”.</p><h3 id="espacio-de-matrices">Espacio de matrices</h3><h4 id="vectores-fila-y-columna">Vectores fila y columna</h4><p>Denotamos por $F^n$ el conjunto de todas las $n$-tuplas con entradas en el cuerpo $F$. Dados $u = (a_1, a_2, \dots, a_n) \in F^n$ y $v = (b_1, b_2, \dots, b_n) \in F^n$, si definimos la suma y el producto por escalar como sigue, $F^n$ es un $F$-espacio vectorial.</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>Cuando se escribe un vector de $F^n$ de forma aislada, suele representarse más como <strong>vector columna</strong> que como <strong>vector fila</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>No obstante, esta notación como columna ocupa más espacio, por lo que a veces se recurre a la <a href="#matriz-traspuesta-simétrica-y-antisimétrica">traspuesta</a> y se escribe $(a_1, a_2, \dots, a_n)^T$.</p></blockquote><h4 id="matrices-y-espacio-de-matrices">Matrices y espacio de matrices</h4><p>Por otra parte, una <strong>matriz</strong> $m \times n$ con entradas en $F$ es un arreglo rectangular como el siguiente, y se denota con letras mayúsculas en cursiva ($A, B, C$, etc.):</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>La entrada en la fila $i$ y columna $j$ de una matriz $A$ se denota por $A_{ij}$ o $a_{ij}$.<li>Cada $a_{ij}$ ($1 \leq i \leq m$, $1 \leq j \leq n$) pertenece a $F$.<li>A la entrada $a_{ij}$ con $i=j$ se le llama <strong>entrada diagonal</strong> de la matriz.<li>Los elementos $a_{i1}, a_{i2}, \dots, a_{in}$ constituyen la <strong>fila</strong> $i$-ésima. Cada fila puede verse como un vector de $F^n$ y, más aún, un vector fila de $F^n$ puede verse como otra matriz $1 \times n$.<li>Los elementos $a_{1j}, a_{2j}, \dots, a_{mj}$ constituyen la <strong>columna</strong> $j$-ésima. Cada columna puede verse como un vector de $F^m$ y, más aún, un vector columna de $F^m$ puede verse como otra matriz $m \times 1$.<li>Una matriz $m \times n$ cuyas entradas son todas $0$ se llama <strong>matriz cero</strong> y se denota por $O$.<li>Una matriz con el mismo número de filas y columnas se llama <strong>matriz cuadrada</strong>.<li>Dadas dos matrices $m \times n$ $A, B$, si para todo $1 \leq i \leq m$, $1 \leq j \leq n$ se cumple $A_{ij} = B_{ij}$ (es decir, todas las entradas correspondientes coinciden), definimos que $A$ y $B$ son <strong>iguales</strong> ($A=B$).</ul><p>Denotamos por $\mathcal{M}_{m \times n}(F)$ el conjunto de todas las matrices $m \times n$ con entradas en el cuerpo $F$. Para $\mathbf{A},\mathbf{B} \in \mathcal{M}_{m \times n}(F)$ y $c \in F$, si definimos la suma y el producto por escalar como sigue, $\mathcal{M}_{m \times n}(F)$ es un espacio vectorial; lo llamamos <strong>espacio de matrices</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{(con }1 \leq i \leq &amp;m,\ 1 \leq j \leq n \text{)} \end{align*}\]<p>Es la extensión natural de las operaciones definidas en $F^n$ y $F^m$.</p><h3 id="espacio-de-funciones">Espacio de funciones</h3><p>Para un conjunto no vacío $S$ de un cuerpo $F$, $\mathcal{F}(S,F)$ es el conjunto de todas las funciones de $S$ en $F$. En $\mathcal{F}(S,F)$, dos funciones $f, g$ son <strong>iguales</strong> ($f=g$) si para todo $s \in S$ se cumple $f(s) = g(s)$.</p><p>Para $f,g \in \mathcal{F}(S,F)$, $c \in F$, $s \in S$, si definimos la suma y el producto por escalar como sigue, $\mathcal{F}(S,F)$ es un espacio vectorial; lo llamamos <strong>espacio de funciones</strong>.</p>\[\begin{align*} (f + g)(s) &amp;= f(s) + g(s), \\ (cf)(s) &amp;= c[f(s)] \end{align*}\]<h2 id="subespacios">Subespacios</h2><blockquote class="prompt-info"><p><strong>Definición</strong><br /> Un subconjunto $\mathbb{W}$ de un $F$-espacio vectorial $\mathbb{V}$ es un <strong>subespacio</strong> de $\mathbb{V}$ si, con las mismas operaciones de suma y multiplicación por escalar definidas en $\mathbb{V}$, $\mathbb{W}$ es también un $F$-espacio vectorial.</p></blockquote><p>Para todo espacio vectorial $\mathbb{V}$, $\mathbb{V}$ mismo y $\{0\}$ son subespacios; en particular, a $\{0\}$ se le llama <strong>subespacio cero</strong>.</p><p>Podemos verificar que un subconjunto es un subespacio usando el siguiente teorema.</p><blockquote class="prompt-info"><p><strong>Teorema 1</strong><br /> Dado un espacio vectorial $\mathbb{V}$ y un subconjunto $\mathbb{W}$, $\mathbb{W}$ es un subespacio de $\mathbb{V}$ si y solo si satisface las siguientes tres condiciones (con las operaciones heredadas de $\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 pocas palabras, si contiene el vector cero y es cerrado bajo <a href="/es/posts/vectors-and-linear-combinations/#combinación-lineal-de-vectores">combinación lineal</a> (esto es, si $\mathrm{span}(\mathbb{W})=\mathbb{W}$), entonces es un subespacio.</p></blockquote><p>Además, valen los siguientes resultados.</p><blockquote class="prompt-info"><p><strong>Teorema 2</strong></p><ul><li><p>Para cualquier subconjunto $S$ de un espacio vectorial $\mathbb{V}$, el subespacio generado $\mathrm{span}(S)$ es un subespacio de $\mathbb{V}$ que contiene a $S$.</p>\[S \subset \mathrm{span}(S) \leq \mathbb{V} \quad \forall\ S \subset \mathbb{V}.\]<li><p>Todo subespacio de $\mathbb{V}$ que contiene a $S$ contiene necesariamente al subespacio generado por $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>Teorema 3</strong><br /> Dado un conjunto de subespacios de un espacio vectorial $\mathbb{V}$, su intersección arbitraria es también un subespacio de $\mathbb{V}$.</p></blockquote><h3 id="matriz-traspuesta-simétrica-y-antisimétrica">Matriz traspuesta, simétrica y antisimétrica</h3><p>La <strong>matriz traspuesta</strong> $A^T$ de una matriz $m \times n$ $A$ es la matriz $n \times m$ obtenida intercambiando filas y columnas:</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>Una matriz $A$ con $A^T = A$ se llama <strong>matriz simétrica</strong>; una matriz $B$ con $B^T = -B$ se llama <strong>matriz antisimétrica</strong>. Ambas deben ser matrices cuadradas.</p><p>Sean $\mathbb{W}_1, \mathbb{W}_2$ los subconjuntos de $\mathcal{M}_{n \times n}(F)$ formados por todas las matrices simétricas y todas las antisimétricas, respectivamente. Entonces $\mathbb{W}_1$ y $\mathbb{W}_2$ son subespacios de $\mathcal{M}_{n \times n}(F)$; es decir, son cerrados bajo suma y producto por escalar.</p><h3 id="matrices-triangulares-y-diagonal">Matrices triangulares y diagonal</h3><p>Estos dos tipos de matrices son especialmente importantes.</p><p>Agrupamos los siguientes dos tipos bajo el nombre <strong>matrices triangulares</strong>:</p><ul><li><strong>Triangular superior</strong>: todas las entradas por debajo de la diagonal son $0$ (esto es, $i&gt;j \Rightarrow A_{ij}=0$), suele denotarse por $U$<li><strong>Triangular inferior</strong>: todas las entradas por encima de la diagonal son $0$ (esto es, $i&lt;j \Rightarrow A_{ij}=0$), suele denotarse por $L$</ul><p>Una <strong>matriz diagonal</strong> es una matriz cuadrada en la que todas las entradas fuera de la diagonal son $0$, es decir, una matriz $n \times n$ con $i \neq j \Rightarrow M_{ij}=0$, y suele denotarse por $D$. Una matriz diagonal es a la vez triangular superior e inferior.</p><p>El conjunto de matrices triangulares superiores, el de triangulares inferiores y el de diagonales son todos subespacios de $\mathcal{M}_{m \times n}(F)$.</p>]]> </content> </entry> <entry><title xml:lang="es">Producto interno y norma</title><link href="https://www.yunseo.kim/es/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/es/posts/inner-product-and-norm/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="es">Definimos el producto interno y el producto punto, y de ellos la norma de un vector y el ángulo entre vectores. Incluye Cauchy‑Schwarz y desigualdad triangular.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Definimos el producto interno y el producto punto, y de ellos la norma de un vector y el ángulo entre vectores. Incluye Cauchy‑Schwarz y desigualdad triangular.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="requisitos-previos">Requisitos previos</h2><ul><li><a href="/es/posts/vectors-and-linear-combinations/">Vectores y combinaciones lineales</a></ul><h2 id="producto-interno">Producto interno</h2><p>La definición de <strong>producto interno (inner product)</strong> en un espacio vectorial sobre un cuerpo $F$ es la siguiente.</p><blockquote class="prompt-info"><p><strong>Definición de producto interno (inner product) y espacio con producto interno (inner product space)</strong><br /> Consideremos un $F$-espacio vectorial $\mathbb{V}$. Un <strong>producto interno (inner product)</strong> $\langle \mathbf{x},\mathbf{y} \rangle$ en $\mathbb{V}$ es una aplicación que asocia a cada par ordenado de vectores $\mathbf{x}$ y $\mathbf{y}$ de $\mathbb{V}$ un escalar en $F$, y que satisface las condiciones siguientes.</p><p>Para cualesquiera $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$ y cualquier $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$ ($\overline{\mathbf{z}}$ es el conjugado complejo de $\mathbf{z}$)<li>Si $\mathbf{x} \neq \mathbf{0}$, entonces $\langle \mathbf{x}, \mathbf{x} \rangle$ es positivo.</ol><p>Un $F$-espacio vectorial $\mathbb{V}$ dotado de un producto interno se denomina <strong>espacio con producto interno (inner product space)</strong>. En particular, si $F=\mathbb{C}$ se llama <strong>espacio con producto interno complejo (complex inner product space)</strong>, y si $F=\mathbb{R}$, <strong>espacio con producto interno real (real inner product space)</strong>.</p></blockquote><p>En particular, el siguiente producto interno se denomina <strong>producto interno estándar (standard inner product)</strong>. Puede verificarse que cumple las cuatro condiciones anteriores.</p><blockquote class="prompt-info"><p><strong>Definición de producto interno estándar (standard inner product)</strong><br /> Para dos vectores de $F^n$, $\mathbf{x}=(a_1, a_2, \dots, a_n)$ y $\mathbf{y}=(b_1, b_2, \dots, b_n)$, el <strong>producto interno estándar (standard inner product)</strong> en $F^n$ se define por</p>\[\langle \mathbf{x}, \mathbf{y} \rangle = \sum_{i=1}^n a_i \overline{b_i}\]</blockquote><p>Si aquí $F=\mathbb{R}$, como el conjugado complejo de un número real es él mismo, el producto interno estándar se reduce a $\sum_{i=1}^n a_i b_i$. En este caso particular, se suele escribir $\langle \mathbf{x}, \mathbf{y} \rangle$ como $\mathbf{x} \cdot \mathbf{y}$ y se denomina <strong>producto punto (dot product)</strong> o <strong>producto escalar (scalar product)</strong>.</p><blockquote class="prompt-info"><p><strong>Definición de producto punto (dot product)/producto escalar (scalar product)</strong><br /> Para $\mathbf{v}=(v_1, v_2, \dots, v_n)$ y $\mathbf{w}=(w_1, w_2, \dots, w_n)$ en $\mathbb{R}^n$, el <strong>producto punto (dot product)</strong> o <strong>producto escalar (scalar product)</strong> en $\mathbb{R}^n$ se define por</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>El ‘producto escalar (<strong>scalar product</strong>)’ aquí mencionado es una operación entre vectores, distinta de la operación entre un escalar y un vector, la ‘multiplicación escalar (<strong>scalar multiplication</strong>)’, tratada en <a href="/es/posts/vectors-and-linear-combinations/">Vectores y combinaciones lineales</a>. Dado que en inglés las expresiones son parecidas y, según el estándar de la Sociedad Matemática de Corea, <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">las denominaciones en coreano son idénticas</a>, conviene evitar confusiones.</p><p>Para minimizar la ambigüedad, en lo sucesivo nos referiremos preferentemente a esta operación como <strong>producto punto (dot product)</strong>.</p></blockquote><blockquote class="prompt-tip"><p>En un espacio euclídeo, el producto interno coincide con el producto punto; por ello, cuando el contexto no induce a confusión, a menudo se usa simplemente “producto interno” para referirse al producto punto. No obstante, con rigor, el producto interno es un concepto más general que incluye al producto punto como caso particular.</p></blockquote><pre><code class="language-mermaid">flowchart TD
    A["Producto interno (Inner Product)"] --&gt;|incluye| B["Producto interno estándar (Standard Inner Product)"]
    B --&gt;|"F = R (cuerpo real)"| C["Producto punto/Producto escalar (Dot/Scalar Product)"]

    %% Notación de inclusión (relación de inclusión)
    C -. incluido en .-&gt; B
    B -. incluido en .-&gt; A
</code></pre><h2 id="longitudnorma-de-un-vector">Longitud/norma de un vector</h2><p>Para un vector $\mathbf{v}=(v_1, v_2, \dots, v_n)$ en $\mathbb{R}^n$, la longitud euclídea de $\mathbf{v}$ se define mediante el producto punto como sigue:</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>Más generalmente, en un espacio con producto interno, la <strong>longitud (length)</strong> o <strong>norma (norm)</strong> de un vector se define por</p>\[\| \mathbf{x} \| = \sqrt{\langle \mathbf{x}, \mathbf{x} \rangle}\]<p>En un espacio con producto interno general, la norma de los vectores satisface las siguientes propiedades fundamentales.</p><blockquote class="prompt-info"><p><strong>Teorema</strong><br /> Sea $\mathbb{V}$ un $F$-espacio con producto interno y sean $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ y $c \in F$. Entonces:</p><ol><li>$\|c\mathbf{x}\| = |c| \cdot \|\mathbf{x}\|$<li>Se cumplen ambas:<ul><li>$\|\mathbf{x}\| = 0 \iff \mathbf{x}=\mathbf{0}$<li>$\|\mathbf{x}\| \geq 0 \ \forall \mathbf{x}$</ul><li><strong>Desigualdad de Cauchy‑Schwarz (Cauchy-Schwarz inequality)</strong>: $| \langle \mathbf{x}, \mathbf{y} \rangle | \leq \|\mathbf{x}\| \cdot \|\mathbf{y}\|$ (hay igualdad si y solo si uno de $\mathbf{x}$, $\mathbf{y}$ es múltiplo escalar del otro)<li><strong>Desigualdad triangular (triangle inequality)</strong>: $\| \mathbf{x} + \mathbf{y} \| \leq \|\mathbf{x}\| + \|\mathbf{y}\|$ (hay igualdad si y solo si uno es múltiplo escalar del otro y apuntan en la misma dirección)</ol></blockquote><h2 id="ángulo-entre-vectores-y-vector-unitario">Ángulo entre vectores y vector unitario</h2><p>Un vector de longitud $1$ se denomina <strong>vector unitario (unit vector)</strong>. Además, para dos vectores $\mathbf{v}=(v_1, v_2, \dots, v_n)$ y $\mathbf{w}=(w_1, w_2, \dots, w_n)$ en $\mathbb{R}^n$ se cumple $\mathbf{v} \cdot \mathbf{w} = \|\mathbf{v}\| \cdot \|\mathbf{w}\| \cos\theta$, de donde se puede obtener el ángulo $\theta$ ($0 \leq \theta \leq \pi$) entre $\mathbf{v}$ y $\mathbf{w}$.</p>\[\theta = \arccos{\frac{\mathbf{v} \cdot \mathbf{w}}{\|\mathbf{v}\| \cdot \|\mathbf{w}\|}}\]<p>Si $\mathbf{v} \cdot \mathbf{w} = 0$, se dice que los dos vectores son <strong>perpendiculares (perpendicular)</strong> u <strong>ortogonales (orthogonal)</strong>.</p><blockquote class="prompt-tip"><p>Si dos vectores $\mathbf{v}$ y $\mathbf{w}$ son perpendiculares,</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>Generalizando a un espacio con producto interno arbitrario, tenemos lo siguiente.</p><blockquote class="prompt-info"><p><strong>Definición</strong><br /> Consideremos un espacio con producto interno $\mathbb{V}$. Para vectores $\mathbf{x}, \mathbf{y}$ en $\mathbb{V}$, si $\langle \mathbf{x}, \mathbf{y} \rangle = 0$, decimos que los dos vectores son <strong>ortogonales (orthogonal)</strong> o <strong>perpendiculares (perpendicular)</strong>. Además:</p><ol><li>Para un subconjunto $S$ de $\mathbb{V}$, si cualesquiera dos vectores distintos en $S$ son ortogonales, entonces $S$ es un <strong>conjunto ortogonal (orthogonal set)</strong>.<li>Un vector $\mathbf{x} \in \mathbb{V}$ con $\|\mathbf{x}\|=1$ se denomina <strong>vector unitario (unit vector)</strong>.<li>Si un subconjunto $S$ de $\mathbb{V}$ es ortogonal y está formado únicamente por vectores unitarios, entonces $S$ es un <strong>conjunto ortonormal (orthonormal set)</strong>.</ol></blockquote><p>Una condición necesaria y suficiente para que $S = { \mathbf{v}_1, \mathbf{v}_2, \dots }$ sea ortonormal es $\langle \mathbf{v}_i, \mathbf{v}_j \rangle = \delta_{ij}$. Multiplicar un vector por un escalar no nulo no afecta a la ortogonalidad.</p><p>Para cualquier vector no nulo $\mathbf{x}$, $\cfrac{\mathbf{x}}{\|\mathbf{x}\|}$ es un vector unitario; el proceso de multiplicar un vector no nulo por el inverso de su longitud para obtener un vector unitario se llama <strong>normalización (normalizing)</strong>.</p>]]> </content> </entry> <entry><title xml:lang="es">Vectores y combinaciones lineales</title><link href="https://www.yunseo.kim/es/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/es/posts/vectors-and-linear-combinations/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="es">Qué es un vector, cómo se representa y sus operaciones básicas (suma y multiplicación por un escalar); con ello entendemos la combinación lineal y el concepto de espacio generado (span) en álgebra lineal.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Qué es un vector, cómo se representa y sus operaciones básicas (suma y multiplicación por un escalar); con ello entendemos la combinación lineal y el concepto de espacio generado (span) en álgebra lineal.</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>Definición de vector</strong><ul><li><strong>Vector en sentido estricto (vector euclidiano)</strong>: magnitud física que tiene módulo y dirección<li><strong>Vector en sentido amplio, en álgebra lineal</strong>: elemento de un espacio vectorial</ul><li><strong>Formas de representación de vectores</strong><ul><li><strong>Representación con flechas</strong>: el módulo es la longitud de la flecha y la dirección es la de la flecha. Es visual e intuitiva, pero resulta problemática para vectores de dimensión ≥ 4 o no euclidianos.<li><strong>Representación por componentes</strong>: fijando el origen del vector en el origen del espacio de coordenadas, se expresa por las coordenadas de su extremo.</ul><li><strong>Operaciones básicas con vectores</strong><ul><li><strong>Suma</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>Multiplicación por un escalar</strong>: $c(a_1, a_2, \cdots, a_n) := (ca_1, ca_2, \cdots, ca_n)$</ul><li><strong>Combinación lineal de vectores</strong><ul><li>Dado un número finito de vectores $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ y escalares $a_1, a_2, \dots, a_n$, se llama <strong>combinación lineal</strong> de $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ a cualquier vector $\mathbf{v}$ tal que $\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n$.<li>En tal caso, a $a_1, a_2, \dots, a_n$ se les llama <strong>coeficientes</strong> de la combinación lineal.</ul><li><strong>Espacio generado</strong><ul><li>Para un subconjunto no vacío $S$ de un espacio vectorial $\mathbb{V}$, el conjunto de todas las combinaciones lineales formadas con vectores de $S$ se llama el <strong>espacio generado (span)</strong> de $S$ y se denota por $\mathrm{span}(S)$.<li>Se define $\mathrm{span}(\emptyset) = \{0\}$.<li>Para un subconjunto $S$ de un espacio vectorial $\mathbb{V}$, si $\mathrm{span}(S) = \mathbb{V}$, se dice que $S$ <strong>genera</strong> $\mathbb{V}$ (generate o span).</ul></ul></blockquote><h2 id="prerequisites">Prerequisites</h2><ul><li>Plano/espacio de coordenadas<li>Cuerpo</ul><h2 id="qué-es-un-vector">¿Qué es un vector?</h2><h3 id="sentido-estricto-vector-euclidiano">Sentido estricto: vector euclidiano</h3><blockquote class="prompt-info"><p>Muchas magnitudes físicas —fuerza, velocidad, aceleración— poseen no solo módulo sino también dirección. A una magnitud que tiene ambos se le llama <strong>vector</strong>.</p></blockquote><p>Esta es la definición de vector que se trata en mecánica y en matemáticas de nivel bachillerato. Un vector en este sentido, con el significado geométrico de “segmento orientado con módulo y dirección” basado en la intuición física, se denomina con propiedad <strong>vector euclidiano</strong>.</p><h3 id="sentido-amplio-elemento-de-un-espacio-vectorial">Sentido amplio: elemento de un espacio vectorial</h3><p>En álgebra lineal, más allá de los vectores euclidianos, se define el vector como una estructura algebraica más abstracta:</p><blockquote class="prompt-info"><p><strong>Definición</strong><br /> Un <strong>espacio vectorial</strong> o <strong>espacio lineal</strong> $\mathbb{V}$ sobre un cuerpo $F$ es un conjunto dotado de dos operaciones, <strong>suma</strong> y <strong>multiplicación por un escalar</strong>, que satisfacen las siguientes 8 condiciones. A los elementos de $F$ se les llama <strong>escalares</strong> y a los de $\mathbb{V}$, <strong>vectores</strong>.</p><ul><li><strong>Suma</strong>: para cualesquiera $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ existe un único $\mathbf{x} + \mathbf{y} \in \mathbb{V}$. A $\mathbf{x} + \mathbf{y}$ se le llama la <strong>suma</strong> de $\mathbf{x}$ y $\mathbf{y}$.<li><strong>Multiplicación por un escalar</strong>: para cada $a \in F$ y $\mathbf{x} \in \mathbb{V}$ existe un único $a\mathbf{x} \in \mathbb{V}$. A $a\mathbf{x}$ se le llama el <strong>escalado</strong> de $\mathbf{x}$ por $a$.</ul><ol><li>Para todo $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $\mathbf{x} + \mathbf{y} = \mathbf{y} + \mathbf{x}$. (conmutatividad de la suma)<li>Para todo $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$, $(\mathbf{x}+\mathbf{y})+\mathbf{z} = \mathbf{x}+(\mathbf{y}+\mathbf{z})$. (asociatividad de la suma)<li>Para todo $\mathbf{x} \in \mathbb{V}$, existe $\mathbf{0} \in \mathbb{V}$ tal que $\mathbf{x} + \mathbf{0} = \mathbf{x}$. (vector cero, elemento neutro de la suma)<li>Para cada $\mathbf{x} \in \mathbb{V}$, existe $\mathbf{y} \in \mathbb{V}$ tal que $\mathbf{x}+\mathbf{y}=\mathbf{0}$. (inverso aditivo)<li>Para cada $\mathbf{x} \in \mathbb{V}$, $1\mathbf{x} = \mathbf{x}$. (elemento neutro de la multiplicación)<li>Para todo $a,b \in F$ y todo $\mathbf{x} \in \mathbb{V}$, $(ab)\mathbf{x} = a(b\mathbf{x})$. (asociatividad de la multiplicación por escalar)<li>Para todo $a \in F$ y todos $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $a(\mathbf{x}+\mathbf{y}) = a\mathbf{x} + a\mathbf{y}$. (distributividad del escalar respecto de la suma 1)<li>Para todo $a,b \in F$ y todo $\mathbf{x} \in \mathbb{V}$, $(a+b)\mathbf{x} = a\mathbf{x} + b\mathbf{x}$. (distributividad del escalar respecto de la suma 2)</ol></blockquote><p>Esta definición en álgebra lineal abarca un ámbito más amplio que incluye al <a href="#sentido-estricto-vector-euclidiano">vector euclidiano</a>. También puede verificarse que un <a href="#sentido-estricto-vector-euclidiano">vector euclidiano</a> satisface las 8 propiedades anteriores.</p><p>El origen y desarrollo del concepto de vector están estrechamente ligados a problemas prácticos planteados por la física: describir cuantitativamente nociones como fuerza, movimiento, rotación y campos. La necesidad física de expresar fenómenos naturales de forma matemática llevó primero al concepto de <a href="#sentido-estricto-vector-euclidiano">vector euclidiano</a>; posteriormente, al generalizar y formalizar estas ideas, las matemáticas establecieron estructuras como espacios vectoriales, producto interno y producto vectorial, llegando a la definición actual de vector. En suma, el vector es un concepto demandado por la física y formalizado por las matemáticas; más que un producto de las matemáticas puras, es un fruto del intercambio entre la comunidad matemática y la física.</p><p>El <a href="#sentido-estricto-vector-euclidiano">vector euclidiano</a> tratado en la mecánica clásica puede expresarse dentro de un <a href="#sentido-amplio-elemento-de-un-espacio-vectorial">marco más general</a>; hoy en física se emplean activamente no solo vectores euclidianos, sino también espacios vectoriales, espacios de funciones y otros conceptos más abstractos definidos en matemáticas, dotándolos de significado físico. Por tanto, no es adecuado entender las dos definiciones de vector simplemente como “definición física” y “definición matemática”.</p><p>Pospondremos un estudio más profundo de los espacios vectoriales y nos centraremos primero en el vector en sentido estricto, el vector euclidiano, que puede representarse geométricamente en un espacio de coordenadas. Ver ejemplos intuitivos de vectores euclidianos ayuda luego a generalizar a otros tipos de vectores.</p><h2 id="representación-de-vectores">Representación de vectores</h2><h3 id="representación-con-flechas">Representación con flechas</h3><p>Es la forma más habitual y la que mejor aprovecha la intuición geométrica: el módulo del vector es la longitud de la flecha y su dirección es la de la flecha.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/9/95/Vector_from_A_to_B.svg" alt="Vector euclidiano de A a B" width="972" /></p><blockquote><p><em>Fuente de la imagen</em></p><ul><li>Autor: usuario de Wikipedia <a href="https://en.wikipedia.org/wiki/User:Nguyenthephuc">Nguyenthephuc</a><li>Licencia: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a></ul></blockquote><p>Aunque es intuitiva, esta representación con flechas tiene límites claros para vectores de dimensión 4 o superior. Además, más adelante habrá que tratar vectores no euclidianos que ni siquiera se pueden representar geométricamente, por lo que conviene familiarizarse con la representación por componentes que se expone a continuación.</p><h3 id="representación-por-componentes">Representación por componentes</h3><p>Independientemente de su ubicación, si dos vectores tienen el mismo módulo y dirección, se consideran iguales. Por tanto, dado un espacio de coordenadas, si fijamos el origen del vector en el origen del espacio, <u>un vector de dimensión $n$ corresponde a un punto cualquiera del espacio de dimensión $n$</u>, y así podemos expresar el vector por las coordenadas de su extremo. A esta forma se la llama <strong>representación por componentes</strong> del vector.</p>\[(a_1, a_2, \cdots, a_n) \in \mathbb{R}^n \text{ o } \mathbb{C}^n\]<p><img src="https://upload.wikimedia.org/wikipedia/commons/5/5d/Position_vector.svg" alt="Vector de posición" /></p><blockquote><p><em>Fuente de la imagen</em></p><ul><li>Autor: usuario de Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Acdx">Acdx</a><li>Licencia: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a></ul></blockquote><h2 id="operaciones-básicas-con-vectores">Operaciones básicas con vectores</h2><p>Las operaciones básicas son la <strong>suma</strong> y la <strong>multiplicación por un escalar</strong>. Toda operación con vectores puede expresarse como combinación de estas dos.</p><h3 id="suma-de-vectores">Suma de vectores</h3><p>La suma de dos vectores es de nuevo un vector, y sus componentes son la suma componente a componente de los vectores dados.</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="multiplicación-por-un-escalar">Multiplicación por un escalar</h3><p>Un vector puede escalarse (ampliarse o reducirse) multiplicándolo por un número (escalar). El resultado equivale a multiplicar cada componente por dicho escalar.</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="Multiplicación por un escalar de vectores" /></p><blockquote><p><em>Fuente de la imagen</em></p><ul><li>Autor: usuario de Wikipedia <a href="https://en.wikipedia.org/wiki/User:Silly_rabbit">Silly rabbit</a><li>Licencia: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a></ul></blockquote><h2 id="combinación-lineal-de-vectores">Combinación lineal de vectores</h2><p>Así como el cálculo diferencial parte de los números $x$ y las funciones $f(x)$, el álgebra lineal parte de vectores $\mathbf{v}, \mathbf{w}, \dots$ y de combinaciones lineales $c\mathbf{v} + d\mathbf{w} + \cdots$. Toda combinación lineal de vectores se compone de las dos operaciones básicas: <a href="#suma-de-vectores">suma</a> y <a href="#multiplicación-por-un-escalar">multiplicación por un escalar</a>.</p><blockquote class="prompt-info"><p>Dados un número finito de vectores $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ y escalares $a_1, a_2, \dots, a_n$, cualquier vector $\mathbf{v}$ que satisfaga</p>\[\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n\]<p>se llama <strong>combinación lineal</strong> de $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$. En este caso, a $a_1, a_2, \dots, a_n$ se les llama <strong>coeficientes</strong> de la combinación lineal.</p></blockquote><p>¿Por qué son importantes las combinaciones lineales? Considera la situación en la que <strong>$n$ vectores en un espacio de dimensión $m$ constituyen las $n$ columnas de una matriz $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>Las claves aquí son dos:</p><ol><li><strong>Describe todas las combinaciones lineales posibles $Ax = x_1\mathbf{v}_1 + x_2\mathbf{v}_2 + \cdots + x_n\mathbf{v}_n$.</strong> ¿Qué conjunto forman?<li>Dado un vector objetivo $b$, <strong>encuentra $x_1, x_2, \dots, x_n$ tales que $Ax = b$.</strong></ol><p>Responderemos a la segunda pregunta más adelante; por ahora centrémonos en la primera. Para simplificar, consideremos el caso de dos vectores en 2 dimensiones ($m=2$, $n=2$) distintos de $\mathbf{0}$.</p><h3 id="combinación-lineal-cmathbfv--dmathbfw">Combinación lineal $c\mathbf{v} + d\mathbf{w}$</h3><p>En el plano, un vector $\mathbf{v}$ tiene dos componentes. Para cualquier escalar $c$, <u>el conjunto de vectores $c\mathbf{v}$ forma una recta infinita en el plano $xy$, que pasa por el origen y es paralela a $\mathbf{v}$.</u></p><p>Si un segundo vector $\mathbf{w}$ no está sobre esa recta (es decir, si $\mathbf{v}$ y $\mathbf{w}$ no son paralelos), entonces los vectores $d\mathbf{w}$ forman otra recta. Al combinar ambas rectas, vemos que <strong>la combinación lineal $c\mathbf{v} + d\mathbf{w}$ barre un plano que contiene al origen</strong>.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/6/6f/Linjcomb.png" alt="Combinaciones lineales de dos vectores" /></p><blockquote><p><em>Fuente de la imagen</em></p><ul><li>Autor: usuario de Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Svjo">Svjo</a><li>Licencia: <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">CC BY-SA 4.0</a></ul></blockquote><h3 id="generación">Generación</h3><p>Así, las combinaciones lineales de vectores generan un espacio vectorial; a esto se le llama <strong>generación (span)</strong>.</p><blockquote class="prompt-info"><p><strong>Definición</strong><br /> Para un subconjunto no vacío $S$ de un espacio vectorial $\mathbb{V}$, el conjunto de todas las combinaciones lineales formadas con vectores de $S$ se llama el <strong>espacio generado (span)</strong> de $S$ y se denota por $\mathrm{span}(S)$. Se define $\mathrm{span}(\emptyset) = \{0\}$.</p></blockquote><blockquote class="prompt-info"><p><strong>Definición</strong><br /> Para un subconjunto $S$ de un espacio vectorial $\mathbb{V}$, si $\mathrm{span}(S) = \mathbb{V}$, se dice que $S$ <strong>genera</strong> $\mathbb{V}$ (generate o span).</p></blockquote><p>Aún no hemos visto conceptos como subespacio y base, pero este ejemplo te ayudará a entender el concepto de espacio vectorial.</p>]]> </content> </entry> <entry><title xml:lang="es">Resumen del curso 'Pandas' de Kaggle (2) - Lecciones 4–6</title><link href="https://www.yunseo.kim/es/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/es/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="es">Resumen práctico de pandas para limpiar y transformar datos. Sintetiza y amplía el curso abierto de Kaggle; esta segunda parte cubre las lecciones 4–6.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Resumen práctico de pandas para limpiar y transformar datos. Sintetiza y amplía el curso abierto de Kaggle; esta segunda parte cubre las lecciones 4–6.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><p>Recojo aquí lo estudiado a través del curso de <a href="https://www.kaggle.com/learn/pandas">Pandas</a> de Kaggle.<br /> Como la extensión es considerable, lo separé en 2 partes.</p><ul><li><a href="/es/posts/summary-of-kaggle-pandas-course-1/">Parte 1: Lecciones 1–3</a><li>Parte 2: Lecciones 4–6 (este artículo)</ul><p><img src="/assets/img/kaggle-pandas/certificate.png" alt="Certificado de finalización" /></p><h2 id="lección-4-agrupar-y-ordenar">Lección 4. Agrupar y ordenar</h2><p>A veces necesitamos clasificar los datos, aplicar operaciones por grupo o reordenarlos según un criterio.</p><h3 id="análisis-por-grupos">Análisis por grupos</h3><p>Con el método <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html"><code class="language-plaintext highlighter-rouge">groupby()</code></a> puedes agrupar las filas cuyo valor en una columna sea igual y, después, obtener resúmenes u operar por grupo.</p><p>Antes vimos el <a href="/es/posts/summary-of-kaggle-pandas-course-1/#vision-general-de-los-datos">método <code class="language-plaintext highlighter-rouge">value_counts()</code></a>; lo mismo puede implementarse con <code class="language-plaintext highlighter-rouge">groupby()</code> así:</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>Agrupa el DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> por filas con el mismo valor en la columna <code class="language-plaintext highlighter-rouge">taster_name</code><li>Devuelve como Series el tamaño de cada grupo (número de filas incluidas)</ol><p>O 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>Agrupa el DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> por filas con el mismo valor en la columna <code class="language-plaintext highlighter-rouge">taster_name</code><li>En cada grupo, selecciona la columna <code class="language-plaintext highlighter-rouge">taster_name</code><li>Devuelve como Series el número de valores no nulos</ol><p>Es decir, <code class="language-plaintext highlighter-rouge">value_counts()</code> es un atajo de operaciones como las anteriores. Además de <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.count.html"><code class="language-plaintext highlighter-rouge">count()</code></a>, puedes usar cualquier función de resumen de forma análoga. Por ejemplo, para ver el precio mínimo por puntuación:</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>Agrupa <code class="language-plaintext highlighter-rouge">reviews</code> por valores iguales en la columna <code class="language-plaintext highlighter-rouge">points</code><li>Selecciona la columna <code class="language-plaintext highlighter-rouge">price</code> en cada grupo<li>Devuelve como Series el mínimo de cada grupo</ol><p>También puedes agrupar por más de una columna. Para seleccionar, por país y provincia, el vino con la puntuación máxima:</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>Otro método útil de los objetos DataFrameGroupBy es <a href="https://pandas.pydata.org/docs/reference/api/pandas.core.groupby.DataFrameGroupBy.agg.html"><code class="language-plaintext highlighter-rouge">agg()</code></a>. Permite ejecutar múltiples funciones a la vez sobre cada grupo.</p><blockquote class="prompt-tip"><p>Como argumento puedes pasar:</p><ul><li>una función<li>una cadena con el nombre de una función<li>una lista de funciones o de nombres de función<li>un diccionario que mapea etiquetas de ejes a función o lista de funciones a aplicar sobre ese eje</ul><p>Y dichas funciones deben:</p><ul><li>aceptar un DataFrame como entrada, o<li>ser válidas como argumento de <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="/es/posts/summary-of-kaggle-pandas-course-1/#mapeos-maps">visto antes</a>.</ul><p>Esta aclaración no aparece en el curso original de Kaggle; la he ampliado consultando la documentación oficial de pandas.</p></blockquote><p>Por ejemplo, para obtener estadísticas de precio por país:</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>Aquí <code class="language-plaintext highlighter-rouge">len</code> es la función incorporada de Python <a href="https://docs.python.org/3/library/functions.html#len"><code class="language-plaintext highlighter-rouge">len()</code></a>. En este ejemplo la usamos para imprimir el número de datos de precio (<code class="language-plaintext highlighter-rouge">price</code>) por cada grupo (<code class="language-plaintext highlighter-rouge">country</code>), <u>incluyendo valores nulos</u>. Como acepta DataFrame o Series como entrada, puede usarse así.</p><p>El método <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.count.html"><code class="language-plaintext highlighter-rouge">count()</code></a> de pandas, en cambio, devuelve <u>solo el número de valores no nulos</u>, por lo que su comportamiento difiere.</p><p>Esta aclaración no aparece en el curso original de Kaggle; la he ampliado consultando la documentación oficial de Python y pandas.</p></blockquote><h3 id="índice-múltiple">Índice múltiple</h3><p>Al agrupar y analizar con <code class="language-plaintext highlighter-rouge">groupby()</code>, a veces obtendrás un DataFrame con índice de múltiples niveles en lugar de etiquetas simples.</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>El índice múltiple añade métodos para tratar jerarquías que no existen en el índice simple. Puedes ver ejemplos y pautas en la sección MultiIndex / advanced indexing de la <a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html">guía de usuario de pandas</a>.</p><p>El método que más usarás probablemente será <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.reset_index.html"><code class="language-plaintext highlighter-rouge">reset_index()</code></a> para volver a un índice normal:</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="ordenación">Ordenación</h3><p>Si observas <code class="language-plaintext highlighter-rouge">countries_reviewed</code>, verás que el resultado del agrupado vuelve ordenado por el valor del índice. Es decir, las filas del resultado de <code class="language-plaintext highlighter-rouge">groupby</code> se ordenan por los valores del índice, no por el contenido.</p><p>Puedes ordenar manualmente según convenga con <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html"><code class="language-plaintext highlighter-rouge">sort_values()</code></a>. Por ejemplo, para ordenar país y provincia por el número de filas (‘len’) en orden ascendente:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span> <span class="o">=</span> <span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">reset_index</span><span class="p">()</span>
<span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="sh">'</span><span class="s">len</span><span class="sh">'</span><span class="p">)</span>
</pre></div></div><table><thead><tr><th> <th>country<th>province<th>len<tbody><tr><td>179<td>Greece<td>Muscat of Kefallonian<td>1<tr><td>192<td>Greece<td>Sterea Ellada<td>1<tr><td>…<td>…<td>…<td>…<tr><td>415<td>US<td>Washington<td>8639<tr><td>392<td>US<td>California<td>36247</table><p><code class="language-plaintext highlighter-rouge">sort_values()</code> ordena de forma ascendente por defecto; con la opción siguiente puedes ordenar en descendente:</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>Para ordenar por índice, usa <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_index.html"><code class="language-plaintext highlighter-rouge">sort_index()</code></a>. Tiene los mismos argumentos y el mismo orden por defecto (descendente) que <code class="language-plaintext highlighter-rouge">sort_values()</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">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>Por último, puedes ordenar por varias columnas a la vez:</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="lección-5-tipos-de-datos-y-valores-faltantes">Lección 5. Tipos de datos y valores faltantes</h2><p>En la práctica, los datos rara vez vienen perfectamente limpios; a menudo hay que convertir tipos o tratar valores ausentes. En la preparación y el análisis, esta fase suele ser el mayor escollo.</p><h3 id="tipos-de-datos">Tipos de datos</h3><p>El tipo de una columna de un DataFrame o de una Series se llama <strong>dtype</strong>. Con el atributo <code class="language-plaintext highlighter-rouge">dtype</code> puedes ver el tipo de una columna. Por ejemplo, para ver el <code class="language-plaintext highlighter-rouge">dtype</code> de <code class="language-plaintext highlighter-rouge">price</code> en <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>Con el atributo <code class="language-plaintext highlighter-rouge">dtypes</code> ves todos los tipos de las columnas a la vez:</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>El tipo indica cómo almacena internamente pandas los datos. Por ejemplo, <code class="language-plaintext highlighter-rouge">float64</code> es coma flotante de 64 bits; <code class="language-plaintext highlighter-rouge">int64</code>, entero de 64 bits.</p><p>Un detalle: las columnas de cadenas no tienen tipo propio; se consideran objetos (<code class="language-plaintext highlighter-rouge">object</code>).</p><p>Con <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.astype.html"><code class="language-plaintext highlighter-rouge">astype()</code></a> puedes convertir una columna de un tipo a otro. Por ejemplo, convertir <code class="language-plaintext highlighter-rouge">points</code> (antes <code class="language-plaintext highlighter-rouge">int64</code>) a <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>El índice de un DataFrame o de una Series también tiene tipo:</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>Además, pandas soporta otros tipos como categórico o series temporales.</p><h3 id="valores-faltantes">Valores faltantes</h3><p>Las entradas vacías o sin valor reciben <code class="language-plaintext highlighter-rouge">NaN</code> (de “Not a Number”). Por razones técnicas, <code class="language-plaintext highlighter-rouge">NaN</code> es siempre de tipo <code class="language-plaintext highlighter-rouge">float64</code>.</p><p>Pandas ofrece funciones específicas para tratar valores faltantes. <a href="/es/posts/summary-of-kaggle-pandas-course-1/#seleccion-condicional">Ya vimos algo parecido</a>: además de métodos, existen las funciones independientes <a href="https://pandas.pydata.org/docs/reference/api/pandas.isna.html"><code class="language-plaintext highlighter-rouge">pd.isna</code></a> y <a href="https://pandas.pydata.org/docs/reference/api/pandas.notna.html"><code class="language-plaintext highlighter-rouge">pd.notna</code></a>. Indican con booleanos si una entrada es (o no) faltante, y se pueden usar así:</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>A menudo conviene detectar valores faltantes y rellenarlos adecuadamente. Con <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.fillna.html"><code class="language-plaintext highlighter-rouge">fillna()</code></a> puedes reemplazarlos por un valor conveniente. Por ejemplo, para sustituir todos los <code class="language-plaintext highlighter-rouge">NaN</code> de <code class="language-plaintext highlighter-rouge">region_2</code> por <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>También puedes usar las estrategias forward fill y backward fill, que rellenan con el valor válido más cercano anterior o posterior, con <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.ffill.html"><code class="language-plaintext highlighter-rouge">ffill()</code></a> y <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.bfill.html"><code class="language-plaintext highlighter-rouge">bfill()</code></a>, respectivamente.</p><blockquote class="prompt-danger"><p>Antes podía usarse <code class="language-plaintext highlighter-rouge">fillna()</code> con el argumento <code class="language-plaintext highlighter-rouge">method='ffill'</code> o <code class="language-plaintext highlighter-rouge">'bfill'</code>, pero desde pandas 2.1.0 ese uso está en desuso (deprecated). Se recomienda usar <code class="language-plaintext highlighter-rouge">ffill()</code> o <code class="language-plaintext highlighter-rouge">bfill()</code> según corresponda.</p></blockquote><p>A veces, aunque no haya faltantes, hay que reemplazar sistemáticamente unos valores por otros. En el curso original de Kaggle se da el ejemplo de cambiar el handle de Twitter de un revisor; buen ejemplo, pero para un caso más cercano: supongamos que Corea del Sur crea una nueva división administrativa al norte de Gyeonggi, <strong>경기북도</strong>, y tenemos un dataset con ese nombre oficial. Ahora imaginemos que alguien propone, y logra imponer, renombrarlo como <strong>평화누리특별자치도</strong>. <del>Es hipotético, pero daba miedo que algo parecido pudiera ocurrir de verdad.</del> Para reflejarlo en el dataset habría que cambiar <code class="language-plaintext highlighter-rouge">"Gyeonggibuk-do"</code> por <code class="language-plaintext highlighter-rouge">"Pyeonghwanuri State"</code> o <code class="language-plaintext highlighter-rouge">"Pyeonghwanuri Special Self-Governing Province"</code>. Una forma de hacerlo en pandas es con <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>Con este código, en la columna <code class="language-plaintext highlighter-rouge">province</code> de <code class="language-plaintext highlighter-rouge">rok_2030_census</code> todas las instancias de <code class="language-plaintext highlighter-rouge">"Gyeonggibuk-do"</code> se reemplazan eficazmente por ‘el nombre largo’. <del>Alivia saber que nadie tuvo que ejecutar este cambio en la vida real.</del></p><p>Estos reemplazos de texto también son útiles al limpiar datos y tratar faltantes, ya que a menudo los valores ausentes aparecen como cadenas como <code class="language-plaintext highlighter-rouge">"Unknown"</code>, <code class="language-plaintext highlighter-rouge">"Undisclosed"</code> o <code class="language-plaintext highlighter-rouge">"Invalid"</code> en lugar de <code class="language-plaintext highlighter-rouge">NaN</code>. En datasets generados con OCR de documentación antigua, esto es incluso lo más habitual.</p><h2 id="lección-6-renombrar-y-combinar">Lección 6. Renombrar y combinar</h2><p>A veces hay que cambiar nombres de columnas o del índice, y a menudo hay que combinar varios DataFrames o Series.</p><h3 id="cambiar-nombres">Cambiar nombres</h3><p>Con <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rename.html"><code class="language-plaintext highlighter-rouge">rename()</code></a> puedes renombrar columnas o índices. Acepta varios formatos de entrada, pero lo más cómodo suele ser un diccionario de Python. Por ejemplo, para cambiar la columna <code class="language-plaintext highlighter-rouge">points</code> a <code class="language-plaintext highlighter-rouge">score</code> y renombrar los índices <code class="language-plaintext highlighter-rouge">0</code>, <code class="language-plaintext highlighter-rouge">1</code> a <code class="language-plaintext highlighter-rouge">firstEntry</code>, <code class="language-plaintext highlighter-rouge">secondEntry</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="sh">'</span><span class="s">points</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">score</span><span class="sh">'</span><span class="p">})</span>
</pre></div></div><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">rename</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="sh">'</span><span class="s">firstEntry</span><span class="sh">'</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="sh">'</span><span class="s">secondEntry</span><span class="sh">'</span><span class="p">})</span>
</pre></div></div><p>En realidad, es más común renombrar columnas que valores del índice; y para lo segundo suele ser más práctico usar <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="/es/posts/summary-of-kaggle-pandas-course-1/#manipular-el-indice">como vimos antes</a>.</p><p>Las etiquetas del eje de filas y el de columnas tienen su propia propiedad <code class="language-plaintext highlighter-rouge">name</code>, y con <code class="language-plaintext highlighter-rouge">rename_axis()</code> puedes renombrar estos ejes. Por ejemplo, nombrar el eje de filas como <code class="language-plaintext highlighter-rouge">wines</code> y el de columnas como <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="combinar-datasets">Combinar datasets</h3><p>A veces hay que unir DataFrames entre sí, o Series entre sí. Para ello, pandas ofrece tres funciones clave, de más simple a más compleja: <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> y <a href="https://pandas.pydata.org/docs/reference/api/pandas.merge.html"><code class="language-plaintext highlighter-rouge">merge()</code></a>. El curso de Kaggle señala que la mayoría de cosas que haces con <code class="language-plaintext highlighter-rouge">merge()</code> pueden hacerse de forma más sencilla con <code class="language-plaintext highlighter-rouge">join()</code>, por lo que se centra en las dos primeras.</p><p><code class="language-plaintext highlighter-rouge">concat()</code> es la más simple: concatena varios DataFrames o Series a lo largo de un eje. Es útil cuando los objetos a unir comparten los mismos campos (columnas). Por defecto concatena a lo largo del eje de filas; con <code class="language-plaintext highlighter-rouge">axis=1</code> o <code class="language-plaintext highlighter-rouge">axis='columns'</code> lo hace por columnas.</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>Según la <a href="https://pandas.pydata.org/docs/reference/api/pandas.concat.html">documentación oficial de pandas</a>, si tienes que unir muchas filas en un solo DataFrame, no es recomendable añadirlas una a una dentro de un bucle; es mejor construir una lista con todas y concatenarlas de una sola vez con <code class="language-plaintext highlighter-rouge">concat()</code>.</p></blockquote><p><code class="language-plaintext highlighter-rouge">join()</code> es algo más complejo: añade a un DataFrame otro DataFrame alineando por el índice. Si hay nombres de columnas duplicados, especifica sufijos con <code class="language-plaintext highlighter-rouge">lsuffix</code> y <code class="language-plaintext highlighter-rouge">rsuffix</code> para distinguirlas.</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="es">Métricas de rendimiento web (Web Vitals)</title><link href="https://www.yunseo.kim/es/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/es/posts/about-web-vitals/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Web Dev" /> <summary xml:lang="es">Resumen de las Web Vitals y de los criterios de medición y evaluación de Lighthouse, con explicación de qué significa cada métrica y cómo optimizarlas para mejorar el rendimiento y el SEO.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Resumen de las Web Vitals y de los criterios de medición y evaluación de Lighthouse, con explicación de qué significa cada métrica y cómo optimizarlas para mejorar el rendimiento y el SEO.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="factores-que-determinan-el-rendimiento-web">Factores que determinan el rendimiento web</h2><p>Al optimizar el rendimiento web, los factores que lo determinan pueden agruparse en dos grandes categorías: rendimiento de carga y rendimiento de renderizado.</p><h3 id="rendimiento-de-carga-de-html">Rendimiento de carga de HTML</h3><ul><li>Tiempo desde la primera solicitud de la página al servidor a través de la red hasta que el navegador comienza a renderizar el documento HTML<li>Determina cuán rápido comienza a mostrarse la página<li>Se optimiza minimizando redirecciones, cacheando la respuesta HTML, comprimiendo recursos y utilizando adecuadamente una CDN</ul><h3 id="rendimiento-de-renderizado">Rendimiento de renderizado</h3><ul><li>Tiempo que tarda el navegador en dibujar lo que ve el usuario y hacerlo interactivo<li>Determina cuán suave y rápido se dibuja la pantalla<li>Se optimiza eliminando CSS y JS innecesarios, evitando la carga diferida de fuentes y miniaturas, separando operaciones pesadas en un Web Worker para minimizar la ocupación del hilo principal, y optimizando animaciones</ul><h2 id="métricas-de-rendimiento-web-web-vitals">Métricas de rendimiento web (Web Vitals)</h2><p>Se describe con base en <a href="https://web.dev/performance?hl=es">web.dev de Google</a> y la <a href="https://developer.chrome.com/docs/lighthouse/performance/performance-scoring?hl=es">documentación para desarrolladores de Chrome</a>. Salvo que haya un motivo específico, es mejor apuntar a una mejora global que centrarse únicamente en una métrica, e identificar qué partes de la página actúan como cuellos de botella. Si se dispone de datos de usuarios reales, conviene fijarse en el cuartil inferior (Q1) más que en la media o el cuartil superior, y comprobar que incluso en esos casos se cumplen los objetivos y se realizan mejoras.</p><h3 id="métricas-esenciales-de-la-web-core-web-vitals">Métricas esenciales de la web (Core Web Vitals)</h3><p>Como veremos enseguida, existen varias Web Vitals. Entre ellas, Google considera especialmente importantes tres que se relacionan estrechamente con la experiencia de usuario y que se pueden medir en condiciones reales (no solo de laboratorio); a estas se las denomina <a href="https://web.dev/articles/vitals?hl=es#core-web-vitals">métricas esenciales de la web (Core Web Vitals)</a>. Google también incorpora estas métricas en el orden de resultados de su buscador, por lo que, desde la perspectiva del SEO, los administradores de sitios deben prestarles especial atención.</p><ul><li><a href="#lcp-pintura-con-contenido-más-grande">Pintura con contenido más grande (LCP)</a>: refleja el rendimiento de carga; debe ser ≤ 2,5 s<li><a href="https://web.dev/articles/inp?hl=es">Interacción hasta la siguiente pintura (INP)</a>: refleja la capacidad de respuesta; debe ser ≤ 200 ms<li><a href="#cls-cambio-de-diseño-acumulado">Cambio de diseño acumulado (CLS)</a>: refleja la estabilidad visual; debe mantenerse ≤ 0,1</ul><p>Aunque las Core Web Vitals están pensadas para medirse en el entorno real, dos de ellas (excepto INP) pueden medirse también en entornos de laboratorio como DevTools de Chrome o Lighthouse. INP requiere una entrada real del usuario y no puede medirse en laboratorio; en ese caso, <a href="#tbt-tiempo-total-de-bloqueo">TBT</a> es una métrica muy correlacionada y similar, y puede usarse como referencia; <a href="https://web.dev/articles/vitals?hl=es#lab_tools_to_measure_core_web_vitals">normalmente, al mejorar TBT también mejora INP</a>.</p><h3 id="ponderación-de-la-puntuación-de-rendimiento-en-lighthouse-10">Ponderación de la puntuación de rendimiento en Lighthouse 10</h3><p><a href="https://developer.chrome.com/docs/lighthouse/performance/performance-scoring?hl=es">La puntuación de rendimiento de Lighthouse es un promedio ponderado de las métricas medidas, con los siguientes pesos</a>.</p><table><thead><tr><th>Métrica<th>Peso<tbody><tr><td><a href="#fcp-primera-pintura-con-contenido">Primera pintura con contenido</a><td>10%<tr><td><a href="#si-índice-de-velocidad">Índice de velocidad</a><td>10%<tr><td><a href="#lcp-pintura-con-contenido-más-grande">Pintura con contenido más grande</a><td>25%<tr><td><a href="#tbt-tiempo-total-de-bloqueo">Tiempo total de bloqueo</a><td>30%<tr><td><a href="#cls-cambio-de-diseño-acumulado">Cambio de diseño acumulado</a><td>25%</table><h3 id="fcp-primera-pintura-con-contenido">FCP (Primera pintura con contenido)</h3><ul><li>Mide el tiempo que tarda en renderizarse el primer contenido del DOM tras solicitar la página<li>Considera como contenido del DOM imágenes dentro de la página, elementos <code class="language-plaintext highlighter-rouge">&lt;canvas&gt;</code> no blancos, SVG, etc.; no considera el contenido dentro de <code class="language-plaintext highlighter-rouge">iframe</code></ul><blockquote class="prompt-tip"><p>Uno de los factores que más influyen en FCP es el tiempo de carga de las fuentes; la <a href="https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/?hl=es">documentación para desarrolladores de Chrome</a> recomienda consultar esta <a href="https://developer.chrome.com/docs/lighthouse/performance/font-display?hl=es">entrada relacionada</a> sobre su optimización.</p></blockquote><h4 id="criterios-de-evaluación-de-lighthouse">Criterios de evaluación de Lighthouse</h4><p>Según la <a href="https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/?hl=es">documentación para desarrolladores de Chrome</a>, los criterios de Lighthouse son los siguientes.</p><table><thead><tr><th>Categoría por color<th>FCP en móvil (s)<th>FCP en escritorio (s)<tbody><tr><td>Verde (rápido)<td>0-1.8<td>0-0.9<tr><td>Naranja (medio)<td>1.8-3<td>0.9-1.6<tr><td>Rojo (lento)<td>&gt; 3<td>&gt; 1.6</table><h3 id="lcp-pintura-con-contenido-más-grande">LCP (Pintura con contenido más grande)</h3><ul><li>Mide el tiempo que tarda en renderizarse el elemento más grande (imagen, bloque de texto, video, etc.) dentro del área visible inicial (viewport) al abrir por primera vez la página<li>Cuanto mayor es el área que ocupa en pantalla, mayor es la probabilidad de que el usuario lo perciba como contenido principal<li>Si el LCP es una imagen, el tiempo puede dividirse en cuatro subintervalos; es importante identificar dónde se produce el cuello de botella:<ol><li>Time to first byte (TTFB): tiempo desde el inicio de la carga de la página hasta la recepción del primer byte de la respuesta del documento HTML<li>Retraso de carga (Load delay): diferencia entre el momento en que el navegador comienza a cargar el recurso LCP y el TTFB<li>Tiempo de carga (Load time): tiempo que tarda en cargarse el propio recurso LCP<li>Retraso de renderizado (Render delay): tiempo desde que finaliza la carga del recurso LCP hasta que el elemento LCP termina de renderizarse por completo</ol></ul><h4 id="criterios-de-evaluación-de-lighthouse-1">Criterios de evaluación de Lighthouse</h4><p>Según la <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/?hl=es">documentación para desarrolladores de Chrome</a>, los criterios de Lighthouse son los siguientes.</p><table><thead><tr><th>Categoría por color<th>LCP en móvil (s)<th>LCP en escritorio (s)<tbody><tr><td>Verde (rápido)<td>0-2.5<td>0-1.2<tr><td>Naranja (medio)<td>2.5-4<td>1.2-2.4<tr><td>Rojo (lento)<td>&gt; 4<td>&gt; 2.4</table><h3 id="tbt-tiempo-total-de-bloqueo">TBT (Tiempo total de bloqueo)</h3><ul><li>Mide el tiempo total durante el cual la página no puede responder a entradas del usuario como clics, toques o teclas<li>Entre FCP y <a href="https://developer.chrome.com/docs/lighthouse/performance/interactive?hl=es">TTI (Time to Interactive, inicio de la interactividad)</a>, las tareas que duran 50 ms o más se consideran <a href="https://web.dev/articles/long-tasks-devtools?hl=es">tareas largas</a>. De cada tarea larga se resta 50 ms; la parte excedente se denomina <em>parte de bloqueo (blocking portion)</em> y TBT se define como la suma de todas esas partes de bloqueo</ul><blockquote class="prompt-info"><p>TTI, por sí misma, es demasiado sensible a valores atípicos de red y a tareas largas, lo que reduce su consistencia y aumenta su variabilidad; por ello, <a href="https://developer.chrome.com/blog/lighthouse-10-0#scoring-changes">desde Lighthouse 10 se ha excluido de las métricas de puntuación</a>.</p></blockquote><blockquote class="prompt-tip"><p>La causa más común de tareas largas suele ser la carga, el parseo y la ejecución de JavaScript innecesario o ineficiente. La <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/?hl=es">documentación para desarrolladores de Chrome</a> y <a href="https://web.dev/articles/long-tasks-devtools#what_is_causing_my_long_tasks?hl=es">web.dev de Google</a> recomiendan aplicar <a href="https://web.dev/articles/reduce-javascript-payloads-with-code-splitting?hl=es">code splitting</a> para reducir el payload de JavaScript de forma que cada parte se ejecute en ≤ 50 ms, y, si es necesario, separar trabajo fuera del hilo principal usando un Service Worker para ejecutarlo en multihilo.</p></blockquote><h4 id="criterios-de-evaluación-de-lighthouse-2">Criterios de evaluación de Lighthouse</h4><p>Según la <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/?hl=es">documentación para desarrolladores de Chrome</a>, los criterios de Lighthouse son los siguientes.</p><table><thead><tr><th>Categoría por color<th>TBT en móvil (ms)<th>TBT en escritorio (ms)<tbody><tr><td>Verde (rápido)<td>0-200<td>0-150<tr><td>Naranja (medio)<td>200-600<td>150-350<tr><td>Rojo (lento)<td>&gt; 600<td>&gt; 350</table><h3 id="cls-cambio-de-diseño-acumulado">CLS (Cambio de diseño acumulado)</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>Ejemplo de cambio de diseño repentino</em></p><blockquote><p>Fuente del video: <a href="https://web.dev/articles/cls?hl=es">Cumulative Layout Shift (CLS) | Articles | web.dev</a></p></blockquote><p><del>Se percibe una profunda ira en el movimiento del cursor</del></p><ul><li>Los cambios de diseño inesperados perjudican la experiencia del usuario de múltiples maneras: el texto puede moverse de repente y hacerte perder la línea de lectura, o puedes hacer clic por error en un enlace o botón<li>El método exacto de cálculo del CLS está descrito en <a href="https://web.dev/articles/cls">web.dev de Google</a><li>Como se ve en la imagen inferior, conviene apuntar a ≤ 0.1</ul><p><img src="https://web.dev/static/articles/cls/image/good-cls-values.svg" alt="¿Cuál es una buena puntuación de CLS?" width="640" height="480" /></p><blockquote><p>Fuente de la imagen: <a href="https://web.dev/articles/cls#what-is-a-good-cls-score?hl=es">Cumulative Layout Shift (CLS) | Articles | web.dev</a></p></blockquote><h3 id="si-índice-de-velocidad">SI (Índice de velocidad)</h3><ul><li>Mide cuán rápido se muestra visualmente el contenido durante la carga de la página<li>Lighthouse graba en video el proceso de carga en el navegador, analiza el video para calcular el progreso entre frames y usa el <a href="https://github.com/paulirish/speedline">módulo Speedline de Node.js</a> para calcular la puntuación de SI</ul><blockquote class="prompt-tip"><p>Además de lo mencionado en <a href="#fcp-primera-pintura-con-contenido">FCP</a>, <a href="#lcp-pintura-con-contenido-más-grande">LCP</a> y <a href="#tbt-tiempo-total-de-bloqueo">TBT</a>, cualquier medida que mejore la velocidad de carga de la página también repercute positivamente en el SI. Más que representar una sola fase del proceso, esta métrica refleja el avance visual a lo largo de la carga completa.</p></blockquote><h4 id="criterios-de-evaluación-de-lighthouse-3">Criterios de evaluación de Lighthouse</h4><p>Según la <a href="https://developer.chrome.com/docs/lighthouse/performance/speed-index/?hl=es">documentación para desarrolladores de Chrome</a>, los criterios de Lighthouse son los siguientes.</p><table><thead><tr><th>Categoría por color<th>SI en móvil (s)<th>SI en escritorio (s)<tbody><tr><td>Verde (rápido)<td>0-3.4<td>0-1.3<tr><td>Naranja (medio)<td>3.4-5.8<td>1.3-2.3<tr><td>Rojo (lento)<td>&gt; 5.8<td>&gt; 2.3</table>]]> </content> </entry> <entry><title xml:lang="es">Campo gravitacional y potencial gravitacional</title><link href="https://www.yunseo.kim/es/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/es/posts/gravitational-field-and-potential/</id> <author> <name>Yunseo Kim</name> </author> <category term="Physics" /> <category term="Classical Dynamics" /> <summary xml:lang="es">Aprende la definición del vector de campo gravitacional y el potencial gravitacional según la ley de gravitación universal de Newton, y examina dos ejemplos importantes relacionados: el teorema de la cáscara esférica y las curvas de rotación galáctica.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Aprende la definición del vector de campo gravitacional y el potencial gravitacional según la ley de gravitación universal de Newton, y examina dos ejemplos importantes relacionados: el teorema de la cáscara esférica y las curvas de rotación galáctica.</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>Ley de gravitación universal de Newton: $\mathbf{F} = -G\cfrac{mM}{r^2}\mathbf{e}_r$<li>Para objetos con distribución continua de masa y tamaño: $\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}})$: densidad de masa en el punto ubicado en el vector de posición $\mathbf{r^{\prime}}$ desde un origen arbitrario<li>$dv^{\prime}$: elemento de volumen en el punto ubicado en el vector de posición $\mathbf{r^{\prime}}$ desde un origen arbitrario</ul><li><strong>Vector de campo gravitacional</strong>:<ul><li>Vector que representa la fuerza por unidad de masa que experimenta una partícula en el campo creado por un objeto de masa $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>Tiene dimensiones de <em>fuerza por unidad de masa</em> o <em>aceleración</em></ul><li><strong>Potencial gravitacional</strong>:<ul><li>$\mathbf{g} \equiv -\nabla \Phi$<li>Tiene dimensiones de (<em>fuerza por unidad de masa</em>) $\times$ (<em>distancia</em>) o <em>energía por unidad de masa</em><li>$\Phi = -G\cfrac{M}{r}$<li>Solo las diferencias relativas del potencial gravitacional tienen significado, no valores específicos<li>Usualmente se establece la condición $\Phi \to 0$ cuando $r \to \infty$ para eliminar la ambigüedad<li>$U = m\Phi, \quad \mathbf{F} = -\nabla U$</ul><li><strong>Potencial gravitacional dentro y fuera de una cáscara esférica (teorema de la cáscara)</strong><ul><li>Cuando $R&gt;a$:<ul><li>$\Phi(R&gt;a) = -\cfrac{GM}{R}$<li>Al calcular el potencial gravitacional en un punto externo debido a una distribución esféricamente simétrica de materia, se puede considerar el objeto como una masa puntual</ul><li>Cuando $R&lt;b$:<ul><li>$\Phi(R&lt;b) = -2\pi\rho G(a^2 - b^2)$<li>Dentro de una cáscara de masa esféricamente simétrica, el potencial gravitacional es constante independientemente de la posición, y la gravedad actuante es $0$</ul><li>Cuando $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="campo-gravitacional">Campo gravitacional</h2><h3 id="ley-de-gravitación-universal-de-newton">Ley de gravitación universal de Newton</h3><p>Newton ya había sistematizado y verificado numéricamente la ley de gravitación universal antes del año 11666 HE. Sin embargo, tardó 20 años más en publicar sus resultados en su obra <em>Principia</em> en 11687 HE, porque no podía justificar el método de cálculo que asumía la Tierra y la Luna como masas puntuales sin tamaño. Afortunadamente, usando el cálculo que el propio Newton inventó posteriormente, podemos demostrar mucho más fácilmente ese problema que no fue sencillo para Newton en los años 1600.</p><p>Según la ley de gravitación universal de Newton, <em>cada partícula de masa atrae a todas las demás partículas del universo con una fuerza que es proporcional al producto de las dos masas e inversamente proporcional al cuadrado de la distancia entre ellas.</em> Matemáticamente se expresa como:</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>Fuente de la imagen</em></p><ul><li>Autor: Usuario de Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Dna-webmaster">Dennis Nilsson</a><li>Licencia: <a href="https://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a></ul></blockquote><p>El vector unitario $\mathbf{e}_r$ apunta desde $M$ hacia $m$, y el signo negativo indica que la fuerza es atractiva. Es decir, $m$ es atraída hacia $M$.</p><h3 id="experimento-de-cavendish">Experimento de Cavendish</h3><p>La verificación experimental de esta ley y la determinación del valor de $G$ fue realizada por el físico británico Henry Cavendish en 11798 HE. El experimento de Cavendish utilizó una balanza de torsión compuesta por dos pequeñas esferas fijadas en los extremos de una barra ligera. Cada una de estas esferas es atraída hacia otras dos esferas grandes ubicadas cerca de ellas. El valor oficial de $G$ determinado hasta ahora es $6.673 \pm 0.010 \times 10^{-11} \mathrm{N\cdot m^2/kg^2}$.</p><blockquote class="prompt-tip"><p>Aunque $G$ es una de las constantes fundamentales conocidas desde hace más tiempo, se conoce con menor precisión que la mayoría de las otras constantes fundamentales como $e$, $c$, $\hbar$. Incluso hoy en día se realizan muchas investigaciones para determinar el valor de $G$ con mayor precisión.</p></blockquote><h3 id="caso-de-objetos-con-tamaño">Caso de objetos con tamaño</h3><p>La ley de la ecuación ($\ref{eqn:law_of_gravitation}$) se aplica estrictamente solo a <em>partículas puntuales</em>. Si uno o ambos objetos tienen cierto tamaño, se debe hacer la suposición adicional de que el campo gravitacional es un <em>campo lineal</em> para calcular la fuerza. Es decir, se asume que la fuerza gravitacional total que recibe una partícula de masa $m$ de varias otras partículas se puede obtener sumando vectorialmente cada fuerza. Para objetos con distribución continua de materia, la suma se reemplaza por una integral:</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}})$: densidad de masa en el punto ubicado en el vector de posición $\mathbf{r^{\prime}}$ desde un origen arbitrario<li>$dv^{\prime}$: elemento de volumen en el punto ubicado en el vector de posición $\mathbf{r^{\prime}}$ desde un origen arbitrario</ul><p>Si tanto el objeto de masa $M$ como el objeto de masa $m$ tienen tamaño, se necesita una segunda integral de volumen sobre $m$ para obtener la fuerza gravitacional total.</p><h3 id="vector-de-campo-gravitacional">Vector de campo gravitacional</h3><p>El <strong>vector de campo gravitacional</strong> $\mathbf{g}$ se define como el vector que representa la fuerza por unidad de masa que experimenta una partícula en el campo creado por un objeto de masa $M$:</p>\[\mathbf{g} = \frac{\mathbf{F}}{m} = - G \frac{M}{r^2}\mathbf{e}_r \label{eqn:g_vector}\tag{3}\]<p>o</p>\[\boxed{\mathbf{g} = - G \int_V \frac{\rho(\mathbf{r^\prime})\mathbf{e}_r}{r^2}dv^\prime} \tag{4}\]<p>Aquí, la dirección de $\mathbf{e}_r$ varía según $\mathbf{r^\prime}$.</p><p>Esta cantidad $\mathbf{g}$ tiene dimensiones de <em>fuerza por unidad de masa</em> o <em>aceleración</em>. La magnitud del vector de campo gravitacional $\mathbf{g}$ cerca de la superficie terrestre es igual a la cantidad que llamamos <strong>constante de aceleración gravitacional</strong>, donde $|\mathbf{g}| \approx 9.80\mathrm{m/s^2}$.</p><h2 id="potencial-gravitacional">Potencial gravitacional</h2><h3 id="definición">Definición</h3><p>El vector de campo gravitacional $\mathbf{g}$ varía como $1/r^2$, por lo que satisface la condición ($\nabla \times \mathbf{g} \equiv 0$) para ser expresado como el gradiente de alguna función escalar (potencial). Por lo tanto, podemos escribir:</p>\[\mathbf{g} \equiv -\nabla \Phi \label{eqn:gradient_phi}\tag{5}\]<p>donde $\Phi$ se llama <strong>potencial gravitacional</strong> y tiene dimensiones de (<em>fuerza por unidad de masa</em>) $\times$ (<em>distancia</em>) o <em>energía por unidad de masa</em>.</p><p>Como $\mathbf{g}$ depende solo del radio, $\Phi$ también varía con $r$. De las ecuaciones ($\ref{eqn:g_vector}$) y ($\ref{eqn:gradient_phi}$):</p>\[\nabla\Phi = \frac{d\Phi}{dr}\mathbf{e}_r = G\frac{M}{r^2}\mathbf{e}_r\]<p>Integrando esto obtenemos:</p>\[\boxed{\Phi = -G\frac{M}{r}} \label{eqn:g_potential}\tag{6}\]<p>Como solo las diferencias relativas del potencial gravitacional tienen significado y no la magnitud de los valores absolutos, podemos omitir la constante de integración. Usualmente se establece arbitrariamente la condición $\Phi \to 0$ cuando $r \to \infty$ para eliminar la ambigüedad, y la ecuación ($\ref{eqn:g_potential}$) también satisface esta condición.</p><p>Para distribuciones continuas de materia, el potencial gravitacional es:</p>\[\Phi = -G\int_V \frac{\rho(\mathbf{r\prime})}{r}dv^\prime \label{eqn:g_potential_v}\tag{7}\]<p>Para distribuciones superficiales de masa en cáscara delgada:</p>\[\Phi = -G\int_S \frac{\rho_s}{r}da^\prime. \label{eqn:g_potential_s}\tag{8}\]<p>Y para fuentes de masa lineales con densidad lineal $\rho_l$:</p>\[\Phi = -G\int_\Gamma \frac{\rho_l}{r}ds^\prime. \label{eqn:g_potential_l}\tag{9}\]<h3 id="significado-físico">Significado físico</h3><p>Consideremos el trabajo por unidad de masa $dW^\prime$ que realiza un objeto cuando se mueve una distancia $d\mathbf{r}$ en un campo gravitacional.</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>En esta ecuación, $\Phi$ es función solo de las coordenadas de posición, expresada como $\Phi=\Phi(x_1, x_2, x_3) = \Phi(x_i)$. Por lo tanto, el trabajo por unidad de masa que realiza un objeto al moverse de un punto a otro en un campo gravitacional es igual a la diferencia de potencial entre esos dos puntos.</p><p>Si definimos el potencial gravitacional en el infinito como $0$, entonces $\Phi$ en cualquier punto puede interpretarse como el trabajo por unidad de masa necesario para mover el objeto desde el infinito hasta ese punto. La energía potencial del objeto es igual al producto de su masa y el potencial gravitacional $\Phi$, por lo que si $U$ es la energía potencial:</p>\[U = m\Phi. \label{eqn:potential_e}\tag{11}\]<p>Por lo tanto, la fuerza gravitacional que actúa sobre el objeto se obtiene aplicando el signo negativo al gradiente de su energía potencial.</p>\[\mathbf{F} = -\nabla U \label{eqn:force_and_potential}\tag{12}\]<p>Cuando un objeto está en un campo gravitacional creado por alguna masa, siempre existe cierta energía potencial. Esta energía potencial está estrictamente en el campo mismo, pero convencionalmente se expresa como la energía potencial del objeto.</p><h2 id="ejemplo-potencial-gravitacional-dentro-y-fuera-de-una-cáscara-esférica-teorema-de-la-cáscara">Ejemplo: Potencial gravitacional dentro y fuera de una cáscara esférica (teorema de la cáscara)</h2><h3 id="configuración-de-coordenadas-y-expresión-del-potencial-gravitacional-como-integral">Configuración de coordenadas y expresión del potencial gravitacional como integral</h3><p>Calculemos el potencial gravitacional dentro y fuera de una cáscara esférica uniforme con radio interno $b$ y radio externo $a$. Aunque la gravedad debida a la cáscara esférica también se puede obtener calculando directamente las componentes de fuerza que actúan sobre la masa unitaria en el campo, es más simple usar el método del potencial.</p><p><img src="/assets/img/gravitational-field-and-potential/spherical-shell.png" alt="Spherical shell" /></p><p>En la figura anterior, calculemos el potencial en el punto $P$ a distancia $R$ del centro. Asumiendo distribución uniforme de masa en la cáscara, $\rho(r^\prime)=\rho$, y por simetría respecto al ángulo azimutal $\phi$ alrededor de la línea que conecta el centro de la esfera con el punto $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>Según la ley de cosenos:</p>\[r^2 = {r^\prime}^2 + R^2 - 2r^\prime R \cos\theta \label{eqn:law_of_cosines}\tag{14}\]<p>Como $R$ es constante, diferenciando esta ecuación respecto a $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>Sustituyendo esto en la ecuación ($\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>Aquí, $r_\mathrm{max}$ y $r_\mathrm{min}$ se determinan según la posición del punto $P$.</p><h3 id="cuando-ra">Cuando $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 masa $M$ de la cáscara esférica es:</p>\[M = \frac{4}{3}\pi\rho(a^3 - b^3) \label{eqn:mass_of_shell}\tag{18}\]<p>Por lo tanto, el potencial es:</p>\[\boxed{\Phi(R&gt;a) = -\frac{GM}{R}} \label{eqn:spherical_shell_outside_2}\tag{19}\]<blockquote class="prompt-info"><p>Comparando la ecuación del potencial gravitacional debido a una masa puntual de masa $M$ ($\ref{eqn:g_potential}$) con el resultado que acabamos de obtener ($\ref{eqn:spherical_shell_outside_2}$), vemos que son idénticos. Esto significa que al calcular el potencial gravitacional en un punto externo debido a una distribución esféricamente simétrica de materia, se puede considerar que toda la masa está concentrada en el centro. La mayoría de los cuerpos celestes esféricos de cierto tamaño como la Tierra o la Luna corresponden a este caso, ya que pueden considerarse como infinitas cáscaras esféricas concéntricas de diferentes diámetros superpuestas como <a href="https://en.wikipedia.org/wiki/Matryoshka_doll">muñecas rusas</a>. Esto proporciona la <a href="#ley-de-gravitación-universal-de-newton">justificación para asumir cuerpos celestes como la Tierra o la Luna como masas puntuales sin tamaño</a> mencionada al principio de este artículo.</p></blockquote><h3 id="cuando-rb">Cuando $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>Dentro de una cáscara de masa esféricamente simétrica, el potencial gravitacional es constante independientemente de la posición, y la gravedad actuante es $0$.</p></blockquote><blockquote class="prompt-tip"><p>Esto también es una de las principales evidencias de que la ‘teoría de la Tierra hueca’, una de las pseudociencias representativas, es absurda. Si la Tierra fuera una cáscara esférica con el interior vacío como afirma la teoría de la Tierra hueca, la gravedad terrestre no actuaría sobre ningún objeto dentro de esa cavidad. Considerando la masa y volumen de la Tierra, no puede haber una cavidad terrestre, y aunque la hubiera, las formas de vida allí no vivirían usando el interior de la cáscara esférica como suelo, sino que flotarían en estado de ingravidez como en una estación espacial.<br /> <a href="https://youtu.be/VD6xJq8NguY?si=szgtuLkuk6rPJag3">Aunque pueden existir microorganismos en capas profundas del subsuelo a varios kilómetros bajo tierra</a>, al menos no es posible de la forma que afirma la teoría de la Tierra hueca. Aunque me gusta mucho la novela de Julio Verne “Viaje al centro de la Tierra” y la película “Viaje al centro de la Tierra”, las obras de ficción deben disfrutarse como ficción, no creerse seriamente.</p></blockquote><h3 id="cuando-bra">Cuando $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="resultados">Resultados</h3><p>Los potenciales gravitacionales $\Phi$ en las tres regiones calculadas anteriormente, y la magnitud correspondiente del vector de campo gravitacional $|\mathbf{g}|$ como función de la distancia $R$ se muestran gráficamente a continuación.</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>Código de visualización en Python: <a href="https://github.com/yunseo-kim/physics-visualizations/blob/main/src/shell_theorem.py">repositorio yunseo-kim/physics-visualizations</a><li>Licencia: <a href="https://github.com/yunseo-kim/physics-visualizations?tab=readme-ov-file#license">Ver aquí</a></ul></blockquote><p>Se puede ver que tanto el potencial gravitacional como la magnitud del vector de campo gravitacional son continuos. Si el potencial gravitacional fuera discontinuo en algún punto, el gradiente del potencial en ese punto, es decir, la magnitud de la gravedad, se volvería infinita, lo cual no es físicamente válido, por lo que la función potencial debe ser continua en todos los puntos. Sin embargo, la <em>derivada</em> del vector de campo gravitacional es discontinua en las superficies interna y externa de la cáscara.</p><h2 id="ejemplo-curvas-de-rotación-galáctica">Ejemplo: Curvas de rotación galáctica</h2><p>Según observaciones astronómicas, en muchas galaxias espirales que rotan alrededor de su centro, como la Vía Láctea o la galaxia de Andrómeda, la mayoría de las masas observables se concentran cerca del centro. Sin embargo, las velocidades orbitales de las masas en estas galaxias espirales difieren significativamente de los valores predichos teóricamente a partir de la distribución de masa observable, como se puede confirmar en el siguiente gráfico, y son casi constantes más allá de cierta distancia.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/b/b9/GalacticRotation2.svg" alt="Galactic Rotation" width="972" /></p><blockquote><p><em>Fuente de la imagen</em></p><ul><li>Autor: Usuario de Wikipedia <a href="https://en.wikipedia.org/wiki/User:PhilHibbs">PhilHibbs</a><li>Licencia: Dominio Público</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>Izquierda: rotación galáctica predicha a partir de la masa observable | Derecha: rotación galáctica observada.</em></p><blockquote><p><em>Fuente del video</em></p><ul><li>Enlace al archivo original (vídeo 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>Autor: <a href="https://beltoforion.de/en/index.php">Ingo Berg</a><li>Licencia: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a><li>Método de simulación y código utilizados: <a href="https://beltoforion.de/en/spiral_galaxy_renderer/">https://beltoforion.de/en/spiral_galaxy_renderer/</a></ul></blockquote><blockquote class="prompt-danger"><p>La imagen <code class="language-plaintext highlighter-rouge">Rotation curve of spiral galaxy Messier 33 (Triangulum).png</code>, previamente insertada en esta página, <a href="https://commons.wikimedia.org/wiki/Commons:Deletion_requests/File:Rotation_curve_of_spiral_galaxy_Messier_33_(Triangulum).png">fue eliminada de Wikimedia Commons</a> por haberse determinado que era una obra derivada plagiada por el usuario de Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Accrama">Mario De Leo</a> de una obra no libre del <a href="https://markwhittle.uvacreate.virginia.edu/">profesor Mark Whittle de la Universidad de Virginia</a>, sin la citación adecuada; por lo tanto, también se ha eliminado de esta página.</p></blockquote><p>Predijamos la velocidad orbital según la distancia cuando la masa de la galaxia está concentrada en el centro, confirmemos que esta predicción no coincide con los resultados observacionales, y demostremos que la masa $M(R)$ distribuida dentro de la distancia $R$ desde el centro galáctico debe ser proporcional a $R$ para explicar los resultados observacionales.</p><p>Primero, si la masa galáctica $M$ está concentrada en el centro, la velocidad orbital a distancia $R$ es:</p>\[\frac{GMm}{R^2} = \frac{mv^2}{R}\] \[v = \sqrt{\frac{GM}{R}} \propto \frac{1}{\sqrt{R}}.\]<p>En este caso se predice una velocidad orbital que decrece como $1/\sqrt{R}$, como se muestra en las líneas punteadas de los dos gráficos anteriores, pero según los resultados observacionales, la velocidad orbital $v$ es casi constante independientemente de la distancia $R$, por lo que la predicción y los resultados observacionales no coinciden. Estos resultados observacionales solo pueden explicarse si $M(R)\propto R$.</p><p>Si escribimos $M(R) = kR$ usando la constante de proporcionalidad $k$:</p>\[v = \sqrt{\frac{GM(R)}{R}} = \sqrt{Gk}\ \text{(constante)}.\]<p>A partir de esto, los astrofísicos concluyen que debe haber ‘materia oscura’ no descubierta en muchas galaxias, y que esta materia oscura debe constituir más del 90% de la masa del universo. Sin embargo, la identidad de la materia oscura aún no se ha esclarecido claramente, y aunque no es la teoría principal, también existen intentos como la Dinámica Newtoniana Modificada (MOND) que trata de explicar los resultados observacionales sin asumir la existencia de materia oscura. Hoy en día, estos campos de investigación están en la vanguardia de la astrofísica.</p>]]> </content> </entry> <entry><title xml:lang="es">Método de coeficientes indeterminados</title><link href="https://www.yunseo.kim/es/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/es/posts/method-of-undetermined-coefficients/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="es">Exploremos el método de coeficientes indeterminados, una técnica de resolución útil y frecuentemente utilizada en ingeniería para sistemas oscilatorios, modelos de circuitos RLC eléctricos, etc., que permite resolver de manera simple problemas de valor inicial para EDOs lineales no homogéneas de coeficientes constantes con formas específicas.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Exploremos el método de coeficientes indeterminados, una técnica de resolución útil y frecuentemente utilizada en ingeniería para sistemas oscilatorios, modelos de circuitos RLC eléctricos, etc., que permite resolver de manera simple problemas de valor inicial para EDOs lineales no homogéneas de coeficientes constantes con formas específicas.</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>Aplicación del método de coeficientes indeterminados</strong>:<ul><li><strong>Coeficientes constantes $a$ y $b$</strong> y<li>Entrada $r(x)$ compuesta por funciones exponenciales, potencias de $x$, $\cos$ o $\sin$, o sumas y productos de tales funciones<li>Ecuación diferencial ordinaria lineal $y^{\prime\prime} + ay^{\prime} + by = r(x)$</ul><li><strong>Reglas de selección para el método de coeficientes indeterminados</strong><ul><li><strong>(a) Regla básica</strong>: Si $r(x)$ en la ecuación ($\ref{eqn:linear_ode_with_constant_coefficients}$) es una de las funciones en la primera columna de la tabla, selecciona $y_p$ de la misma fila y determina los coeficientes indeterminados sustituyendo $y_p$ y sus derivadas en la ecuación ($\ref{eqn:linear_ode_with_constant_coefficients}$).<li><strong>(b) Regla de modificación</strong>: Si el término seleccionado para $y_p$ resulta ser una solución de la ecuación diferencial homogénea $y^{\prime\prime} + ay^{\prime} + by = 0$ correspondiente a la ecuación ($\ref{eqn:linear_ode_with_constant_coefficients}$), multiplica este término por $x$ (o por $x^2$ si esta solución corresponde a una raíz doble de la ecuación característica de la ecuación diferencial homogénea).<li><strong>(c) Regla de suma</strong>: Si $r(x)$ es una suma de funciones en la primera columna de la tabla, selecciona como $y_p$ la suma de las funciones correspondientes en la segunda columna.</ul></ul><table><thead><tr><th style="text-align: left">Término de $r(x)$<th style="text-align: left">Selección para $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="prerrequisitos">Prerrequisitos</h2><ul><li><a href="/es/posts/homogeneous-linear-odes-of-second-order/">EDOs Lineales Homogéneas de Segundo Orden</a><li><a href="/es/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs lineales homogéneas de segundo orden con coeficientes constantes</a><li><a href="/es/posts/euler-cauchy-equation/">Ecuación de Euler-Cauchy</a><li><a href="/es/posts/wronskian-existence-and-uniqueness-of-solutions/">Wronskiano, existencia y unicidad de soluciones</a><li><a href="/es/posts/nonhomogeneous-linear-odes-of-second-order/">EDOs Lineales No Homogéneas de Segundo Orden</a><li>Espacios vectoriales, generación lineal (álgebra lineal)</ul><h2 id="método-de-coeficientes-indeterminados">Método de coeficientes indeterminados</h2><p>Consideremos la ecuación diferencial ordinaria lineal no homogénea de segundo orden</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x) \label{eqn:nonhomogeneous_linear_ode}\tag{1}\]<p>donde $r(x) \not\equiv 0$, y la ecuación diferencial homogénea correspondiente</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode}\tag{2}\]<p>Como vimos anteriormente en <a href="/es/posts/nonhomogeneous-linear-odes-of-second-order/">EDOs Lineales No Homogéneas de Segundo Orden</a>, para resolver el problema de valor inicial de la ecuación diferencial lineal no homogénea ($\ref{eqn:nonhomogeneous_linear_ode}$), necesitamos resolver la ecuación diferencial homogénea ($\ref{eqn:homogeneous_linear_ode}$) para obtener $y_h$, luego encontrar una solución particular $y_p$ de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) para obtener la solución general</p>\[y(x) = y_h(x) + y_p(x) \label{eqn:general_sol}\tag{3}\]<p>Entonces, ¿cómo podemos encontrar $y_p$? El método general para encontrar $y_p$ es el <strong>método de variación de parámetros</strong>, pero en ciertos casos se puede aplicar el <strong>método de coeficientes indeterminados</strong>, que es mucho más simple. Especialmente, es un método frecuentemente utilizado en ingeniería ya que se puede aplicar a sistemas oscilatorios y modelos de circuitos RLC eléctricos.</p><p>El método de coeficientes indeterminados es adecuado para ecuaciones diferenciales lineales con <strong>coeficientes constantes $a$ y $b$</strong>, donde la entrada $r(x)$ está compuesta por funciones exponenciales, potencias de $x$, $\cos$ o $\sin$, o sumas y productos de tales funciones</p>\[y^{\prime\prime} + ay^{\prime} + by = r(x) \label{eqn:linear_ode_with_constant_coefficients}\tag{4}\]<p>La clave del método de coeficientes indeterminados es que tales formas de $r(x)$ tienen derivadas de forma similar a sí mismas. Para aplicar el método de coeficientes indeterminados, seleccionamos $y_p$ de forma similar a $r(x)$ pero con coeficientes desconocidos que se determinan sustituyendo $y_p$ y sus derivadas en la ecuación diferencial dada. Las reglas para seleccionar $y_p$ apropiado para formas de $r(x)$ prácticamente importantes en ingeniería son las siguientes.</p><blockquote class="prompt-info"><p><strong>Reglas de selección para el método de coeficientes indeterminados</strong><br /> <strong>(a) Regla básica</strong>: Si $r(x)$ en la ecuación ($\ref{eqn:linear_ode_with_constant_coefficients}$) es una de las funciones en la primera columna de la tabla, selecciona $y_p$ de la misma fila y determina los coeficientes indeterminados sustituyendo $y_p$ y sus derivadas en la ecuación ($\ref{eqn:linear_ode_with_constant_coefficients}$).<br /> <strong>(b) Regla de modificación</strong>: Si el término seleccionado para $y_p$ resulta ser una solución de la ecuación diferencial homogénea $y^{\prime\prime} + ay^{\prime} + by = 0$ correspondiente a la ecuación ($\ref{eqn:linear_ode_with_constant_coefficients}$), multiplica este término por $x$ (o por $x^2$ si esta solución corresponde a una raíz doble de la ecuación característica de la ecuación diferencial homogénea).<br /> <strong>(c) Regla de suma</strong>: Si $r(x)$ es una suma de funciones en la primera columna de la tabla, selecciona como $y_p$ la suma de las funciones correspondientes en la segunda columna.</p><table><thead><tr><th style="text-align: left">Término de $r(x)$<th style="text-align: left">Selección para $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>Este método no solo es conveniente sino que también tiene la ventaja de ser autocorrectivo. Si seleccionamos $y_p$ incorrectamente o seleccionamos muy pocos términos, llegaremos a una contradicción, y si seleccionamos demasiados términos, los coeficientes de los términos innecesarios se vuelven $0$ y obtenemos el resultado correcto. Incluso si algo sale mal al aplicar el método de coeficientes indeterminados, nos daremos cuenta naturalmente durante el proceso de resolución, por lo que si seleccionamos un $y_p$ razonablemente apropiado según las reglas de selección anteriores, podemos intentarlo sin preocupación.</p><h3 id="demostración-de-la-regla-de-suma">Demostración de la regla de suma</h3><p>Consideremos la ecuación diferencial lineal no homogénea</p>\[y^{\prime\prime} + ay^{\prime} + by = r_1(x) + r_2(x)\]<p>donde $r(x) = r_1(x) + r_2(x)$. Ahora supongamos que las siguientes dos ecuaciones con el mismo lado izquierdo pero con entradas $r_1$ y $r_2$ respectivamente</p>\[\begin{gather*} y^{\prime\prime} + ay^{\prime} + by = r_1(x) \\ y^{\prime\prime} + ay^{\prime} + by = r_2(x) \end{gather*}\]<p>tienen ${y_p}_1$ y ${y_p}_2$ como soluciones respectivamente. Si denotamos el lado izquierdo de la ecuación dada como $L[y]$, entonces por la linealidad de $L[y]$, para $y_p = {y_p}_1 + {y_p}_2$ se cumple lo siguiente, por lo que la regla de suma es válida.</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="ejemplo-yprimeprime--ayprime--by--kegamma-x">Ejemplo: $y^{\prime\prime} + ay^{\prime} + by = ke^{\gamma x}$</h2><p>Según la regla básica (a), ponemos $y_p = Ce^{\gamma x}$ y lo sustituimos en la ecuación dada $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="caso-donde-gamma2--agamma--b-neq-0">Caso donde $\gamma^2 + a\gamma + b \neq 0$</h3><p>Podemos determinar el coeficiente indeterminado $C$ y obtener $y_p$ como sigue:</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="caso-donde-gamma2--agamma--b--0">Caso donde $\gamma^2 + a\gamma + b = 0$</h3><p>En este caso debemos aplicar la regla de modificación (b). Primero, usando $b = -\gamma^2 - a\gamma = -\gamma(a + \gamma)$, encontremos las raíces de la ecuación característica de la ecuación diferencial homogénea $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>De esto obtenemos la base de la ecuación diferencial homogénea</p>\[y_1 = e^{\gamma x}, \quad y_2 = e^{(-a - \gamma)x}\]<h4 id="caso-donde-gamma-neq--a-gamma">Caso donde $\gamma \neq -a-\gamma$</h4><p>Como $Ce^{\gamma x}$ que seleccionamos para $y_p$ es una solución de la ecuación diferencial homogénea correspondiente a la ecuación dada pero no es una raíz doble, según la regla de modificación (b) multiplicamos este término por $x$ y ponemos $y_p = Cxe^{\gamma x}$.</p><p>Ahora sustituyendo el $y_p$ modificado en la ecuación dada $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="caso-donde-gamma---a-gamma">Caso donde $\gamma = -a-\gamma$</h4><p>En este caso, $Ce^{\gamma x}$ que seleccionamos para $y_p$ es una raíz doble de la ecuación diferencial homogénea correspondiente a la ecuación dada, por lo que según la regla de modificación (b) multiplicamos este término por $x^2$ y ponemos $y_p = Cx^2 e^{\gamma x}$.</p><p>Ahora sustituyendo el $y_p$ modificado en la ecuación dada $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="extensión-del-método-de-coeficientes-indeterminados-rx-en-forma-de-productos-de-funciones">Extensión del método de coeficientes indeterminados: $r(x)$ en forma de productos de funciones</h2><p>Consideremos la ecuación diferencial lineal no homogénea</p>\[y^{\prime\prime} + ay^{\prime} + by = C x^n e^{\alpha x}\cos(\omega x)\]<p>donde $r(x) = k x^n e^{\alpha x}\cos(\omega x)$. Si $r(x)$ se puede expresar como una función exponencial $e^{\alpha x}$, una potencia de $x$ como $x^m$, $\cos{\omega x}$ o $\sin{\omega x}$ (aquí asumimos $\cos$ sin pérdida de generalidad), o sumas y productos de tales funciones (es decir, se puede expresar como sumas y productos de las funciones en la primera columna de la tabla anterior), demostraremos que existe una solución $y_p$ de la ecuación que es una suma y producto de las funciones en la segunda columna de la misma tabla.</p><blockquote class="prompt-tip"><p>Para una demostración rigurosa, se utilizan algunas partes de álgebra lineal, que están marcadas con *. Se puede omitir estas partes marcadas con * y leer solo el resto para una comprensión general sin problemas.</p></blockquote><h3 id="definición-del-espacio-vectorial-v">Definición del espacio vectorial $V$*</h3><p>Para $r(x)$ de la forma</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>podemos tomar el espacio vectorial $V$ tal que $r(x) \in V$ como sigue:</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="formas-de-las-derivadas-de-funciones-exponenciales-polinomiales-y-trigonométricas">Formas de las derivadas de funciones exponenciales, polinomiales y trigonométricas</h3><p>Las formas de las derivadas de las funciones básicas presentadas en la primera columna de la tabla anterior son las siguientes:</p><ul><li>Función exponencial: $\cfrac{d}{dx}e^{\alpha x} = \alpha e^{\alpha x}$<li>Función polinomial: $\cfrac{d}{dx}x^m = mx^{m-1}$<li>Funciones trigonométricas: $\cfrac{d}{dx}\cos\omega x = -\omega\sin\omega x, \quad \cfrac{d}{dx}\sin\omega x = \omega\cos\omega x$</ul><p>Las derivadas obtenidas al diferenciar estas funciones también se expresan como <u>sumas de funciones del mismo tipo</u>.</p><p>Por lo tanto, cuando las funciones $f$ y $g$ son las funciones anteriores o sumas de ellas, aplicando la regla del producto a $r(x) = f(x)g(x)$ obtenemos</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>donde $f$, $f^{\prime}$, $f^{\prime\prime}$ y $g$, $g^{\prime}$, $g^{\prime\prime}$ se pueden escribir todas como sumas o múltiplos constantes de funciones exponenciales, polinomiales y trigonométricas. Por lo tanto, $r^{\prime}(x) = (fg)^{\prime}$ y $r^{\prime\prime}(x) = (fg)^{\prime\prime}$ también se pueden expresar como sumas y productos de estas funciones, al igual que $r(x)$.</p><h3 id="invariancia-del-espacio-vectorial-v-bajo-la-operación-de-diferenciación-d-y-la-transformación-lineal-l">Invariancia del espacio vectorial $V$ bajo la operación de diferenciación $D$ y la transformación lineal $L$*</h3><p>Es decir, no solo $r(x)$ sino también $r^{\prime}(x)$ y $r^{\prime\prime}(x)$ son combinaciones lineales de términos de la forma $x^k e^{\alpha x}\cos(\omega x)$ y términos de la forma $x^k e^{\alpha x}\sin(\omega x)$, por lo que</p>\[r(x) \in V \implies r^{\prime}(x) \in V,\ r^{\prime\prime}(x) \in V.\]<p>Expresando esto más generalmente introduciendo el operador de diferenciación $D$ para todos los elementos del espacio vectorial $V$ definido anteriormente, no limitándose a $r(x)$, <em>el espacio vectorial $V$ está cerrado bajo la operación de diferenciación $D$</em>. Por lo tanto, si denotamos el lado izquierdo de la ecuación dada $y^{\prime\prime} + ay^{\prime} + by$ como $L[y]$, entonces <em>$V$ es invariante bajo $L$</em>.</p>\[D^2(V)\subseteq V,\quad aD(V)\subseteq V,\quad b\,V\subseteq V \implies L(V)\subseteq V.\]<p>Como $r(x) \in V$ y $V$ es invariante bajo $L$, existe otro elemento $y_p$ de $V$ que satisface $L[y_p] = r$.</p>\[\exists y_p \in V: L[y_p] = r\]<h3 id="ansatz">Ansatz</h3><p>Por lo tanto, si seleccionamos apropiadamente $y_p$ para que sea la suma de todos los posibles términos de forma de producto usando coeficientes indeterminados $A_0, A_1, \dots, A_n$ y $K$, $M$ como sigue, podemos determinar los coeficientes indeterminados sustituyendo $y_p$ (o $xy_p$, $x^2y_p$) y sus derivadas en la ecuación dada según las reglas básica (a) y de modificación (b). Aquí, $n$ se puede determinar según el grado de $r(x)$ con respecto a $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 la entrada dada $r(x)$ incluye varios valores diferentes de $\alpha_i$ y $\omega_j$, también se debe seleccionar $y_p$ para incluir todos los posibles términos de la forma $x^{k}e^{\alpha_i x}\cos(\omega_j x)$ y $x^{k}e^{\alpha_i x}\sin(\omega_j x)$ para cada valor de $\alpha_i$ y $\omega_j$.<br /> La ventaja del método de coeficientes indeterminados es su simplicidad, por lo que si el ansatz se vuelve demasiado complejo y esta ventaja se desvanece, podría ser mejor aplicar el método de variación de parámetros que trataremos más adelante.</p></blockquote><h2 id="extensión-del-método-de-coeficientes-indeterminados-ecuación-de-euler-cauchy">Extensión del método de coeficientes indeterminados: Ecuación de Euler-Cauchy</h2><p>No solo para <a href="/es/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs lineales homogéneas de segundo orden con coeficientes constantes</a>, sino también para la <a href="/es/posts/euler-cauchy-equation/">ecuación de Euler-Cauchy</a></p>\[x^2y^{\prime\prime} + axy^{\prime} + by = r(x) \label{eqn:euler_cauchy}\tag{5}\]<p>se puede utilizar el método de coeficientes indeterminados.</p><h3 id="sustitución-de-variables">Sustitución de variables</h3><p><a href="/es/posts/euler-cauchy-equation/#transformación-a-edo-lineal-homogénea-de-segundo-orden-con-coeficientes-constantes">Sustituyendo $x = e^t$ para transformar en una EDO lineal homogénea de segundo orden con coeficientes constantes</a> obtenemos</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>por lo que la ecuación de Euler-Cauchy se puede transformar en la siguiente ecuación diferencial homogénea con coeficientes constantes en $t$, como vimos anteriormente:</p>\[y^{\prime\prime} + (a-1)y^{\prime} + by = r(e^t). \label{eqn:substituted}\tag{6}\]<p>Ahora podemos aplicar el <a href="#método-de-coeficientes-indeterminados">método de coeficientes indeterminados que examinamos anteriormente</a> de la misma manera a la ecuación ($\ref{eqn:substituted}$) para resolver con respecto a $t$, y finalmente obtener la solución con respecto a $x$ usando $t = \ln x$.</p><h3 id="caso-donde-rx-es-una-potencia-de-x-logaritmo-natural-o-sumas-y-productos-de-tales-funciones">Caso donde $r(x)$ es una potencia de $x$, logaritmo natural, o sumas y productos de tales funciones</h3><p>Especialmente cuando la entrada $r(x)$ está compuesta por potencias de $x$, logaritmo natural, o sumas y productos de tales funciones, se puede seleccionar directamente un $y_p$ apropiado según las siguientes reglas de selección para ecuaciones de Euler-Cauchy.</p><blockquote class="prompt-info"><p><strong>Reglas de selección para el método de coeficientes indeterminados: Para ecuaciones de Euler-Cauchy</strong><br /> <strong>(a) Regla básica</strong>: Si $r(x)$ en la ecuación ($\ref{eqn:euler_cauchy}$) es una de las funciones en la primera columna de la tabla, selecciona $y_p$ de la misma fila y determina los coeficientes indeterminados sustituyendo $y_p$ y sus derivadas en la ecuación ($\ref{eqn:euler_cauchy}$).<br /> <strong>(b) Regla de modificación</strong>: Si el término seleccionado para $y_p$ resulta ser una solución de la ecuación diferencial homogénea $x^2y^{\prime\prime} + axy^{\prime} + by = 0$ correspondiente a la ecuación ($\ref{eqn:euler_cauchy}$), multiplica este término por $\ln{x}$ (o por $(\ln{x})^2$ si esta solución corresponde a una raíz doble de la ecuación característica de la ecuación diferencial homogénea).<br /> <strong>(c) Regla de suma</strong>: Si $r(x)$ es una suma de funciones en la primera columna de la tabla, selecciona como $y_p$ la suma de las funciones correspondientes en la segunda columna.</p><table><thead><tr><th style="text-align: left">Término de $r(x)$<th style="text-align: left">Selección para $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>De esta manera se puede encontrar el mismo $y_p$ que se obtiene mediante <a href="#sustitución-de-variables">sustitución de variables</a> de forma más rápida y conveniente para formas de entrada $r(x)$ prácticamente importantes. Se pueden derivar estas reglas de selección para ecuaciones de Euler-Cauchy sustituyendo $\ln{x}$ en lugar de $x$ en las <a href="#método-de-coeficientes-indeterminados">reglas de selección originales</a>.</p>]]> </content> </entry> <entry><title xml:lang="es">EDOs Lineales No Homogéneas de Segundo Orden (Nonhomogeneous Linear ODEs of Second Order)</title><link href="https://www.yunseo.kim/es/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/es/posts/nonhomogeneous-linear-odes-of-second-order/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="es">Se examina la forma de la solución general de las EDOs lineales no homogéneas de segundo orden, centrándose en su relación con las soluciones de las ecuaciones diferenciales lineales homogéneas correspondientes, y se demuestra la existencia de la solución general y la no existencia de soluciones singulares.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Se examina la forma de la solución general de las EDOs lineales no homogéneas de segundo orden, centrándose en su relación con las soluciones de las ecuaciones diferenciales lineales homogéneas correspondientes, y se demuestra la existencia de la solución general y la no existencia de soluciones singulares.</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>Solución general</strong> de la EDO lineal no homogénea de segundo orden $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$: solución general de la EDO homogénea $y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0$ → $y_h = c_1y_1 + c_2y_2$<li>$y_p$: solución particular de la EDO no homogénea correspondiente</ul><li>El término de respuesta $y_p$ está determinado únicamente por la entrada $r(x)$, y para la misma EDO no homogénea, $y_p$ no cambia aunque cambien las condiciones iniciales. La diferencia entre dos soluciones particulares de la EDO no homogénea se convierte en una solución de la EDO homogénea correspondiente.<li><strong>Existencia de la solución general</strong>: Si los coeficientes $p(x)$, $q(x)$ de la EDO no homogénea y la función de entrada $r(x)$ son continuas, siempre existe una solución general<li><strong>No existencia de soluciones singulares</strong>: La solución general incluye todas las soluciones de la ecuación (es decir, no existen soluciones singulares)</ul></blockquote><h2 id="prerrequisitos">Prerrequisitos</h2><ul><li><a href="/es/posts/homogeneous-linear-odes-of-second-order/">EDOs lineales homogéneas de segundo orden</a><li><a href="/es/posts/wronskian-existence-and-uniqueness-of-solutions/">Wronskiano, existencia y unicidad de soluciones</a></ul><h2 id="solución-general-y-solución-particular-de-edos-lineales-no-homogéneas-de-segundo-orden">Solución general y solución particular de EDOs lineales no homogéneas de segundo orden</h2><p>Consideremos la EDO lineal no homogénea de segundo orden</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x) \label{eqn:nonhomogeneous_linear_ode}\tag{1}\]<p>donde $r(x) \not\equiv 0$. La <strong>solución general</strong> de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) en un intervalo abierto $I$ tiene la forma de la suma de la solución general $y_h = c_1y_1 + c_2y_2$ de la EDO homogénea correspondiente</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode}\tag{2}\]<p>y una solución particular $y_p$ de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$)</p>\[y(x) = y_h(x) + y_p(x) \label{eqn:general_sol}\tag{3}\]<p>Además, una <strong>solución particular</strong> de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) en el intervalo $I$ es una solución obtenida de la ecuación ($\ref{eqn:general_sol}$) asignando valores específicos a las constantes arbitrarias $c_1$ y $c_2$ de $y_h$.</p><p>Es decir, cuando se añade una entrada $r(x)$ que depende únicamente de la variable independiente $x$ a la EDO homogénea ($\ref{eqn:homogeneous_linear_ode}$), se añade un término correspondiente $y_p$ a la respuesta, y este término de respuesta añadido $y_p$ está determinado únicamente por la entrada $r(x)$, independientemente de las condiciones iniciales. Como veremos más adelante, si calculamos la diferencia entre dos soluciones arbitrarias $y_1$ e $y_2$ de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) (es decir, la diferencia entre las soluciones particulares respectivas para dos condiciones iniciales diferentes), la parte $y_p$ independiente de las condiciones iniciales se cancela, quedando solo la diferencia entre ${y_h}_1$ e ${y_h}_2$, que por el <a href="/es/posts/homogeneous-linear-odes-of-second-order/#principio-de-superposición">principio de superposición</a> se convierte en una solución de la ecuación ($\ref{eqn:homogeneous_linear_ode}$).</p><h2 id="relación-entre-las-soluciones-de-la-edo-no-homogénea-y-las-soluciones-de-la-edo-homogénea-correspondiente">Relación entre las soluciones de la EDO no homogénea y las soluciones de la EDO homogénea correspondiente</h2><blockquote class="prompt-info"><p><strong>Teorema 1: Relación entre las soluciones de la EDO no homogénea ($\ref{eqn:nonhomogeneous_linear_ode}$) y las soluciones de la EDO homogénea ($\ref{eqn:homogeneous_linear_ode}$)</strong><br /> <strong>(a)</strong> La suma de una solución $y$ de la EDO no homogénea ($\ref{eqn:nonhomogeneous_linear_ode}$) y una solución $\tilde{y}$ de la EDO homogénea ($\ref{eqn:homogeneous_linear_ode}$) en algún intervalo abierto $I$ es una solución de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) en el intervalo $I$. En particular, la ecuación ($\ref{eqn:general_sol}$) es una solución de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) en el intervalo $I$.<br /> <strong>(b)</strong> La diferencia entre dos soluciones de la EDO no homogénea ($\ref{eqn:nonhomogeneous_linear_ode}$) en el intervalo $I$ es una solución de la EDO homogénea ($\ref{eqn:homogeneous_linear_ode}$) en el intervalo $I$.</p></blockquote><h3 id="demostración">Demostración</h3><h4 id="a">(a)</h4><p>Denotemos el lado izquierdo de las ecuaciones ($\ref{eqn:nonhomogeneous_linear_ode}$) y ($\ref{eqn:homogeneous_linear_ode}$) como $L[y]$. Entonces, para cualquier solución $y$ de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) y cualquier solución $\tilde{y}$ de la ecuación ($\ref{eqn:homogeneous_linear_ode}$) en el intervalo $I$, se satisface lo siguiente:</p>\[L[y + \tilde{y}] = L[y] + L[\tilde{y}] = r + 0 = r.\]<h4 id="b">(b)</h4><p>Para dos soluciones arbitrarias $y$ e $y^*$ de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) en el intervalo $I$, se satisface lo siguiente:</p>\[L[y - y^*] = L[y] - L[y^*] = r - r = 0.\ \blacksquare\]<h2 id="la-solución-general-de-la-edo-no-homogénea-incluye-todas-las-soluciones">La solución general de la EDO no homogénea incluye todas las soluciones</h2><p>Sabemos que <a href="/es/posts/wronskian-existence-and-uniqueness-of-solutions/#no-existencia-de-soluciones-singulares">la solución general de la EDO homogénea ($\ref{eqn:homogeneous_linear_ode}$) incluye todas las soluciones</a>. Demostremos que lo mismo se cumple para la EDO no homogénea ($\ref{eqn:nonhomogeneous_linear_ode}$).</p><blockquote class="prompt-info"><p><strong>Teorema 2: La solución general de la EDO no homogénea incluye todas las soluciones</strong><br /> Si los coeficientes $p(x)$, $q(x)$ de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) y la función de entrada $r(x)$ son continuas en algún intervalo abierto $I$, entonces todas las soluciones de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) en el intervalo $I$ se pueden obtener asignando valores apropiados a las constantes arbitrarias $c_1$ y $c_2$ de $y_h$ en la solución general ($\ref{eqn:general_sol}$) de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) en el intervalo $I$.</p></blockquote><h3 id="demostración-1">Demostración</h3><p>Sea $y^*$ alguna solución de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) en $I$, y sea $x_0$ algún $x$ dentro del intervalo $I$. Por el <a href="/es/posts/wronskian-existence-and-uniqueness-of-solutions/#existencia-de-la-solución-general">teorema de existencia de la solución general para EDOs homogéneas con coeficientes variables continuos</a>, existe $y_h = c_1y_1 + c_2y_2$, y por el <strong>método de variación de parámetros</strong> que estudiaremos más adelante, también existe $y_p$, por lo que existe la solución general ($\ref{eqn:general_sol}$) de la ecuación ($\ref{eqn:nonhomogeneous_linear_ode}$) en el intervalo $I$. Ahora, por el teorema <a href="#relación-entre-las-soluciones-de-la-edo-no-homogénea-y-las-soluciones-de-la-edo-homogénea-correspondiente">1(b)</a> demostrado anteriormente, $Y = y^* - y_p$ es una solución de la EDO homogénea ($\ref{eqn:homogeneous_linear_ode}$) en el intervalo $I$, y 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>Por el <a href="/es/posts/wronskian-existence-and-uniqueness-of-solutions/#teorema-de-existencia-y-unicidad-de-soluciones-del-problema-de-valor-inicial">teorema de existencia y unicidad de soluciones del problema de valor inicial</a>, existe de manera única una solución particular $Y$ de la EDO homogénea ($\ref{eqn:homogeneous_linear_ode}$) que se puede obtener asignando valores apropiados a $c_1$, $c_2$ de $y_h$ para las condiciones iniciales anteriores en el intervalo $I$. Como $y^* = Y + y_p$, hemos demostrado que cualquier solución particular $y^*$ de la EDO no homogénea ($\ref{eqn:nonhomogeneous_linear_ode}$) se puede obtener de la solución general ($\ref{eqn:general_sol}$). $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="es">Wronskiano, Existencia y Unicidad de Soluciones</title><link href="https://www.yunseo.kim/es/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-11T21:22:11+09:00</updated> <id>https://www.yunseo.kim/es/posts/wronskian-existence-and-uniqueness-of-solutions/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="es">Para EDOs lineales homogéneas de segundo orden con coeficientes variables continuos arbitrarios, se estudian el teorema de existencia y unicidad de soluciones del problema de valor inicial, el método de discriminación de dependencia/independencia lineal de soluciones usando el Wronskiano, y se demuestra que tales ecuaciones siempre tienen una solución general que incluye todas las soluciones de la ecuación.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Para EDOs lineales homogéneas de segundo orden con coeficientes variables continuos arbitrarios, se estudian el teorema de existencia y unicidad de soluciones del problema de valor inicial, el método de discriminación de dependencia/independencia lineal de soluciones usando el Wronskiano, y se demuestra que tales ecuaciones siempre tienen una solución general que incluye todas las soluciones de la ecuación.</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>Para la ecuación diferencial ordinaria lineal homogénea de segundo orden con coeficientes variables arbitrarios $p$ y $q$ continuos en el intervalo $I$</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0\]<p>y las condiciones iniciales</p>\[y(x_0)=K_0, \qquad y^{\prime}(x_0)=K_1\]<p>se cumplen los siguientes 4 teoremas:</p><ol><li><strong>Teorema de existencia y unicidad de soluciones del problema de valor inicial</strong>: El problema de valor inicial constituido por la ecuación dada y las condiciones iniciales tiene una solución única $y(x)$ en el intervalo $I$.<li><strong>Discriminación de dependencia/independencia lineal de soluciones usando el Wronskiano</strong>: Para dos soluciones $y_1$ e $y_2$ de la ecuación, si existe un $x_0$ en el intervalo $I$ donde el <strong>Wronskiano</strong> $W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime}$ se hace $0$, entonces las dos soluciones son linealmente dependientes. Además, si existe un $x_1$ en el intervalo $I$ donde $W\neq 0$, entonces las dos soluciones son linealmente independientes.<li><strong>Existencia de la solución general</strong>: La ecuación dada tiene una solución general en el intervalo $I$.<li><strong>No existencia de soluciones singulares</strong>: Esta solución general incluye todas las soluciones de la ecuación (es decir, no existen soluciones singulares).</ol></blockquote><h2 id="prerrequisitos">Prerrequisitos</h2><ul><li><a href="/es/posts/Solution-of-First-Order-Linear-ODE/">Solución de EDOs lineales de primer orden</a><li><a href="/es/posts/homogeneous-linear-odes-of-second-order/">EDOs lineales homogéneas de segundo orden</a><li><a href="/es/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs lineales homogéneas de segundo orden con coeficientes constantes</a><li><a href="/es/posts/euler-cauchy-equation/">Ecuación de Euler-Cauchy</a><li>Matriz inversa y matriz singular, determinante</ul><h2 id="edos-homogéneas-con-coeficientes-variables-continuos-arbitrarios">EDOs homogéneas con coeficientes variables continuos arbitrarios</h2><p>Anteriormente estudiamos las soluciones generales de <a href="/es/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs lineales homogéneas de segundo orden con coeficientes constantes</a> y la <a href="/es/posts/euler-cauchy-equation/">ecuación de Euler-Cauchy</a>. En este artículo, extenderemos la discusión a un caso más general, estudiando la existencia y forma de la solución general de la ecuación diferencial ordinaria lineal homogénea de segundo orden con <strong>coeficientes variables</strong> continuos arbitrarios $p$ y $q$</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode_with_var_coefficients}\tag{1}\]<p>Además, también estudiaremos la unicidad del <a href="/es/posts/homogeneous-linear-odes-of-second-order/#problema-de-valor-inicial-y-condiciones-iniciales">problema de valor inicial</a> constituido por la ecuación diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) y las siguientes dos condiciones iniciales</p>\[y(x_0)=K_0, \qquad y^{\prime}(x_0)=K_1 \label{eqn:initial_conditions}\tag{2}\]<p>Adelantando la conclusión, el núcleo del contenido que trataremos aquí es que las ecuaciones diferenciales ordinarias <u>lineales</u> con coeficientes continuos no tienen <em>soluciones singulares</em> (soluciones que no se pueden obtener de la solución general).</p><h2 id="teorema-de-existencia-y-unicidad-de-soluciones-del-problema-de-valor-inicial">Teorema de existencia y unicidad de soluciones del problema de valor inicial</h2><blockquote class="prompt-info"><p><strong>Teorema de existencia y unicidad de soluciones del problema de valor inicial</strong><br /> Si $p(x)$ y $q(x)$ son funciones continuas en algún intervalo abierto $I$, y $x_0$ está dentro del intervalo $I$, entonces el problema de valor inicial constituido por las ecuaciones ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) y ($\ref{eqn:initial_conditions}$) tiene una solución única $y(x)$ en el intervalo $I$.</p></blockquote><p>No trataremos la demostración de la existencia aquí, solo veremos la demostración de la unicidad. Generalmente, demostrar la unicidad es más simple que demostrar la existencia.<br /> Si no te interesa la demostración, puedes saltar esta parte y pasar a <a href="#dependencia-e-independencia-lineal-de-soluciones">Dependencia e independencia lineal de soluciones</a>.</p><h3 id="demostración-de-la-unicidad">Demostración de la unicidad</h3><p>Supongamos que el problema de valor inicial constituido por la ecuación diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) y las condiciones iniciales ($\ref{eqn:initial_conditions}$) tiene dos soluciones $y_1(x)$ e $y_2(x)$ en el intervalo $I$. Si podemos mostrar que la diferencia de estas dos soluciones</p>\[y(x) = y_1(x) - y_2(x)\]<p>es idénticamente $0$ en el intervalo $I$, esto significa que $y_1 \equiv y_2$ en el intervalo $I$, lo que implica la unicidad de la solución.</p><p>Como la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) es una ecuación diferencial lineal homogénea, la combinación lineal $y$ de $y_1$ e $y_2$ se convierte en una solución de la ecuación en $I$. Como $y_1$ e $y_2$ satisfacen las mismas condiciones iniciales ($\ref{eqn:initial_conditions}$), $y$ satisface las condiciones</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>Ahora consideremos la función</p>\[z(x) = y(x)^2 + y^{\prime}(x)^2\]<p>y su derivada</p>\[z^{\prime} = 2yy^{\prime} + 2y^{\prime}y^{\prime\prime}\]<p>De la ecuación diferencial obtenemos</p>\[y^{\prime\prime} = -py^{\prime} - qy\]<p>y sustituyendo esto en la expresión para $z^{\prime}$ obtenemos</p>\[z^{\prime} = 2yy^{\prime} - 2p{y^{\prime}}^2 - 2qyy^{\prime} \label{eqn:z_prime}\tag{4}\]<p>Ahora, como $y$ e $y^{\prime}$ son reales, tenemos</p>\[(y\pm y^{\prime})^2 = y^2 \pm 2yy^{\prime} + {y^{\prime}}^2 \geq 0\]<p>De esto y la definición de $z$ obtenemos las dos desigualdades</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>De estas dos desigualdades podemos ver que $|2yy^{\prime}|\leq z$, por lo que para el último término de la ecuación ($\ref{eqn:z_prime}$) se cumple la siguiente desigualdad:</p>\[\pm2qyy^{\prime} \leq |\pm 2qyy^{\prime}| = |q||2yy^{\prime}| \leq |q|z.\]<p>Usando este resultado junto con $-p \leq |p|$, y aplicando la ecuación ($\ref{eqn:inequalities}$a) al término $2yy^{\prime}$ de la ecuación ($\ref{eqn:z_prime}$), obtenemos</p>\[z^{\prime} \leq z + 2|p|{y^{\prime}}^2 + |q|z\]<p>Como ${y^{\prime}}^2 \leq y^2 + {y^{\prime}}^2 = z$, de esto obtenemos</p>\[z^{\prime} \leq (1 + 2|p| + |q|)z\]<p>Poniendo la función entre paréntesis como $h = 1 + 2|p| + |q|$, tenemos</p>\[z^{\prime} \leq hz \quad \forall x \in I \label{eqn:inequality_6a}\tag{6a}\]<p>De la misma manera, de las ecuaciones ($\ref{eqn:z_prime}$) y ($\ref{eqn:inequalities}$) obtenemos</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>Estas dos desigualdades ($\ref{eqn:inequality_6a}$), ($\ref{eqn:inequality_6b}$) son equivalentes a las siguientes desigualdades</p>\[z^{\prime} - hz \leq 0, \qquad z^{\prime} + hz \geq 0 \label{eqn:inequalities_7}\tag{7}\]<p>y los <a href="/es/posts/Solution-of-First-Order-Linear-ODE/#ecuación-diferencial-lineal-no-homogénea">factores integrantes</a> para los lados izquierdos de estas dos ecuaciones son</p>\[F_1 = e^{-\int h(x)\ dx} \qquad \text{y} \qquad F_2 = e^{\int h(x)\ dx}\]<p>Como $h$ es continua, la integral indefinida $\int h(x)\ dx$ existe, y como $F_1$ y $F_2$ son positivos, de la ecuación ($\ref{eqn:inequalities_7}$) obtenemos</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>Esto significa que $F_1 z$ no aumenta en el intervalo $I$ y $F_2 z$ no disminuye. Por la ecuación ($\ref{eqn:initial_conditions_*}$), $z(x_0) = 0$, por lo que</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>Finalmente, dividiendo ambos lados de las desigualdades por los números positivos $F_1$ y $F_2$, podemos demostrar la unicidad de la solución de la siguiente manera:</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="dependencia-e-independencia-lineal-de-soluciones">Dependencia e independencia lineal de soluciones</h2><p>Recordemos brevemente el contenido tratado en <a href="/es/posts/homogeneous-linear-odes-of-second-order/#base-y-solución-general">EDOs lineales homogéneas de segundo orden</a>. La solución general en un intervalo abierto $I$ se construye a partir de una <strong>base</strong> $y_1$, $y_2$, es decir, un par de soluciones linealmente independientes en $I$. Aquí, que $y_1$ e $y_2$ sean <strong>linealmente independientes</strong> en el intervalo $I$ significa que satisfacen lo siguiente para todos los $x$ en el intervalo:</p>\[k_1y_1(x) + k_2y_2(x) = 0 \Leftrightarrow k_1=0\text{ y }k_2=0 \label{eqn:linearly_independent}\tag{8}\]<p>Si no se satisface lo anterior y existe al menos un $k_1$, $k_2$ no nulo tal que $k_1y_1(x) + k_2y_2(x) = 0$, entonces $y_1$ e $y_2$ son <strong>linealmente dependientes</strong> en el intervalo $I$. En este caso, para todos los $x$ en el intervalo $I$ se cumple</p>\[\text{(a) } y_1 = ky_2 \quad \text{o} \quad \text{(b) } y_2 = ly_1 \label{eqn:linearly_dependent}\tag{9}\]<p>por lo que $y_1$ e $y_2$ son proporcionales.</p><p>Ahora estudiemos el siguiente método de discriminación de independencia/dependencia lineal de soluciones.</p><blockquote class="prompt-info"><p><strong>Discriminación de dependencia/independencia lineal de soluciones usando el Wronskiano</strong><br /> <strong>i.</strong> Si la ecuación diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) tiene coeficientes $p(x)$ y $q(x)$ continuos en el intervalo abierto $I$, entonces la condición necesaria y suficiente para que dos soluciones $y_1$ e $y_2$ de la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) en el intervalo $I$ sean linealmente dependientes es que el <em>determinante de Wronski</em> de estas soluciones, abreviado como <strong>Wronskiano</strong></p>\[W(y_1, y_2) = \begin{vmatrix} y_1 &amp; y_2 \\ y_1^{\prime} &amp; y_2^{\prime} \\ \end{vmatrix} = y_1y_2^{\prime} - y_2y_1^{\prime} \label{eqn:wronskian}\tag{10}\]<p>se haga $0$ en algún $x_0$ dentro del intervalo $I$.</p>\[\exists x_0 \in I: W(x_0)=0 \iff y_1 \text{ e } y_2 \text{ son linealmente dependientes}\]<p><strong>ii.</strong> Si $W=0$ en un punto $x=x_0$ dentro del intervalo $I$, entonces $W=0$ en todos los $x$ dentro del intervalo $I$.</p>\[\exists x_0 \in I: W(x_0)=0 \implies \forall x \in I: W(x)=0\]<p>En otras palabras, si existe un $x_1$ en el intervalo $I$ donde $W\neq 0$, entonces $y_1$, $y_2$ son linealmente independientes en ese intervalo $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{ e } y_2 \text{ son linealmente independientes} \end{align*}\]</blockquote><blockquote class="prompt-tip"><p>El Wronskiano fue introducido por primera vez por el matemático polaco Józef Maria Hoene-Wroński, y recibió su nombre actual en 11882 EH por el matemático escocés Thomas Muir.</p></blockquote><h3 id="demostración">Demostración</h3><h4 id="i-a">i. (a)</h4><p>Supongamos que $y_1$ e $y_2$ son linealmente dependientes en el intervalo $I$. Entonces se cumple la ecuación ($\ref{eqn:linearly_dependent}$a) o ($\ref{eqn:linearly_dependent}$b) en el intervalo $I$. Si se cumple la ecuación ($\ref{eqn:linearly_dependent}$a), entonces</p>\[W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime} = ky_2ky_2^{\prime} - y_2ky_2^{\prime} = 0\]<p>y de manera similar, si se cumple la ecuación ($\ref{eqn:linearly_dependent}$b), también</p>\[W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime} = y_1ly_1^{\prime} - ly_1y_1^{\prime} = 0\]<p>por lo que podemos confirmar que el Wronskiano $W(y_1, y_2)=0$ <u>para todos los $x$ en el intervalo $I$</u>.</p><h4 id="i-b">i. (b)</h4><p>Inversamente, cuando $W(y_1, y_2)=0$ para algún $x = x_0$, mostraremos que $y_1$ e $y_2$ se vuelven linealmente dependientes en el intervalo $I$. Consideremos el sistema de ecuaciones lineales en las incógnitas $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>Esto se puede expresar en forma de ecuación vectorial como sigue:</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 matriz de coeficientes de esta ecuación vectorial es</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>y el determinante de esta matriz es precisamente $W(y_1(x_0), y_2(x_0))$. Como $\det(A) = W=0$, $A$ es una <strong>matriz singular</strong> que no tiene <strong>matriz inversa</strong>, por lo que el sistema de ecuaciones ($\ref{eqn:linear_system}$) tiene una solución $(c_1, c_2)$ distinta del vector cero $(0,0)$ donde al menos uno de $c_1$ y $c_2$ no es $0$. Ahora introduzcamos la función</p>\[y(x) = c_1y_1(x) + c_2y_2(x)\]<p>Como la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) es lineal homogénea, por el <a href="/es/posts/homogeneous-linear-odes-of-second-order/#principio-de-superposición">principio de superposición</a> esta función es una solución de la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) en el intervalo $I$. Del sistema de ecuaciones ($\ref{eqn:linear_system}$) podemos ver que esta solución satisface las condiciones iniciales $y(x_0)=0$, $y^{\prime}(x_0)=0$.</p><p>Por otro lado, existe la solución trivial $y^* \equiv 0$ que satisface las mismas condiciones iniciales $y^<em>(x_0)=0$, ${y^</em>}^{\prime}(x_0)=0$. Como los coeficientes $p$ y $q$ de la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) son continuos, por el <a href="#teorema-de-existencia-y-unicidad-de-soluciones-del-problema-de-valor-inicial">teorema de existencia y unicidad de soluciones del problema de valor inicial</a> se garantiza la unicidad de la solución, por lo que $y \equiv y^*$. Es decir, en el intervalo $I$</p>\[c_1y_1 + c_2y_2 \equiv 0\]<p>Como al menos uno de $c_1$ y $c_2$ no es $0$, no se satisface ($\ref{eqn:linearly_independent}$), lo que significa que $y_1$, $y_2$ son linealmente dependientes en el intervalo $I$.</p><h4 id="ii">ii.</h4><p>Si $W(x_0)=0$ en algún punto $x_0$ dentro del intervalo $I$, entonces por <a href="#i-b">i.(b)</a> $y_1$, $y_2$ son linealmente dependientes en el intervalo $I$, y entonces por <a href="#i-a">i.(a)</a> $W\equiv 0$. Por lo tanto, si existe al menos un $x_1$ en el intervalo $I$ tal que $W(x_1)\neq 0$, entonces $y_1$ e $y_2$ son linealmente independientes. $\blacksquare$</p><h2 id="la-solución-general-incluye-todas-las-soluciones">La solución general incluye todas las soluciones</h2><h3 id="existencia-de-la-solución-general">Existencia de la solución general</h3><blockquote class="prompt-info"><p>Si $p(x)$ y $q(x)$ son continuas en el intervalo abierto $I$, entonces la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) tiene una solución general en el intervalo $I$.</p></blockquote><h4 id="demostración-1">Demostración</h4><p>Por el <a href="#teorema-de-existencia-y-unicidad-de-soluciones-del-problema-de-valor-inicial">teorema de existencia y unicidad de soluciones del problema de valor inicial</a>, la ecuación diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) tiene una solución $y_1(x)$ en el intervalo $I$ que satisface las condiciones iniciales</p>\[y_1(x_0) = 1, \qquad y_1^{\prime}(x_0) = 0\]<p>y una solución $y_2(x)$ en el intervalo $I$ que satisface las condiciones iniciales</p>\[y_2(x_0) = 0, \qquad y_2^{\prime}(x_0) = 1\]<p>El Wronskiano de estas dos soluciones tiene un valor no nulo 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>por lo que, por la <a href="#dependencia-e-independencia-lineal-de-soluciones">discriminación de dependencia/independencia lineal de soluciones usando el Wronskiano</a>, $y_1$ e $y_2$ son linealmente independientes en el intervalo $I$. Por lo tanto, estas dos soluciones forman una base de soluciones de la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) en el intervalo $I$, y necesariamente existe una solución general $y = c_1y_1 + c_2y_2$ con constantes arbitrarias $c_1$, $c_2$ en el intervalo $I$. $\blacksquare$</p><h3 id="no-existencia-de-soluciones-singulares">No existencia de soluciones singulares</h3><blockquote class="prompt-info"><p>Si la ecuación diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) tiene coeficientes $p(x)$ y $q(x)$ continuos en algún intervalo abierto $I$, entonces todas las soluciones $y=Y(x)$ de la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) en el intervalo $I$ tienen la forma</p>\[Y(x) = C_1y_1(x) + C_2y_2(x) \label{eqn:particular_solution}\tag{13}\]<p>donde $y_1$, $y_2$ son una base de soluciones de la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) en el intervalo $I$ y $C_1$, $C_2$ son constantes apropiadas.<br /> Es decir, la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) no tiene <strong>soluciones singulares</strong> que no se puedan obtener de la solución general.</p></blockquote><h4 id="demostración-2">Demostración</h4><p>Sea $y=Y(x)$ alguna solución de la ecuación ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) en el intervalo $I$. Ahora, por el <a href="#existencia-de-la-solución-general">teorema de existencia de la solución general</a>, la ecuación diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) tiene una solución general</p>\[y(x) = c_1y_1(x) + c_2y_2(x) \label{eqn:general_solution}\tag{14}\]<p>en el intervalo $I$. Ahora debemos mostrar que para cualquier $Y(x)$ existen constantes $c_1$, $c_2$ tales que $y(x)=Y(x)$ en el intervalo $I$. Primero mostremos que podemos encontrar los valores de $c_1$, $c_2$ tales que $y(x_0)=Y(x_0)$ e $y^{\prime}(x_0)=Y^{\prime}(x_0)$ para cualquier $x_0$ en el intervalo $I$. De la ecuación ($\ref{eqn:general_solution}$) obtenemos</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>Como $y_1$ e $y_2$ son una base, el determinante de la matriz de coeficientes $W(y_1(x_0), y_2(x_0))\neq 0$, por lo que la ecuación ($\ref{eqn:vector_equation_2}$) se puede resolver para $c_1$ y $c_2$. Sea $(c_1, c_2) = (C_1, C_2)$ la solución. Sustituyendo esto en la ecuación ($\ref{eqn:general_solution}$) obtenemos la siguiente solución particular:</p>\[y^*(x) = C_1y_1(x) + C_2y_2(x).\]<p>Como $C_1$, $C_2$ son la solución de la ecuación ($\ref{eqn:vector_equation_2}$),</p>\[y^*(x_0) = Y(x_0), \qquad {y^*}^{\prime}(x_0) = Y^{\prime}(x_0)\]<p>Por la unicidad del <a href="#teorema-de-existencia-y-unicidad-de-soluciones-del-problema-de-valor-inicial">teorema de existencia y unicidad de soluciones del problema de valor inicial</a>, $y^* \equiv Y$ para todos los $x$ en el intervalo $I$. $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="es">Ecuación de Euler-Cauchy</title><link href="https://www.yunseo.kim/es/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/es/posts/euler-cauchy-equation/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="es">Se examina la forma que toma la solución general de la ecuación de Euler-Cauchy en cada caso, según el signo del discriminante de la ecuación auxiliar.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Se examina la forma que toma la solución general de la ecuación de Euler-Cauchy en cada caso, según el signo del discriminante de la ecuación auxiliar.</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>Ecuación de Euler-Cauchy: $x^2y^{\prime\prime} + axy^{\prime} + by = 0$<li><strong>Ecuación auxiliar</strong>: $m^2 + (a-1)m + b = 0$<li>Según el signo del discriminante $(1-a)^2 - 4b$ de la ecuación auxiliar, la forma de la solución general se puede dividir en tres casos como se muestra en la tabla</ul><table><thead><tr><th style="text-align: center">Caso<th style="text-align: center">Raíces de la ecuación auxiliar<th style="text-align: center">Base de soluciones de la ecuación de Euler-Cauchy<th style="text-align: center">Solución general de la ecuación de Euler-Cauchy<tbody><tr><td style="text-align: center">I<td style="text-align: center">Raíces reales distintas<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">Raíz real doble<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">Raíces complejas conjugadas<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="prerrequisitos">Prerrequisitos</h2><ul><li><a href="/es/posts/homogeneous-linear-odes-of-second-order/">EDOs Lineales Homogéneas de Segundo Orden</a><li><a href="/es/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs lineales homogéneas de segundo orden con coeficientes constantes</a><li>Fórmula de Euler</ul><h2 id="ecuación-auxiliar">Ecuación auxiliar</h2><p>La <strong>ecuación de Euler-Cauchy</strong> es una ecuación diferencial ordinaria de la forma</p>\[x^2y^{\prime\prime} + axy^{\prime} + by = 0 \label{eqn:euler_cauchy_eqn}\tag{1}\]<p>con constantes dadas $a$ y $b$, y función incógnita $y(x)$. Sustituyendo en la ecuación ($\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>obtenemos</p>\[x^2m(m-1)x^{m-2} + axmx^{m-1} + bx^m = 0,\]<p>es decir</p>\[[m(m-1) + am + b]x^m = 0\]<p>De esto obtenemos la ecuación auxiliar</p>\[m^2 + (a-1)m + b = 0 \label{eqn:auxiliary_eqn}\tag{2}\]<p>y la condición necesaria y suficiente para que $y=x^m$ sea solución de la ecuación de Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) es que $m$ sea solución de la ecuación auxiliar ($\ref{eqn:auxiliary_eqn}$).</p><p>Resolviendo la ecuación cuadrática ($\ref{eqn:auxiliary_eqn}$) obtenemos</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>y de esto, las dos funciones</p>\[y_1 = x^{m_1}, \quad y_2 = x^{m_2}\]<p>son soluciones de la ecuación ($\ref{eqn:euler_cauchy_eqn}$).</p><p>Al igual que en las <a href="/es/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs lineales homogéneas de segundo orden con coeficientes constantes</a>, podemos dividir en tres casos según el signo del discriminante $(1-a)^2 - 4b$ de la ecuación auxiliar ($\ref{eqn:auxiliary_eqn}$).</p><ul><li>$(1-a)^2 - 4b &gt; 0$: dos raíces reales distintas<li>$(1-a)^2 - 4b = 0$: raíz real doble<li>$(1-a)^2 - 4b &lt; 0$: raíces complejas conjugadas</ul><h2 id="forma-de-la-solución-general-según-el-signo-del-discriminante-de-la-ecuación-auxiliar">Forma de la solución general según el signo del discriminante de la ecuación auxiliar</h2><h3 id="i-dos-raíces-reales-distintas-m_1-y-m_2">I. Dos raíces reales distintas $m_1$ y $m_2$</h3><p>En este caso, la base de soluciones de la ecuación ($\ref{eqn:euler_cauchy_eqn}$) en cualquier intervalo es</p>\[y_1 = x^{m_1}, \quad y_2 = x^{m_2}\]<p>y la solución general correspondiente es</p>\[y = c_1 x^{m_1} + c_2 x^{m_2} \label{eqn:general_sol_1}\tag{4}\]<h3 id="ii-raíz-real-doble-m--cfrac1-a2">II. Raíz real doble $m = \cfrac{1-a}{2}$</h3><p>Cuando $(1-a)^2 - 4b = 0$, es decir, $b=\cfrac{(1-a)^2}{4}$, la ecuación cuadrática ($\ref{eqn:auxiliary_eqn}$) tiene una sola solución $m = m_1 = m_2 = \cfrac{1-a}{2}$, por lo que la única solución de la forma $y = x^m$ que podemos obtener es</p>\[y_1 = x^{(1-a)/2}\]<p>y la ecuación de Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) toma la forma</p>\[y^{\prime\prime} + \frac{a}{x}y^{\prime} + \frac{(1-a)^2}{4x^2}y = 0 \label{eqn:standard_form}\tag{5}\]<p>Ahora encontremos otra solución $y_2$ linealmente independiente usando <a href="/es/posts/homogeneous-linear-odes-of-second-order/#reducción-de-orden">reducción de orden</a>.</p><p>Poniendo la segunda solución que buscamos como $y_2=uy_1$, obtenemos</p>\[u = \int U, \qquad U = \frac{1}{y_1^2}\exp\left(-\int \frac{a}{x}\ dx \right)\]<p>Como $\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>e integrando obtenemos $u = \ln x$.</p><p>Por lo tanto, $y_2 = uy_1 = y_1 \ln x$, y como $y_1$ y $y_2$ tienen un cociente que no es constante, son linealmente independientes. La solución general correspondiente a la base $y_1$ y $y_2$ es</p>\[y = (c_1 + c_2 \ln x)x^m \label{eqn:general_sol_2}\tag{6}\]<h3 id="iii-raíces-complejas-conjugadas">III. Raíces complejas conjugadas</h3><p>En este caso, las soluciones de la ecuación auxiliar ($\ref{eqn:auxiliary_eqn}$) son $m = \cfrac{1}{2}(1-a) \pm i\sqrt{b - \frac{1}{4}(1-a)^2}$, y las dos soluciones complejas correspondientes de la ecuación ($\ref{eqn:euler_cauchy_eqn}$) se pueden escribir usando $x=e^{\ln x}$ como sigue:</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>Poniendo $t=\sqrt{b - \frac{1}{4}(1-a)^2}\ln x$ y usando la fórmula de Euler $e^{it} = \cos{t} + i\sin{t}$, obtenemos</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>y de esto obtenemos las siguientes dos soluciones reales</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>Como el cociente de estas soluciones, $\cos\left(\sqrt{b - \frac{1}{4}(1-a)^2}\ln x \right)$, no es constante, las dos soluciones anteriores son linealmente independientes y por tanto forman una base de la ecuación de Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) por el <a href="/es/posts/homogeneous-linear-odes-of-second-order/#principio-de-superposición">principio de superposición</a>. De esto obtenemos la siguiente solución general real:</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>Sin embargo, el caso en que la ecuación auxiliar de la ecuación de Euler-Cauchy tiene raíces complejas conjugadas no tiene gran importancia práctica.</p><h2 id="transformación-a-edo-lineal-homogénea-de-segundo-orden-con-coeficientes-constantes">Transformación a EDO lineal homogénea de segundo orden con coeficientes constantes</h2><p>La ecuación de Euler-Cauchy se puede transformar en una <a href="/es/posts/homogeneous-linear-odes-with-constant-coefficients/">EDO lineal homogénea de segundo orden con coeficientes constantes</a> mediante sustitución de variables.</p><p>Sustituyendo $x = e^t$, obtenemos</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>por lo que la ecuación de Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) se convierte en la siguiente EDO lineal homogénea con coeficientes constantes en $t$:</p>\[y^{\prime\prime}(t) + (a-1)y^{\prime}(t) + by(t) = 0. \label{eqn:substituted}\tag{11}\]<p>Resolviendo la ecuación ($\ref{eqn:substituted}$) con respecto a $t$ aplicando el método de <a href="/es/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs lineales homogéneas de segundo orden con coeficientes constantes</a>, y luego transformando la solución obtenida de nuevo a una solución con respecto a $x$ usando $t = \ln{x}$, obtenemos <a href="#forma-de-la-solución-general-según-el-signo-del-discriminante-de-la-ecuación-auxiliar">el mismo resultado que examinamos anteriormente</a>.</p>]]> </content> </entry> <entry><title xml:lang="es">Pruebas de convergencia/divergencia de series (Testing for Convergence or Divergence of a Series)</title><link href="https://www.yunseo.kim/es/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/es/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="es">Examinamos varios métodos para determinar la convergencia o divergencia de series.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Examinamos varios métodos para determinar la convergencia o divergencia de series.</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>Prueba del término n-ésimo (n-th-term test for divergence)</strong>: $\lim_{n\to\infty} a_n \neq 0 \Rightarrow \text{la serie }\sum a_n \text{ diverge}$<li><strong>Convergencia/divergencia de series geométricas</strong>: La serie geométrica $\sum ar^{n-1}$:<ul><li>Converge si $|r| &lt; 1$<li>Diverge si $|r| \geq 1$</ul><li><strong>Convergencia/divergencia de series p</strong>: La serie p $\sum \cfrac{1}{n^p}$:<ul><li>Converge si $p&gt;1$<li>Diverge si $p\leq 1$</ul><li><strong>Criterio de comparación (Comparison Test)</strong>: Si $0 \leq a_n \leq b_n$, entonces:<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>Criterio de comparación por límite (Limit Comparison Test)</strong>: Si $\lim_{n\to\infty} \frac{a_n}{b_n} = c \text{ (donde }c\text{ es un número positivo finito)}$, entonces ambas series $\sum a_n$ y $\sum b_n$ convergen o ambas divergen<li>Para una serie de términos positivos $\sum a_n$ y un número positivo $\epsilon &lt; 1$:<ul><li>Si $\sqrt[n]{a_n}&lt; 1-\epsilon$ para todo $n$, entonces la serie $\sum a_n$ converge<li>Si $\sqrt[n]{a_n}&gt; 1+\epsilon$ para todo $n$, entonces la serie $\sum a_n$ diverge</ul><li><strong>Criterio de la raíz (Root Test)</strong>: Para una serie de términos positivos $\sum a_n$, si existe el límite $\lim_{n\to\infty} \sqrt[n]{a_n} =: r$:<ul><li>Si $r&lt;1$, entonces la serie $\sum a_n$ converge<li>Si $r&gt;1$, entonces la serie $\sum a_n$ diverge</ul><li><strong>Criterio del cociente (Ratio Test)</strong>: Para una sucesión de números positivos $(a_n)$ y $0 &lt; r &lt; 1$:<ul><li>Si $a_{n+1}/a_n \leq r$ para todo $n$, entonces la serie $\sum a_n$ converge<li>Si $a_{n+1}/a_n \geq 1$ para todo $n$, entonces la serie $\sum a_n$ diverge</ul><li>Para una sucesión de números positivos $(a_n)$, si existe el límite $\rho := \lim_{n\to\infty} \cfrac{a_{n+1}}{a_n}$:<ul><li>Si $\rho &lt; 1$, entonces la serie $\sum a_n$ converge<li>Si $\rho &gt; 1$, entonces la serie $\sum a_n$ diverge</ul><li><strong>Criterio de la integral (Integral Test)</strong>: Si $f: \left[1,\infty \right) \rightarrow \mathbb{R}$ es una función continua, decreciente y siempre $f(x)&gt;0$, entonces la serie $\sum f(n)$ converge si y solo si la integral $\int_1^\infty f(x)\ dx := \lim_{b\to\infty} \int_1^b f(x)\ dx$ converge<li><strong>Criterio de las series alternadas (Alternating Series Test)</strong>: Una serie alternada $\sum a_n$ converge si:<ol><li>Los signos de $a_n$ y $a_{n+1}$ son diferentes para todo $n$<li>$|a_n| \geq |a_{n+1}|$ para todo $n$<li>$\lim_{n\to\infty} a_n = 0$</ol><li>Una serie absolutamente convergente es convergente. El recíproco no es cierto.</ul></blockquote><h2 id="prerrequisitos">Prerrequisitos</h2><ul><li><a href="/es/posts/sequences-and-series/">Sucesiones y series</a></ul><h2 id="introducción">Introducción</h2><p>Anteriormente en <a href="/es/posts/sequences-and-series/#convergencia-y-divergencia-de-series">Sucesiones y series</a>, vimos la definición de convergencia y divergencia de series. En este artículo, resumiremos varios métodos que pueden utilizarse para determinar la convergencia o divergencia de una serie. En general, determinar si una serie converge o diverge es mucho más sencillo que calcular su suma exacta.</p><h2 id="criterio-del-término-n-ésimo">Criterio del término n-ésimo</h2><p>Para una serie $\sum a_n$, llamamos a $a_n$ el <strong>término general</strong> de la serie.</p><p>Gracias al siguiente teorema, podemos identificar fácilmente algunas series que claramente divergen, por lo que verificar esto primero es una estrategia inteligente para evitar perder tiempo.</p><blockquote class="prompt-info"><p><strong>Criterio del término n-ésimo (n-th-term test for divergence)</strong><br /> Si una serie $\sum a_n$ converge, entonces:</p>\[\lim_{n\to\infty} a_n=0\]<p>Es decir:</p>\[\lim_{n\to\infty} a_n \neq 0 \Rightarrow \text{la serie }\sum a_n \text{ diverge}\]</blockquote><h3 id="demostración">Demostración</h3><p>Sea $l$ la suma de una serie convergente $\sum a_n$ y definamos la suma de los primeros $n$ términos como:</p>\[s_n := a_1 + a_2 + \cdots + a_n\]<p>Entonces:</p>\[\forall \epsilon &gt; 0,\, \exists N \in \mathbb{N}\ (n &gt; N \Rightarrow |s_n - l| &lt; \epsilon).\]<p>Por lo tanto, para $n$ suficientemente grande ($&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>Por la definición de convergencia de sucesiones:</p>\[\lim_{n\to\infty} |a_n| = 0. \quad \blacksquare\]<h3 id="advertencia">Advertencia</h3><p>El recíproco de este teorema no es generalmente cierto. Un ejemplo clásico que lo demuestra es la <strong>serie armónica (harmonic series)</strong>.</p><p>La serie armónica es una serie cuyos términos son los recíprocos de una <strong>sucesión aritmética</strong>, es decir, una <strong>sucesión armónica</strong>. La serie armónica más representativa es:</p>\[H_n := 1 + \frac{1}{2} + \cdots + \frac{1}{n} \quad (n=1,2,3,\dots)\]<p>Podemos demostrar que esta serie diverge de la siguiente manera:</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>Como podemos ver, aunque la serie $H_n$ diverge, su término general $1/n$ converge a $0$.</p><blockquote class="prompt-danger"><p>Si $\lim_{n\to\infty} a_n \neq 0$, entonces la serie $\sum a_n$ definitivamente diverge, pero asumir que una serie $\sum a_n$ converge solo porque $\lim_{n\to\infty} a_n = 0$ es peligroso. En este caso, se deben utilizar otros métodos para determinar la convergencia o divergencia.</p></blockquote><h2 id="series-geométricas">Series geométricas</h2><p>La <strong>serie geométrica (geometric series)</strong> con primer término 1 y razón $r$:</p>\[1 + r + r^2 + r^3 + \cdots \label{eqn:geometric_series}\tag{5}\]<p>es una de las series más <u>importantes y fundamentales</u>. De la igualdad:</p>\[(1-r)(1+r+\cdots + r^{n-1}) = 1 - r^n\]<p>obtenemos:</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>Por otro lado:</p>\[\lim_{n\to\infty} r^n = 0 \quad \Leftrightarrow \quad |r| &lt; 1\]<p>Por lo tanto, la condición necesaria y suficiente para que la serie geométrica ($\ref{eqn:geometric_series}$) converja es que $|r| &lt; 1$.</p><blockquote class="prompt-info"><p><strong>Convergencia/divergencia de series geométricas</strong><br /> La serie geométrica $\sum ar^{n-1}$:</p><ul><li>Converge si $|r| &lt; 1$<li>Diverge si $|r| \geq 1$</ul></blockquote><p>De esto obtenemos:</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="series-geométricas-y-aproximaciones">Series geométricas y aproximaciones</h3><p>La identidad ($\ref{eqn:sum_of_geometric_series}$) es útil para encontrar aproximaciones de $\cfrac{1}{1-r}$ cuando $|r| &lt; 1$.</p><p>Sustituyendo $r=-\epsilon$ y $n=2$ en esta ecuación:</p>\[\frac{1}{1+\epsilon} - (1 - \epsilon) = \frac{\epsilon^2}{1 + \epsilon}\]<p>Por lo tanto, si $0 &lt; \epsilon &lt; 1$:</p>\[0 &lt; \frac{1}{1 + \epsilon} - (1 - \epsilon) &lt; \epsilon^2\]<p>Así:</p>\[\frac{1}{1 + \epsilon} \approx (1 - \epsilon) \pm \epsilon^2 \qquad (0 &lt; \epsilon &lt; 1)\]<p>Esto nos muestra que para un valor positivo $\epsilon$ suficientemente pequeño, $\cfrac{1}{1 + \epsilon}$ puede aproximarse como $1 - \epsilon$.</p><h2 id="criterio-de-las-series-p-p-series-test">Criterio de las series p (p-Series Test)</h2><p>Para un número real positivo $p$, una serie de la forma:</p>\[\sum_{n=1}^{\infty} \frac{1}{n^p}\]<p>se denomina <strong>serie p</strong>.</p><blockquote class="prompt-info"><p><strong>Convergencia/divergencia de series p</strong><br /> La serie p $\sum \cfrac{1}{n^p}$:</p><ul><li>Converge si $p&gt;1$<li>Diverge si $p\leq 1$</ul></blockquote><p>En el caso de $p=1$, la serie p se convierte en la serie armónica, que como ya vimos, diverge.<br /> El problema de encontrar el valor de la serie p cuando $p=2$, es decir, $\sum \cfrac{1}{n^2}$, se conoce como el “problema de Basilea” (Basel problem), nombrado así por la ciudad natal de la familia Bernoulli, que produjo varios matemáticos famosos a lo largo de generaciones. Se sabe que la respuesta a este problema es $\cfrac{\pi^2}{6}$.</p><p>Más generalmente, la serie p para $p&gt;1$ se conoce como la <strong>función zeta (zeta function)</strong>. Esta es una función especial introducida por Leonhard Euler en el año 11740 <a href="https://en.wikipedia.org/wiki/Holocene_calendar">HE</a> y posteriormente nombrada por Riemann, definida como:</p>\[\zeta(s) := \sum_{n=1}^{\infty} \frac{1}{n^s} \qquad (s&gt;1)\]<p>Aunque se desvía un poco del tema principal de este artículo, y siendo sincero, como estudiante de ingeniería y no matemático, no profundizaré en ello, pero Leonhard Euler demostró que la función zeta también puede expresarse como un producto infinito de números primos, conocido como el <strong>producto de Euler (Euler Product)</strong>. Posteriormente, la función zeta ha ocupado un lugar central en varios campos de la teoría analítica de números. La <strong>función zeta de Riemann (Riemann zeta function)</strong>, que extiende el dominio de la función zeta a los números complejos, y la importante conjetura no resuelta conocida como la <strong>hipótesis de Riemann (Riemann hypothesis)</strong> son parte de este campo.</p><p>Volviendo a nuestro tema, la demostración del criterio de las series p requiere el <a href="#criterio-de-comparación">criterio de comparación</a> y el <a href="#criterio-de-la-integral">criterio de la integral</a> que veremos más adelante. Sin embargo, la convergencia/divergencia de las series p, junto con las series geométricas, puede ser útil en el <a href="#criterio-de-comparación">criterio de comparación</a> que veremos a continuación, por lo que intencionalmente lo he colocado antes.</p><h3 id="demostración-1">Demostración</h3><h4 id="i-cuando-p1">i) Cuando $p&gt;1$</h4><p>La integral:</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, por lo que según el <a href="#criterio-de-la-integral">criterio de la integral</a>, la serie $\sum \cfrac{1}{n^p}$ también converge.</p><h4 id="ii-cuando-pleq-1">ii) Cuando $p\leq 1$</h4><p>En este caso:</p>\[0 \leq \frac{1}{n} \leq \frac{1}{n^p}\]<p>Sabemos que la serie armónica $\sum \cfrac{1}{n}$ diverge, por lo que según el <a href="#criterio-de-comparación">criterio de comparación</a>, $\sum \cfrac{1}{n^p}$ también diverge.</p><h4 id="conclusión">Conclusión</h4><p>Por i) y ii), la serie p $\sum \cfrac{1}{n^p}$ converge si $p&gt;1$ y diverge si $p \leq 1$. $\blacksquare$</p><h2 id="criterio-de-comparación">Criterio de comparación</h2><p>El <strong>criterio de comparación (Comparison Test)</strong> de Jakob Bernoulli es útil para determinar la convergencia o divergencia de <strong>series de términos positivos (series of positive terms)</strong>, que son series cuyos términos generales son números reales no negativos.</p><p>Una serie de términos positivos $\sum a_n$ forma una sucesión creciente, por lo que si no diverge a infinito ($\sum a_n = \infty$), entonces necesariamente converge. Por lo tanto, en series de términos positivos, la expresión:</p>\[\sum a_n &lt; \infty\]<p>significa que <u>la serie converge</u>.</p><blockquote class="prompt-info"><p><strong>Criterio de comparación (Comparison Test)</strong><br /> Si $0 \leq a_n \leq b_n$, entonces:</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 particular, para series de términos positivos como $\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}}$, que tienen formas similares a las series geométricas $\sum ar^{n-1}$ o series p $\sum \cfrac{1}{n^p}$ que vimos anteriormente, es recomendable intentar aplicar el criterio de comparación.</p><p>Muchos de los otros criterios de convergencia/divergencia que veremos más adelante pueden derivarse de este <strong>criterio de comparación</strong>, lo que lo hace particularmente importante.</p><h3 id="criterio-de-comparación-por-límite">Criterio de comparación por límite</h3><p>Para series de términos positivos $\sum a_n$ y $\sum b_n$, si el cociente de sus términos generales $a_n/b_n$ tiene un límite $\lim_{n\to\infty} \cfrac{a_n}{b_n}=c$ (donde $c$ es un número positivo finito) debido a la cancelación de términos dominantes en el numerador y denominador, y conocemos la convergencia o divergencia de la serie $\sum b_n$, podemos utilizar el siguiente <strong>criterio de comparación por límite (Limit Comparison Test)</strong>.</p><blockquote class="prompt-info"><p><strong>Criterio de comparación por límite (Limit Comparison Test)</strong><br /> Si:</p>\[\lim_{n\to\infty} \frac{a_n}{b_n} = c \text{ (donde }c\text{ es un número positivo finito)}\]<p>entonces ambas series $\sum a_n$ y $\sum b_n$ convergen o ambas divergen. Es decir, $ \sum a_n &lt; \infty \ \Leftrightarrow \ \sum b_n &lt; \infty$.</p></blockquote><h2 id="criterio-de-la-raíz">Criterio de la raíz</h2><blockquote class="prompt-info"><p><strong>Teorema</strong><br /> Para una serie de términos positivos $\sum a_n$ y un número positivo $\epsilon &lt; 1$:</p><ul><li>Si $\sqrt[n]{a_n}&lt; 1-\epsilon$ para todo $n$, entonces la serie $\sum a_n$ converge<li>Si $\sqrt[n]{a_n}&gt; 1+\epsilon$ para todo $n$, entonces la serie $\sum a_n$ diverge</ul></blockquote><blockquote class="prompt-info"><p><strong>Corolario: Criterio de la raíz (Root Test)</strong><br /> Para una serie de términos positivos $\sum a_n$, si existe el límite:</p>\[\lim_{n\to\infty} \sqrt[n]{a_n} =: r\]<p>Entonces:</p><ul><li>Si $r&lt;1$, la serie $\sum a_n$ converge<li>Si $r&gt;1$, la serie $\sum a_n$ diverge</ul></blockquote><blockquote class="prompt-warning"><p>En el corolario anterior, si $r=1$, no podemos determinar la convergencia o divergencia, por lo que debemos usar otro método.</p></blockquote><h2 id="criterio-del-cociente">Criterio del cociente</h2><blockquote class="prompt-info"><p><strong>Criterio del cociente (Ratio Test)</strong><br /> Para una sucesión de números positivos $(a_n)$ y $0 &lt; r &lt; 1$:</p><ul><li>Si $a_{n+1}/a_n \leq r$ para todo $n$, entonces la serie $\sum a_n$ converge<li>Si $a_{n+1}/a_n \geq 1$ para todo $n$, entonces la serie $\sum a_n$ diverge</ul></blockquote><blockquote class="prompt-info"><p><strong>Corolario</strong><br /> Para una sucesión de números positivos $(a_n)$, si existe el límite $\rho := \lim_{n\to\infty} \cfrac{a_{n+1}}{a_n}$:</p><ul><li>Si $\rho &lt; 1$, entonces la serie $\sum a_n$ converge<li>Si $\rho &gt; 1$, entonces la serie $\sum a_n$ diverge</ul></blockquote><h2 id="criterio-de-la-integral">Criterio de la integral</h2><p>El cálculo integral puede utilizarse para determinar la convergencia o divergencia de series compuestas por sucesiones decrecientes de términos positivos.</p><blockquote class="prompt-info"><p><strong>Criterio de la integral (Integral Test)</strong><br /> Si $f: \left[1,\infty \right) \rightarrow \mathbb{R}$ es una función continua, decreciente y siempre $f(x)&gt;0$, entonces la serie $\sum f(n)$ converge si y solo si la integral:</p>\[\int_1^\infty f(x)\ dx := \lim_{b\to\infty} \int_1^b f(x)\ dx\]<p>converge.</p></blockquote><h3 id="demostración-2">Demostración</h3><p>Si la función $f(x)$ es continua, decreciente y siempre positiva, entonces se cumple la desigualdad:</p>\[f(n+1) \leq \int_n^{n+1} f(x)\ dx \leq f(n)\]<p>Sumando esta desigualdad desde $n=1$ hasta el término general, obtenemos:</p>\[f(2) + \cdots + f(n+1) \leq \int_1^{n+1} f(x)\ dx \leq f(1) + \cdots + f(n)\]<p>Aplicando el <a href="#criterio-de-comparación">criterio de comparación</a>, obtenemos el resultado deseado. $\blacksquare$</p><h2 id="series-alternadas">Series alternadas</h2><p>Una <strong>serie alternada (alternating series)</strong> es una serie $\sum a_n$ cuyos términos $a_n$ no son cero y tienen signos alternados, es decir, el signo de cada término $a_n$ es diferente al del siguiente término $a_{n+1}$.</p><p>Para las series alternadas, el siguiente teorema descubierto por el matemático alemán Gottfried Wilhelm Leibniz puede ser útil para determinar su convergencia o divergencia.</p><blockquote class="prompt-info"><p><strong>Criterio de las series alternadas (Alternating Series Test)</strong><br /> Si:</p><ol><li>Los signos de $a_n$ y $a_{n+1}$ son diferentes para todo $n$,<li>$|a_n| \geq |a_{n+1}|$ para todo $n$, y<li>$\lim_{n\to\infty} a_n = 0$,</ol><p>entonces la serie alternada $\sum a_n$ converge.</p></blockquote><h2 id="series-absolutamente-convergentes">Series absolutamente convergentes</h2><p>Se dice que una serie $\sum a_n$ <strong>converge absolutamente (converge absolutely)</strong> si la serie $\sum |a_n|$ converge.</p><p>En este caso, se cumple el siguiente teorema:</p><blockquote class="prompt-info"><p><strong>Teorema</strong><br /> Una serie absolutamente convergente es convergente.</p></blockquote><blockquote class="prompt-warning"><p>El recíproco del teorema anterior no es cierto.<br /> Cuando una serie converge pero no converge absolutamente, se dice que <strong>converge condicionalmente (converge conditionally)</strong>.</p></blockquote><h3 id="demostración-3">Demostración</h3><p>Para un número real $a$, definimos:</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>Entonces:</p>\[a = a^+ - a^-, \qquad |a| = a^+ + a^-\]<p>Como $0 \leq a^\pm \leq |a|$, por el <a href="#criterio-de-comparación">criterio de comparación</a>, si la serie $\sum |a_n|$ converge, entonces las series $\sum a_n^+$ y $\sum a_n^-$ también convergen, y por las <a href="/es/posts/sequences-and-series/#propiedades-básicas-de-las-series-convergentes">propiedades básicas de las series convergentes</a>:</p>\[\sum a_n = \sum (a_n^+ - a_n^-) = \sum a_n^+ - \sum a_n^-\]<p>también converge. $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="es">Sucesiones y series</title><link href="https://www.yunseo.kim/es/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/es/posts/sequences-and-series/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Calculus" /> <summary xml:lang="es">Exploramos conceptos básicos del cálculo como la definición de sucesiones y series, convergencia y divergencia de sucesiones, convergencia y divergencia de series, y la definición del número e como base del logaritmo natural.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Exploramos conceptos básicos del cálculo como la definición de sucesiones y series, convergencia y divergencia de sucesiones, convergencia y divergencia de series, y la definición del número e como base del logaritmo natural.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="sucesiones">Sucesiones</h2><p>En cálculo, una <strong>sucesión (sequence)</strong> generalmente se refiere a una sucesión infinita. Es decir, una sucesión es una función definida en el conjunto de todos los <strong>números naturales (natural numbers)</strong></p>\[\mathbb{N} := \{1,2,3,\dots\}\]<p>Si los valores de esta función son números reales, se llama ‘sucesión real’, si son números complejos, ‘sucesión compleja’, si son puntos, ‘sucesión de puntos’, si son matrices, ‘sucesión de matrices’, si son funciones, ‘sucesión de funciones’, si son conjuntos, ‘sucesión de conjuntos’, etc., pero todos estos pueden ser simplemente referidos como ‘sucesión’.</p><p>Normalmente, para el <strong>cuerpo de los números reales (the field of real numbers)</strong> $\mathbb{R}$, en una sucesión $\mathbf{a}: \mathbb{N} \to \mathbb{R}$, se denota</p>\[a_1 := \mathbf{a}(1), \quad a_2 := \mathbf{a}(2), \quad a_3 := \mathbf{a}(3)\]<p>y esta sucesión se representa como</p>\[a_1,\, a_2,\, a_3,\, \dots\]<p>o</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>*En el proceso de definir una sucesión, en lugar del conjunto de todos los números naturales $\mathbb{N}$, el dominio puede ser el conjunto de enteros no negativos</p>\[\mathbb{N}_0 := \{0\} \cup \mathbb{N} = \{0,1,2,\dots\}\]<p>o</p>\[\{2,3,4,\dots \}\]<p>Por ejemplo, al tratar la teoría de las series de potencias, es más natural que el dominio sea $\mathbb{N}_0$.</p></blockquote><h2 id="convergencia-y-divergencia">Convergencia y divergencia</h2><p>Si una sucesión $(a_n)$ converge a un número real $l$, se escribe</p>\[\lim_{n\to \infty} a_n = l\]<p>y $l$ se llama el <strong>valor límite</strong> de la sucesión $(a_n)$.</p><blockquote class="prompt-info"><p>La definición rigurosa utilizando el <strong>argumento épsilon-delta (epsilon-delta argument)</strong> es la siguiente:</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>Es decir, si para cualquier número positivo $\epsilon$, por pequeño que sea, siempre existe un número natural $N$ tal que $|a_n - l | &lt; \epsilon$ cuando $n&gt;N$, significa que la diferencia entre $a_n$ y $l$ se vuelve arbitrariamente pequeña para $n$ suficientemente grande, por lo que se define que una sucesión $(a_n)$ que satisface esto converge al número real $l$.</p></blockquote><p>Se dice que una sucesión que no converge <strong>diverge</strong>. <em>La convergencia o divergencia de una sucesión no cambia si se modifican un número finito de sus términos.</em></p><p>Si cada término de la sucesión $(a_n)$ crece indefinidamente, se escribe</p>\[\lim_{n\to \infty} a_n = \infty\]<p>y se dice que <em>diverge a más infinito</em>. De manera similar, si cada término de la sucesión $(a_n)$ decrece indefinidamente, se escribe</p>\[\lim_{n\to \infty} a_n = -\infty\]<p>y se dice que <em>diverge a menos infinito</em>.</p><h2 id="propiedades-básicas-de-las-sucesiones-convergentes">Propiedades básicas de las sucesiones convergentes</h2><p>Si las sucesiones $(a_n)$ y $(b_n)$ convergen (es decir, tienen valores límite), las sucesiones $(a_n + b_n)$ y $(a_n \cdot b_n)$ también convergen, y en este caso</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>Además, para cualquier número real $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>Estas propiedades se conocen como <strong>propiedades básicas de las sucesiones convergentes</strong> o <strong>propiedades básicas del límite</strong>.</p><h2 id="la-base-e-del-logaritmo-natural">La base $e$ del logaritmo natural</h2><p><strong>La base del logaritmo natural</strong> se define como</p>\[e := \lim_{n\to \infty} \left(1+\frac{1}{n} \right)^n \approx 2.718\]<p>Esta es una de las constantes más importantes en matemáticas.</p><blockquote class="prompt-tip"><p>Aunque en Corea se usa ampliamente la expresión ‘constante natural’, este no es un término estándar. El término oficial registrado en el diccionario de términos matemáticos de la Sociedad Matemática de Corea es <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 del logaritmo natural’</a>, y la expresión ‘constante natural’ no se encuentra en dicho diccionario. Incluso en el Diccionario Estándar del Instituto Nacional de la Lengua Coreana, no se puede encontrar la palabra ‘constante natural’, y en 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">definición de diccionario de ‘logaritmo natural’</a> solo se menciona como “un número específico comúnmente denotado por e”.<br /> En los países de habla inglesa y en Japón tampoco existe un término correspondiente, y en inglés generalmente se refiere como ‘the base of the natural logarithm’ o abreviado como ‘natural base’, o ‘Euler’s number’ o ‘the number $e$’.<br /> No hay razón para insistir en un término cuyo origen es incierto, que nunca ha sido reconocido oficialmente por la Sociedad Matemática de Corea, y que no se usa en ninguna parte del mundo excepto en Corea, así que de ahora en adelante aquí me referiré a él como ‘la base del logaritmo natural’ o simplemente lo denotaré como $e$.</p></blockquote><h2 id="series">Series</h2><p>Dada una sucesión</p>\[\mathbf{a} = (a_1, a_2, a_3, \dots)\]<p>la nueva sucesión formada por las sumas parciales de esta sucesión</p>\[a_1, \quad a_1 + a_2, \quad a_1 + a_2 + a_3, \quad \dots\]<p>se llama <strong>serie</strong> de la sucesión $\mathbf{a}$. La serie de la sucesión $(a_n)$ se denota como</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="convergencia-y-divergencia-de-series">Convergencia y divergencia de series</h2><p>Si la serie obtenida de la sucesión $(a_n)$</p>\[a_1, \quad a_1 + a_2, \quad a_1 + a_2 + a_3, \quad \dots\]<p>converge a algún número real $l$, se denota como</p>\[\sum_{n=1}^{\infty} a_n = l\]<p>En este caso, el valor límite $l$ se llama la <strong>suma</strong> de la serie $\sum a_n$. El símbolo</p>\[\sum a_n\]<p>puede representar tanto la <u>serie</u> como la <u>suma de la serie</u>, dependiendo del contexto.</p><p>Se dice que una serie que no converge <strong>diverge</strong>.</p><h2 id="propiedades-básicas-de-las-series-convergentes">Propiedades básicas de las series convergentes</h2><p>De las <a href="#propiedades-básicas-de-las-sucesiones-convergentes">propiedades básicas de las sucesiones convergentes</a>, obtenemos las siguientes propiedades básicas de las series convergentes. Para un número real $t$ y dos series convergentes $\sum a_n$, $\sum b_n$, se cumple que</p>\[\sum(a_n + b_n) = \sum a_n + \sum b_n, \qquad \sum ta_n = t\sum a_n \tag{4}\]<p>La convergencia de una serie no se ve afectada por el cambio de un número finito de términos. Es decir, si para dos sucesiones $(a_n)$, $(b_n)$, $a_n=b_n$ excepto para un número finito de $n$, la serie $\sum a_n$ converge si y solo si la serie $\sum b_n$ converge.</p>]]> </content> </entry> <entry><title xml:lang="es">Las leyes del movimiento de Newton</title><link href="https://www.yunseo.kim/es/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/es/posts/newtons-laws-of-motion/</id> <author> <name>Yunseo Kim</name> </author> <category term="Physics" /> <category term="Classical Dynamics" /> <summary xml:lang="es">Exploramos las leyes del movimiento de Newton y el significado de estas tres leyes, así como las definiciones de masa inercial y masa gravitacional, y examinamos el principio de equivalencia, que tiene un significado importante no solo en la mecánica clásica sino también en la teoría general de la relatividad.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Exploramos las leyes del movimiento de Newton y el significado de estas tres leyes, así como las definiciones de masa inercial y masa gravitacional, y examinamos el principio de equivalencia, que tiene un significado importante no solo en la mecánica clásica sino también en la teoría general de la relatividad.</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>Leyes del movimiento de Newton (Newton’s laws of motion)</strong></p><ol><li>Todo cuerpo permanece en estado de reposo o movimiento rectilíneo uniforme a menos que actúe sobre él una fuerza externa.<li>La tasa de cambio del momento lineal de un cuerpo es igual a la fuerza aplicada sobre él.<ul><li>$\vec{F} = \cfrac{d\vec{p}}{dt} = \cfrac{d}{dt}(m\vec{v}) = m\vec{a}$</ul><li>Cuando dos cuerpos ejercen fuerzas entre sí, estas fuerzas son iguales en magnitud y opuestas en dirección.<ul><li>$\vec{F_1} = -\vec{F_2}$</ul></ol></blockquote><blockquote class="prompt-info"><p><strong>Principio de equivalencia (principle of equivalence)</strong></p><ul><li>Masa inercial: La masa que determina la aceleración de un cuerpo cuando se le aplica una fuerza<li>Masa gravitacional: La masa que determina la fuerza gravitacional entre un cuerpo y otro<li>Actualmente se sabe que la masa inercial y la masa gravitacional coinciden claramente con un margen de error de aproximadamente $10^{-12}$<li>La afirmación de que la masa inercial y la masa gravitacional son exactamente iguales se conoce como el <strong>principio de equivalencia</strong></ul></blockquote><h2 id="las-leyes-del-movimiento-de-newton">Las leyes del movimiento de Newton</h2><p>Las leyes del movimiento de Newton son tres leyes publicadas por Isaac Newton en su obra Philosophiæ Naturalis Principia Mathematica (Principios matemáticos de la filosofía natural, abreviado como ‘Principia’) en el año 11687 del <a href="https://en.wikipedia.org/wiki/Holocene_calendar">calendario holoceno</a>, y constituyen la base de la mecánica newtoniana.</p><ol><li>Todo cuerpo permanece en estado de reposo o movimiento rectilíneo uniforme a menos que actúe sobre él una fuerza externa.<li>La tasa de cambio del momento lineal de un cuerpo es igual a la fuerza aplicada sobre él.<li>Cuando dos cuerpos ejercen fuerzas entre sí, estas fuerzas son iguales en magnitud y opuestas en dirección.</ol><h3 id="primera-ley-de-newton">Primera ley de Newton</h3><blockquote><p>I. Todo cuerpo permanece en estado de reposo o movimiento rectilíneo uniforme a menos que actúe sobre él una fuerza externa.</p></blockquote><p>Un cuerpo en este estado, sin fuerzas externas actuando sobre él, se denomina <strong>cuerpo libre (free body)</strong> o <strong>partícula libre (free particle)</strong>. Sin embargo, la primera ley por sí sola solo proporciona un concepto cualitativo de la fuerza.</p><h3 id="segunda-ley-de-newton">Segunda ley de Newton</h3><blockquote><p>II. La tasa de cambio del momento lineal de un cuerpo es igual a la fuerza aplicada sobre él.</p></blockquote><p>Newton definió el <strong>momento lineal (momentum)</strong> como el producto de la masa por la velocidad:</p>\[\vec{p} \equiv m\vec{v} \label{eqn:momentum}\tag{1}\]<p>A partir de esto, la segunda ley de Newton puede expresarse como:</p>\[\vec{F} = \frac{d\vec{p}}{dt} = \frac{d}{dt}(m\vec{v}) = m\vec{a}. \label{eqn:2nd_law}\tag{2}\]<p>La primera y segunda leyes de Newton, a pesar de su nombre, son en realidad más cercanas a una ‘definición’ de fuerza que a ‘leyes’. También podemos observar que la definición de fuerza depende de la definición de ‘masa’.</p><h3 id="tercera-ley-de-newton">Tercera ley de Newton</h3><blockquote><p>III. Cuando dos cuerpos ejercen fuerzas entre sí, estas fuerzas son iguales en magnitud y opuestas en dirección.</p></blockquote><p>También conocida como la ‘ley de acción y reacción’, esta ley física se aplica cuando la fuerza que un cuerpo ejerce sobre otro está dirigida a lo largo de la línea recta que une los dos puntos de acción. Este tipo de fuerza se denomina <strong>fuerza central (central force)</strong>, y la tercera ley se cumple independientemente de si la fuerza central es atractiva o repulsiva. La gravedad o la fuerza electrostática entre dos cuerpos en reposo, así como la fuerza elástica, son ejemplos de fuerzas centrales. Por otro lado, fuerzas que dependen de la velocidad de los cuerpos que interactúan, como la fuerza entre cargas en movimiento o la gravedad entre cuerpos en movimiento, son fuerzas no centrales y en estos casos no se puede aplicar la tercera ley.</p><p>Teniendo en cuenta la definición de masa que hemos visto, podemos reformular la tercera ley de la siguiente manera:</p><blockquote><p>III$^\prime$. Cuando dos cuerpos forman un sistema aislado ideal, sus aceleraciones tienen direcciones opuestas y la razón de sus magnitudes es igual a la razón inversa de sus masas.</p></blockquote><p>Por la tercera ley de Newton:</p>\[\vec{F_1} = -\vec{F_2} \label{eqn:3rd_law}\tag{3}\]<p>Y sustituyendo la segunda ley ($\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>De esto podemos deducir que el momento lineal se conserva en la interacción aislada entre dos partículas:</p>\[\frac{d}{dt}(\vec{p_1}+\vec{p_2}) = 0 \label{eqn:conservation_of_momentum}\tag{5}\]<p>Además, de la ecuación ($\ref{eqn:3rd-1_law}$), dado que $\vec{p}=m\vec{v}$ y la masa $m$ es 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>Obteniendo:</p>\[\frac{m_2}{m_1} = -\frac{a_1}{a_2}. \tag{7}\]<p>Aunque la tercera ley de Newton describe el caso en que dos cuerpos forman un sistema aislado, en realidad es imposible realizar tales condiciones ideales, por lo que la afirmación de Newton en la tercera ley podría considerarse bastante audaz. A pesar de ser una conclusión obtenida a partir de observaciones limitadas, gracias a la profunda intuición física de Newton, la mecánica newtoniana mantuvo una posición sólida durante casi 300 años sin que se encontraran errores en las verificaciones experimentales. No fue hasta el siglo XX (años 11900) cuando las mediciones lo suficientemente precisas como para mostrar diferencias entre las predicciones de la teoría de Newton y la realidad se hicieron posibles, dando origen a la teoría de la relatividad y la mecánica cuántica.</p><h2 id="masa-inercial-y-masa-gravitacional">Masa inercial y masa gravitacional</h2><p>Una forma de determinar la masa de un objeto es comparar su peso con un peso estándar utilizando instrumentos como una balanza. Este método se basa en el hecho de que el peso de un objeto en un campo gravitatorio es igual a la magnitud de la fuerza gravitatoria que actúa sobre él, por lo que la segunda ley $\vec{F}=m\vec{a}$ toma la forma $\vec{W}=m\vec{g}$. Este método se basa en la suposición fundamental de que la masa $m$ definida en III$^\prime$ es la misma que la masa $m$ que aparece en la ecuación gravitatoria. Estas dos masas se denominan <strong>masa inercial (inertial mass)</strong> y <strong>masa gravitacional (gravitational mass)</strong> respectivamente, y se definen como:</p><ul><li>Masa inercial: La masa que determina la aceleración de un objeto cuando se le aplica una fuerza<li>Masa gravitacional: La masa que determina la fuerza gravitacional entre un objeto y otro</ul><p>Aunque es una historia inventada posteriormente y no tiene relación con Galileo Galilei, el experimento de la caída desde la Torre de Pisa es un experimento mental que mostró por primera vez que la masa inercial y la masa gravitacional deberían ser iguales. Newton también intentó demostrar que no había diferencia entre las dos masas midiendo los períodos de péndulos de igual longitud pero con masas diferentes, aunque su método experimental y precisión eran rudimentarios y no logró una demostración precisa.</p><p>A finales del siglo XIX (años 11800), el físico húngaro Eötvös Loránd Ágoston realizó el experimento de Eötvös para medir con precisión la diferencia entre la masa inercial y la masa gravitacional, demostrando su igualdad con una precisión considerable (dentro de un margen de error de 1 en 20 millones).</p><p>Experimentos más recientes realizados por Robert Henry Dicke y otros han aumentado aún más la precisión, y actualmente se sabe que la masa inercial y la masa gravitacional coinciden claramente con un margen de error de aproximadamente $10^{-12}$. Este resultado tiene un significado extremadamente importante en la teoría general de la relatividad, y la afirmación de que la masa inercial y la masa gravitacional son exactamente iguales se conoce como el <strong>principio de equivalencia (principle of equivalence)</strong>.</p>]]> </content> </entry> <entry><title xml:lang="es">EDO lineal homogénea de segundo orden con coeficientes constantes</title><link href="https://www.yunseo.kim/es/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-11T21:22:11+09:00</updated> <id>https://www.yunseo.kim/es/posts/homogeneous-linear-odes-with-constant-coefficients/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="es">Se examina cómo la forma de la solución general de una ecuación diferencial ordinaria lineal homogénea con coeficientes constantes varía según el signo del discriminante de la ecuación característica en cada caso.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Se examina cómo la forma de la solución general de una ecuación diferencial ordinaria lineal homogénea con coeficientes constantes varía según el signo del discriminante de la ecuación característica en cada caso.</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 lineal homogénea de segundo orden con coeficientes constantes: $y^{\prime\prime} + ay^{\prime} + by = 0$<li><strong>Ecuación característica</strong>: $\lambda^2 + a\lambda + b = 0$<li>Según el signo del discriminante $a^2 - 4b$ de la ecuación característica, la forma de la solución general se puede dividir en tres casos como se muestra en la tabla</ul><table><thead><tr><th style="text-align: center">Caso<th style="text-align: center">Raíces de la ecuación característica<th style="text-align: center">Base de soluciones de la EDO<th style="text-align: center">Solución general de la EDO<tbody><tr><td style="text-align: center">I<td style="text-align: center">Raíces reales distintas<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">Raíz real doble<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">Raíces complejas conjugadas<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="prerrequisitos">Prerrequisitos</h2><ul><li><a href="/es/posts/Bernoulli-Equation/">Ecuación de Bernoulli</a><li><a href="/es/posts/homogeneous-linear-odes-of-second-order/">EDOs lineales homogéneas de segundo orden</a><li>Fórmula de Euler</ul><h2 id="ecuación-característica">Ecuación característica</h2><p>Consideremos la EDO lineal homogénea de segundo orden donde los coeficientes $a$ y $b$ son constantes</p>\[y^{\prime\prime} + ay^{\prime} + by = 0 \label{eqn:ode_with_constant_coefficients}\tag{1}\]<p>Este tipo de ecuación tiene importantes aplicaciones en vibraciones mecánicas y eléctricas.</p><p>Anteriormente, en la <a href="/es/posts/Bernoulli-Equation/">Ecuación de Bernoulli</a>, obtuvimos la solución general de la ecuación logística, y según eso, la EDO lineal de primer orden con coeficiente constante $k$</p>\[y^\prime + ky = 0\]<p>tiene como solución la función exponencial $y = ce^{-kx}$. (Caso donde $A=-k$, $B=0$ en la ecuación (4) de ese artículo)</p><p>Por lo tanto, para la ecuación ($\ref{eqn:ode_with_constant_coefficients}$) de forma similar, podemos intentar primero una solución de la forma</p>\[y=e^{\lambda x}\label{eqn:general_sol}\tag{2}\]<blockquote class="prompt-info"><p>Por supuesto, esto es solo una conjetura, y no hay garantía alguna de que la solución general tenga realmente esta forma. Sin embargo, si logramos encontrar dos soluciones linealmente independientes, como vimos en <a href="/es/posts/homogeneous-linear-odes-of-second-order/#base-y-solución-general">EDOs lineales homogéneas de segundo orden</a>, podemos obtener la solución general mediante el <a href="/es/posts/homogeneous-linear-odes-of-second-order/#principio-de-superposición">principio de superposición</a>.<br /> Como veremos en breve, <a href="#ii-raíz-real-doble-lambda---cfraca2">también hay casos donde debemos encontrar soluciones de otra forma</a>.</p></blockquote><p>Sustituyendo la ecuación ($\ref{eqn:general_sol}$) y sus derivadas</p>\[y^\prime = \lambda e^{\lambda x}, \quad y^{\prime\prime} = \lambda^2 e^{\lambda x}\]<p>en la ecuación ($\ref{eqn:ode_with_constant_coefficients}$), obtenemos</p>\[(\lambda^2 + a\lambda + b)e^{\lambda x} = 0\]<p>Por lo tanto, si $\lambda$ es una solución de la <strong>ecuación característica</strong></p>\[\lambda^2 + a\lambda + b = 0 \label{eqn:characteristic_eqn}\tag{3}\]<p>entonces la función exponencial ($\ref{eqn:general_sol}$) es una solución de la EDO ($\ref{eqn:ode_with_constant_coefficients}$). Resolviendo la ecuación cuadrática ($\ref{eqn:characteristic_eqn}$), obtenemos</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>y de esto, las dos funciones</p>\[y_1 = e^{\lambda_1 x}, \quad y_2 = e^{\lambda_2 x} \tag{5}\]<p>se convierten en soluciones de la ecuación ($\ref{eqn:ode_with_constant_coefficients}$).</p><blockquote class="prompt-tip"><p>Los términos <strong>ecuación característica</strong> y <strong>ecuación auxiliar</strong> se usan frecuentemente de manera intercambiable, y ambos tienen exactamente el mismo significado. Se puede usar cualquiera de los dos términos.</p></blockquote><p>Ahora, podemos dividir en tres casos según el signo del discriminante $a^2 - 4b$ de la ecuación característica ($\ref{eqn:characteristic_eqn}$).</p><ul><li>$a^2 - 4b &gt; 0$: dos raíces reales distintas<li>$a^2 - 4b = 0$: raíz real doble<li>$a^2 - 4b &lt; 0$: raíces complejas conjugadas</ul><h2 id="forma-de-la-solución-general-según-el-signo-del-discriminante-de-la-ecuación-característica">Forma de la solución general según el signo del discriminante de la ecuación característica</h2><h3 id="i-dos-raíces-reales-distintas-lambda_1-y-lambda_2">I. Dos raíces reales distintas $\lambda_1$ y $\lambda_2$</h3><p>En este caso, la base de soluciones de la ecuación ($\ref{eqn:ode_with_constant_coefficients}$) en cualquier intervalo es</p>\[y_1 = e^{\lambda_1 x}, \quad y_2 = e^{\lambda_2 x}\]<p>y la solución general correspondiente es</p>\[y = c_1 e^{\lambda_1 x} + c_2 e^{\lambda_2 x} \label{eqn:general_sol_1}\tag{6}\]<h3 id="ii-raíz-real-doble-lambda---cfraca2">II. Raíz real doble $\lambda = -\cfrac{a}{2}$</h3><p>Cuando $a^2 - 4b = 0$, la ecuación cuadrática ($\ref{eqn:characteristic_eqn}$) tiene solo una solución $\lambda = \lambda_1 = \lambda_2 = -\cfrac{a}{2}$, por lo que solo podemos obtener una solución de la forma $y = e^{\lambda x}$:</p>\[y_1 = e^{-(a/2)x}\]<p>Para obtener una base, necesitamos encontrar una segunda solución $y_2$ independiente de $y_1$.</p><p>En esta situación, podemos utilizar la <a href="/es/posts/homogeneous-linear-odes-of-second-order/#reducción-de-orden">reducción de orden</a> que estudiamos anteriormente. Poniendo la segunda solución que buscamos como $y_2=uy_1$, y</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>Sustituyendo en la ecuación ($\ref{eqn:ode_with_constant_coefficients}$), obtenemos</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>Agrupando los términos de $u^{\prime\prime}$, $u^\prime$, $u$, obtenemos</p>\[y_1u^{\prime\prime} + (2y_1^\prime + ay_1)u^\prime + (y_1^{\prime\prime} + ay_1^\prime + by_1)u = 0\]<p>Aquí, como $y_1$ es una solución de la ecuación ($\ref{eqn:ode_with_constant_coefficients}$), la expresión en el último paréntesis es $0$, y</p>\[2y_1^\prime = -ae^{-ax/2} = -ay_1\]<p>por lo que la expresión en el primer paréntesis también es $0$. Por lo tanto, solo queda $u^{\prime\prime}y_1 = 0$, de donde $u^{\prime\prime}=0$. Integrando dos veces, obtenemos $u = c_1x + c_2$, y como las constantes de integración $c_1$ y $c_2$ pueden tomar cualquier valor, podemos simplemente elegir $c_1=1$, $c_2=0$ para poner $u=x$. Entonces $y_2 = uy_1 = xy_1$, y como $y_1$ y $y_2$ son linealmente independientes, forman una base. Por lo tanto, cuando la ecuación característica ($\ref{eqn:characteristic_eqn}$) tiene una raíz doble, la base de soluciones de la ecuación ($\ref{eqn:ode_with_constant_coefficients}$) en cualquier intervalo es</p>\[e^{-ax/2}, \quad xe^{-ax/2}\]<p>y la solución general correspondiente es</p>\[y = (c_1 + c_2x)e^{-ax/2} \label{eqn:general_sol_2}\tag{7}\]<h3 id="iii-raíces-complejas-conjugadas--cfrac12a--iomega-y--cfrac12a---iomega">III. Raíces complejas conjugadas $-\cfrac{1}{2}a + i\omega$ y $-\cfrac{1}{2}a - i\omega$</h3><p>En este caso, $a^2 - 4b &lt; 0$ y $\sqrt{-1} = i$, por lo que en la ecuación ($\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>y aquí definamos el número real $\sqrt{b-\cfrac{1}{4}a^2} = \omega$.</p><p>Con $\omega$ definido de esta manera, las soluciones de la ecuación característica ($\ref{eqn:characteristic_eqn}$) son las raíces complejas conjugadas $\lambda = -\cfrac{1}{2}a \pm i\omega$, y las dos soluciones complejas correspondientes de la ecuación ($\ref{eqn:ode_with_constant_coefficients}$) son</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>Sin embargo, también en este caso podemos obtener una base de soluciones reales de la siguiente manera.</p><p>La fórmula de Euler</p>\[e^{it} = \cos t + i\sin t \label{eqn:euler_formula}\tag{8}\]<p>y sustituyendo $-t$ en lugar de $t$ en la ecuación anterior para obtener</p>\[e^{-it} = \cos t - i\sin t\]<p>Sumando y restando estas dos ecuaciones, obtenemos lo siguiente.</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 función exponencial compleja $e^z$ de una variable compleja $z = r + it$ con parte real $r$ y parte imaginaria $it$ se puede definir usando las funciones reales $e^r$, $\cos t$ y $\sin t$ de la siguiente manera.</p>\[e^z = e^{r + it} = e^r e^{it} = e^r(\cos t + i\sin t) \label{eqn:complex_exp}\tag{10}\]<p>Aquí, poniendo $r=-\cfrac{1}{2}ax$, $t=\omega x$, podemos escribir lo siguiente.</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>Por el <a href="/es/posts/homogeneous-linear-odes-of-second-order/#principio-de-superposición">principio de superposición</a>, las sumas y productos por constantes de las soluciones complejas anteriores también son soluciones. Por lo tanto, sumando las dos ecuaciones y multiplicando ambos lados por $\cfrac{1}{2}$, podemos obtener la primera solución real $y_1$ de la siguiente manera.</p>\[y_1 = e^{-(a/2)x} \cos{\omega x}. \label{eqn:basis_1}\tag{11}\]<p>De la misma manera, restando la segunda ecuación de la primera y multiplicando ambos lados por $\cfrac{1}{2i}$, podemos obtener la segunda solución real $y_2$.</p>\[y_2 = e^{-(a/2)x} \sin{\omega x}. \label{eqn:basis_2}\tag{12}\]<p>Como $\cfrac{y_1}{y_2} = \cot{\omega x}$ y esto no es una constante, $y_1$ y $y_2$ son linealmente independientes en todos los intervalos y por lo tanto forman una base de soluciones reales de la ecuación ($\ref{eqn:ode_with_constant_coefficients}$). De esto obtenemos la solución general</p>\[y = e^{-ax/2}(A\cos{\omega x} + B\sin{\omega x}) \quad \text{(}A,\, B\text{ son constantes arbitrarias)} \label{eqn:general_sol_3}\tag{13}\] ]]> </content> </entry> <entry><title xml:lang="es">Cómo implementar soporte multilingüe en un blog Jekyll con Polyglot (3) - Solución de problemas de fallos en la compilación del tema Chirpy y errores en la función de búsqueda</title><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="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/es/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="es">Presenta el proceso de implementación de soporte multilingüe aplicando el plugin Polyglot a un blog Jekyll basado en &apos;jekyll-theme-chirpy&apos;. Esta entrada es la tercera parte de la serie, que aborda la identificación y resolución de errores que surgen al aplicar Polyglot al tema Chirpy.</summary> <content type="html" xml:lang="es"> <![CDATA[<p>Presenta el proceso de implementación de soporte multilingüe aplicando el plugin Polyglot a un blog Jekyll basado en 'jekyll-theme-chirpy'. Esta entrada es la tercera parte de la serie, que aborda la identificación y resolución de errores que surgen al aplicar Polyglot al tema 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="introducción">Introducción</h2><p>Hace aproximadamente 4 meses, a principios de julio de 12024, implementé soporte multilingüe en este blog basado en Jekyll y alojado en GitHub Pages aplicando el plugin <a href="https://github.com/untra/polyglot">Polyglot</a>. Esta serie comparte los bugs encontrados durante el proceso de aplicación del plugin Polyglot al tema Chirpy y su proceso de resolución, así como métodos para escribir headers HTML y sitemap.xml considerando SEO. La serie consta de 3 artículos, y este es el tercer artículo de la serie.</p><ul><li>Parte 1: <a href="/es/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-1">Aplicación del plugin Polyglot y modificación de headers HTML y sitemap</a><li>Parte 2: <a href="/es/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-2">Implementación del botón de selección de idioma y localización del idioma del layout</a><li>Parte 3: Solución de problemas de fallo de compilación del tema Chirpy y errores en la función de búsqueda (este artículo)</ul><blockquote class="prompt-info"><p>Originalmente se componía de 2 partes en total, pero posteriormente se reestructuró en 3 partes debido al considerable aumento de contenido tras varias ampliaciones.</p></blockquote><h2 id="requisitos">Requisitos</h2><ul class="task-list"><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Debe poder proporcionar el resultado de la compilación (páginas web) separado por rutas de idioma (ej. <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" />Para minimizar el tiempo y esfuerzo adicional requerido para el soporte multiidioma, debe poder reconocer automáticamente el idioma según la ruta local donde se encuentra el archivo (ej. <code class="language-plaintext filepath highlighter-rouge">/_posts/ko/</code>, <code class="language-plaintext filepath highlighter-rouge">/_posts/ja/</code>) durante la compilación, sin necesidad de especificar manualmente las etiquetas ‘lang’ y ‘permalink’ en el YAML front matter de cada archivo markdown original.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />La sección header de cada página del sitio debe incluir etiquetas meta Content-Language apropiadas, etiquetas alternativas hreflang y enlaces canónicos para cumplir con las directrices SEO de Google para búsquedas multiidioma.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Debe poder proporcionar enlaces de páginas para cada versión de idioma del sitio sin omisiones en <code class="language-plaintext filepath highlighter-rouge">sitemap.xml</code>, y el propio <code class="language-plaintext filepath highlighter-rouge">sitemap.xml</code> debe existir solo uno en la ruta raíz sin duplicados.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Todas las funciones proporcionadas por el <a href="https://github.com/cotes2020/jekyll-theme-chirpy">tema Chirpy</a> deben funcionar normalmente en cada página de idioma, y si no es así, deben ser corregidas para funcionar normalmente.<ul class="task-list"><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Funcionamiento normal de las funciones ‘Recently Updated’ y ‘Trending Tags’<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />No debe ocurrir errores durante el proceso de compilación usando GitHub Actions<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Funcionamiento normal de la función de búsqueda de posts en la esquina superior derecha del blog</ul></ul><h2 id="antes-de-empezar">Antes de empezar</h2><p>Este artículo es una continuación de la <a href="/es/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-1">Parte 1</a> y la <a href="/es/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-2">Parte 2</a>, por lo que se recomienda leer los artículos anteriores primero si aún no lo has hecho.</p><h2 id="solución-de-problemas-relative_url_regex-target-of-repeat-operator-is-not-specified">Solución de problemas (‘relative_url_regex’: target of repeat operator is not specified)</h2><p>(+ 12025.10.08. Actualización) <a href="https://polyglot.untra.io/2025/09/20/polyglot.1.11.0/">Este bug se solucionó en Polyglot 1.11</a>.</p><p>Después de completar los pasos anteriores, al ejecutar el comando <code class="language-plaintext highlighter-rouge">bundle exec jekyll serve</code> para probar la compilación, apareció un error que decía <code class="language-plaintext highlighter-rouge">'relative_url_regex': target of repeat operator is not specified</code> y la compilación falló.</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>omitido<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)

...(omitido)
</span></pre></div></div><p>Después de buscar si se había reportado un problema similar, encontré <a href="https://github.com/untra/polyglot/issues/204">exactamente el mismo problema</a> ya registrado en el repositorio de Polyglot, junto con una solución.</p><p>En el archivo <a href="https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_config.yml"><code class="language-plaintext filepath highlighter-rouge">_config.yml</code></a> del tema Chirpy que estoy utilizando en este blog, existe la siguiente sección:</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>El problema está en las funciones de expresiones regulares en el archivo <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, que no pueden procesar correctamente los patrones de globbing como <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="/es/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>Hay dos formas de resolver este problema:</p><h3 id="1-hacer-un-fork-de-polyglot-y-modificar-las-partes-problemáticas">1. Hacer un fork de Polyglot y modificar las partes problemáticas</h3><p>En el momento de escribir este artículo (noviembre de 12024), la <a href="https://jekyllrb.com/docs/configuration/options/#global-configuration">documentación oficial de Jekyll</a> indica que la configuración <code class="language-plaintext highlighter-rouge">exclude</code> admite patrones de globbing de Ruby’s File.fnmatch para hacer coincidir múltiples entradas a excluir.</p><blockquote><p>“This configuration option supports Ruby’s File.fnmatch filename globbing patterns to match multiple entries to exclude.”</p></blockquote><p>Es decir, el problema no está en el tema Chirpy sino en las funciones <code class="language-plaintext highlighter-rouge">relative_url_regex()</code> y <code class="language-plaintext highlighter-rouge">absolute_url_regex()</code> de Polyglot, por lo que la solución fundamental es modificarlas para que no generen errores.</p><p><del>Como este error aún no ha sido resuelto en Polyglot,</del> como se ha indicado arriba, <a href="https://polyglot.untra.io/2025/09/20/polyglot.1.11.0/">a partir de la versión 1.11 de Polyglot el problema quedó resuelto</a>. En el momento en que se producía el problema, <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">esta entrada de blog</a>(sitio desaparecido) y</del> <a href="https://github.com/untra/polyglot/issues/204#issuecomment-2143270322">la respuesta en el problema de GitHub mencionado</a> se tomaron como referencia para hacer un fork del repositorio de Polyglot y modificar las partes problemáticas como sigue, pudiendo así usarlo en lugar del Polyglot original para solucionarlo.</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-reemplazar-los-patrones-de-globbing-en-el-archivo-_configyml-del-tema-chirpy-por-nombres-de-archivo-exactos">2. Reemplazar los patrones de globbing en el archivo ‘_config.yml’ del tema Chirpy por nombres de archivo exactos</h3><p>La solución ideal sería que este parche se incorporara al código principal de Polyglot. Sin embargo, hasta que eso suceda, habría que usar una versión bifurcada, lo que resulta engorroso ya que habría que mantenerse al día con las actualizaciones de Polyglot. Por eso, opté por un enfoque diferente.</p><p>Al revisar los archivos en la ruta raíz del <a href="https://github.com/cotes2020/jekyll-theme-chirpy">repositorio del tema Chirpy</a> que coinciden con los patrones <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>, solo hay 3 archivos:</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>Por lo tanto, se puede modificar la sección <code class="language-plaintext highlighter-rouge">exclude</code> en el archivo <code class="language-plaintext filepath highlighter-rouge">_config.yml</code> eliminando los patrones de globbing y reemplazándolos por los nombres exactos de los archivos:</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"># Modificado según 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="modificación-de-la-función-de-búsqueda">Modificación de la función de búsqueda</h2><p>Después de completar los pasos anteriores, casi todas las funciones del sitio funcionaban según lo previsto. Sin embargo, descubrí tardíamente que la barra de búsqueda ubicada en la esquina superior derecha de las páginas con el tema Chirpy no indexaba las páginas en idiomas distintos al <code class="language-plaintext highlighter-rouge">site.default_lang</code> (inglés en el caso de este blog), y al realizar búsquedas en páginas de idiomas distintos al inglés, mostraba enlaces a páginas en inglés como resultados.</p><p>Para entender la causa, examinemos qué archivos están involucrados en la función de búsqueda y dónde se produce el problema.</p><h3 id="_layoutsdefaulthtml">‘_layouts/default.html’</h3><p>Al revisar el archivo <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> que forma la estructura de todas las páginas del blog, se puede ver que dentro del elemento <code class="language-plaintext highlighter-rouge">&lt;body&gt;</code> se cargan los contenidos de <code class="language-plaintext filepath highlighter-rouge">search-results.html</code> y <code class="language-plaintext filepath highlighter-rouge">search-loader.html</code>.</p><div file="\_layouts/default.html" class="language-liquid highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre><td class="rouge-code"><pre>  &lt;body&gt;
    <span class="cp">{%</span><span class="w"> </span><span class="nt">include</span><span class="w"> </span>sidebar.html<span class="w"> </span><span class="na">lang</span><span class="o">=</span><span class="nv">lang</span><span class="w"> </span><span class="cp">%}</span>

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

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

    (...omitido...)

    <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> configura el contenedor <code class="language-plaintext highlighter-rouge">search-results</code> para almacenar los resultados de búsqueda cuando se introduce una palabra clave en el campo de búsqueda.</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> es la parte central que implementa la búsqueda basada en la biblioteca <a href="https://github.com/christian-fei/Simple-Jekyll-Search">Simple-Jekyll-Search</a>. Este archivo contiene JavaScript que se ejecuta en el navegador del visitante para encontrar coincidencias con las palabras clave de entrada en el archivo de índice <a href="#assetsjsdatasearchjson"><code class="language-plaintext filepath highlighter-rouge">search.json</code></a> y devolver enlaces a las publicaciones correspondientes como elementos <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>Este archivo utiliza la sintaxis Liquid de Jekyll para definir un archivo JSON que contiene el título, URL, información de categorías y etiquetas, fecha de creación, un fragmento de las primeras 200 caracteres del contenido y el contenido completo de todas las publicaciones del sitio.</p><h3 id="estructura-de-funcionamiento-de-la-búsqueda-e-identificación-del-problema">Estructura de funcionamiento de la búsqueda e identificación del problema</h3><p>En resumen, la función de búsqueda en un sitio con tema Chirpy alojado en GitHub Pages funciona según el siguiente proceso:</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>Confirmé que Polyglot genera <code class="language-plaintext filepath highlighter-rouge">search.json</code> para cada idioma de la siguiente manera:</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>Por lo tanto, la parte que causa el problema es el “Search Loader”. El problema de que las páginas en idiomas distintos al inglés no se buscan se debe a que <code class="language-plaintext filepath highlighter-rouge">_includes/search-loader.html</code> carga estáticamente solo el archivo de índice en inglés (<code class="language-plaintext filepath highlighter-rouge">/assets/js/data/search.json</code>), independientemente del idioma de la página que se está visitando.</p><blockquote class="prompt-warning"><ul><li>Sin embargo, a diferencia de los archivos en formato markdown o html, para los archivos JSON, el wrapper de Polyglot funciona para variables proporcionadas por Jekyll como <code class="language-plaintext highlighter-rouge">post.title</code>, <code class="language-plaintext highlighter-rouge">post.content</code>, etc., pero la función <a href="https://github.com/untra/polyglot?tab=readme-ov-file#relativized-local-urls">Relativized Local Urls</a> parece no funcionar.<li>De manera similar, dentro de las plantillas de archivos JSON, no es posible acceder a las etiquetas liquid <a href="https://github.com/untra/polyglot?tab=readme-ov-file#features">proporcionadas adicionalmente por Polyglot <code class="language-plaintext highlighter-rouge">{{ site.default_lang }}</code>, <code class="language-plaintext highlighter-rouge">{{ site.active_lang }}</code></a> más allá de las variables básicas proporcionadas por Jekyll, como confirmé durante las pruebas.</ul><p>Por lo tanto, aunque valores como <code class="language-plaintext highlighter-rouge">title</code>, <code class="language-plaintext highlighter-rouge">snippet</code>, <code class="language-plaintext highlighter-rouge">content</code> en el archivo de índice se generan de manera diferente para cada idioma, el valor <code class="language-plaintext highlighter-rouge">url</code> devuelve la ruta básica sin considerar el idioma, y se debe agregar un procesamiento adecuado para esto en la parte “Search Loader”.</p></blockquote><h3 id="solución-del-problema">Solución del problema</h3><p>Para resolver esto, se debe modificar el contenido de <code class="language-plaintext filepath highlighter-rouge">_includes/search-loader.html</code> de la siguiente manera:</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 %}

(...omitido...)

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

(...omitido)
</pre></div></div><ul><li>Modifiqué la parte <code class="language-plaintext highlighter-rouge">{% capture result_elem %}</code> para añadir el prefijo <code class="language-plaintext highlighter-rouge">"/{{ site.active_lang }}"</code> delante de la URL del post cargada desde el archivo JSON cuando <code class="language-plaintext highlighter-rouge">site.active_lang</code> (idioma de la página actual) y <code class="language-plaintext highlighter-rouge">site.default_lang</code> (idioma predeterminado del sitio) son diferentes.<li>De manera similar, modifiqué la parte <code class="language-plaintext highlighter-rouge">&lt;script&gt;</code> para comparar el idioma de la página actual con el idioma predeterminado del sitio durante el proceso de compilación, y asignar la ruta predeterminada (<code class="language-plaintext filepath highlighter-rouge">/assets/js/data/search.json</code>) si son iguales, o la ruta correspondiente al idioma (por ejemplo, <code class="language-plaintext filepath highlighter-rouge">/ko/assets/js/data/search.json</code>) si son diferentes, como <code class="language-plaintext highlighter-rouge">search_path</code>.</ul><p>Después de hacer estas modificaciones y volver a compilar el sitio web, confirmé que los resultados de búsqueda se muestran correctamente para cada idioma.</p><blockquote class="prompt-tip"><p><code class="language-plaintext highlighter-rouge">{url}</code> es un marcador de posición para el valor URL que será leído del archivo JSON durante la ejecución de la búsqueda por JS, no es una URL válida en el momento de la compilación, por lo que Polyglot no lo reconoce como objetivo de localización y debe procesarse directamente según el idioma. El problema es que la plantilla <code class="language-plaintext highlighter-rouge">"/{{ site.active_lang }}{url}"</code> procesada sí se reconoce como URL relativa durante la compilación, y aunque ya está localizada, Polyglot no lo sabe e intenta localizarla nuevamente (por ejemplo, <code class="language-plaintext filepath highlighter-rouge">"/ko/ko/posts/example-post"</code>). Para evitar esto, se especifica la etiqueta <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>
