{"id":634,"date":"2026-07-22T08:16:49","date_gmt":"2026-07-22T08:16:49","guid":{"rendered":"https:\/\/matforge.org\/?p=634","raw":"https:\/\/matforge.org\/?p=634"},"modified":"2026-07-22T08:16:49","modified_gmt":"2026-07-22T08:16:49","slug":"solving-diffusion-equations-with-fipy","status":"publish","type":"post","link":"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/","title":{"rendered":"Resolviendo ecuaciones de difusi\u00f3n con Fipy","raw":"Resolviendo ecuaciones de difusi\u00f3n con Fipy"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 6<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>La difusi\u00f3n es una de las ecuaciones diferenciales parciales m\u00e1s intuitivas (PDES) que puede simular: un pico agudo se extiende, un paso empinado se suaviza en una transici\u00f3n suave y los gradientes desaparecen gradualmente. Si est\u00e1 aprendiendo Fipy, la difusi\u00f3n tambi\u00e9n es uno de los mejores puntos de partida porque se asigna limpiamente al flujo de trabajo principal de Fipy: <em>Mesh \u2192 Variable \u2192 Ecuaci\u00f3n \u2192 Time Loop \u2192 Visualizaci\u00f3n<\/em>.<\/p>\n<p>En esta gu\u00eda, resolver\u00e1 la ecuaci\u00f3n de difusi\u00f3n en Fipy desde cero, ejecutar\u00e1 una simulaci\u00f3n 1D completa que puede modificar de manera segura, aprender\u00e1 a interpretar la salida y luego ver\u00e1 c\u00f3mo la misma configuraci\u00f3n se extiende a 2D. El objetivo es la confianza pr\u00e1ctica: debe poder cambiar la resoluci\u00f3n, el paso de tiempo, la velocidad de difusi\u00f3n y las condiciones de los l\u00edmites sin romper el modelo.<\/p>\n<h2>Qu\u00e9 significa la difusi\u00f3n (sin las matem\u00e1ticas pesadas)<\/h2>\n<p>La difusi\u00f3n describe c\u00f3mo algo se extiende debido a las diferencias de concentraci\u00f3n (o temperatura). El calor se extiende a trav\u00e9s de una varilla. Una gota de tinte se extiende en el agua. Matem\u00e1ticamente, a menudo escribimos difusi\u00f3n de esta forma:<\/p>\n<pre><code>\u2202\u03c6\/\u2202t = \u2207\u00b7(D \u2207\u03c6)<\/code><\/pre>\n<p>Aqu\u00ed <code>\u03c6<\/code> es el campo que te importa (temperatura, concentraci\u00f3n, etc.). El coeficiente <code>D<\/code> controla la rapidez de la difusi\u00f3n. M\u00e1s grande <code>D<\/code> significa que el perfil se suaviza m\u00e1s r\u00e1pidamente.<\/p>\n<p>Las condiciones de contorno son importantes porque las PDES necesitan reglas en los bordes del dominio. Para una primera ejecuci\u00f3n de difusi\u00f3n, los l\u00edmites de \u00absin flujo\u00bb son comunes: nada sale del dominio. Eso hace que la evoluci\u00f3n sea f\u00e1cil de interpretar porque el sistema no est\u00e1 siendo forzado por los l\u00edmites.<\/p>\n<h2>C\u00f3mo Fipy representa la difusi\u00f3n<\/h2>\n<p>Fipy resuelve las PDE utilizando el m\u00e9todo de volumen finito (FVM). Puede pensar en su dominio como dividido en celdas peque\u00f1as. El campo desconocido vive en esas c\u00e9lulas (t\u00edpicamente en los centros celulares). La difusi\u00f3n se implementa como flujo entre celdas vecinas: los valores altos empujan el flujo hacia valores bajos hasta que el perfil se vuelve m\u00e1s suave.<\/p>\n<p>Los pr\u00e1cticos bloques de construcci\u00f3n Fipy son:<\/p>\n<ul>\n<li><code>Mesh<\/code> \u2014 La geometr\u00eda y la resoluci\u00f3n (cuadr\u00edcula 1D o 2D)<\/li>\n<li><code>CellVariable<\/code> \u2014 El campo <code>\u03c6<\/code> que resuelves<\/li>\n<li><code>TransientTerm()<\/code> \u2014 La derivada de tiempo \u2202\u03c6\/\u2202t<\/li>\n<li><code>DiffusionTerm(coeff=D)<\/code> \u2014 El operador de difusi\u00f3n<\/li>\n<li>Un bucle de tiempo: resolver repetidamente con <code>dt<\/code> y visualizar instant\u00e1neas<\/li>\n<\/ul>\n<h2>Antes de comenzar: Lista de verificaci\u00f3n de entorno m\u00ednimo<\/h2>\n<p>Necesita Python Plus Fipy y una biblioteca de trazado. Si est\u00e1 utilizando cuadernos, el mismo c\u00f3digo funciona; Simplemente ejecute celdas en orden.<\/p>\n<ul>\n<li>Python instalado (se recomienda una versi\u00f3n moderna)<\/li>\n<li>Un entorno virtual (recomendado)<\/li>\n<li>Fipy instalado (y sus dependencias num\u00e9ricas)<\/li>\n<li>matplotlib instalado para trazar<\/li>\n<\/ul>\n<h2>Primer ejemplo de trabajo: difusi\u00f3n 1D<\/h2>\n<p>Modelaremos la difusi\u00f3n en un dominio 1D de 0 a 1 usando una cuadr\u00edcula uniforme. La condici\u00f3n inicial ser\u00e1 un paso:<br \/> <code>\u03c6 = 1<\/code> en la mitad izquierda y <code>\u03c6 = 0<\/code> en la mitad derecha. La difusi\u00f3n suavizar\u00e1 esa discontinuidad con el tiempo.<\/p>\n<p>El siguiente c\u00f3digo es un script completo que puede ejecutar tal cual.<\/p>\n<pre><code># Solving Diffusion Equations with FiPy: 1D Example\n# Save as: diffusion_1d_fipy.py\n\nfrom fipy import Grid1D, CellVariable, TransientTerm, DiffusionTerm\nimport matplotlib.pyplot as plt\n\n# --- 1) Mesh setup ---\nnx = 200\ndx = 1.0 \/ nx\nmesh = Grid1D(nx=nx, dx=dx)\n\n# --- 2) Variable (field) ---\nphi = CellVariable(name=\"phi\", mesh=mesh, value=0.0)\n\n# Initial condition: step (left half = 1, right half = 0)\nx = mesh.cellCenters[0]\nphi.setValue(1.0, where=(x &lt; 0.5))\n\n# --- 3) Diffusion equation ---\nD = 1.0\neq = TransientTerm() == DiffusionTerm(coeff=D)\n\n# --- 4) Time stepping ---\ndt = 1e-4\nsteps = 2000\n\nsnapshots = []\ntimes = []\ncapture_at = {0, 50, 200, 800, 2000}\n\nfor step in range(steps + 1):\n    if step in capture_at:\n        snapshots.append(phi.value.copy())\n        times.append(step * dt)\n\n    eq.solve(var=phi, dt=dt)\n\n# --- 5) Plot ---\nplt.figure()\nfor y, t in zip(snapshots, times):\n    plt.plot(x.value, y, label=f\"t = {t:.4f}\")\n\nplt.xlabel(\"x\")\nplt.ylabel(\"phi\")\nplt.title(\"1D Diffusion in FiPy\")\nplt.legend()\nplt.show()<\/code><\/pre>\n<h2>Qu\u00e9 hace cada bloque (para que puedas modificarlo de forma segura)<\/h2>\n<h3>Mesh: su dominio y resoluci\u00f3n<\/h3>\n<p><code>Grid1D(nx=nx, dx=dx)<\/code> Crea una l\u00ednea dividida en celdas <code>nx<\/code>. m\u00e1s peque\u00f1o <code>dx<\/code> (m\u00e1s grande <code>nx<\/code>) da m\u00e1s detalles pero cuesta m\u00e1s c\u00e1lculo. La longitud de su dominio es aproximadamente <code>nx * dx<\/code>.<\/p>\n<h3>CellVariable: el campo que resuelves para<\/h3>\n<p><code>phi<\/code> se almacena en los centros celulares. Comienza con una condici\u00f3n inicial usando <code>setValue()<\/code>. Con la difusi\u00f3n, esa forma inicial es lo que ves relajarte con el tiempo.<\/p>\n<h3>La ecuaci\u00f3n: El cambio de tiempo es igual a difusi\u00f3n<\/h3>\n<p>Esta l\u00ednea define el PDE de difusi\u00f3n en la sintaxis de t\u00e9rmino de Fipy:<\/p>\n<pre><code>TransientTerm() == DiffusionTerm(coeff=D)<\/code><\/pre>\n<p><code>D<\/code> Controla la rapidez con que se suaviza el paso. Si aumentas <code>D<\/code>, deber\u00edas ver que la zona de transici\u00f3n se ensancha m\u00e1s r\u00e1pido.<\/p>\n<h3>El bucle de tiempo: dar un paso adelante<\/h3>\n<p>Cada llamada a <code>eq.solve(var=phi, dt=dt)<\/code> avanza la soluci\u00f3n en un solo paso de tiempo. Capturamos algunas instant\u00e1neas para que puedas ver la evoluci\u00f3n sin trazar cada paso.<\/p>\n<h2>C\u00f3mo saber si su carrera de difusi\u00f3n se ve correcta<\/h2>\n<p>Con una condici\u00f3n inicial de paso, la difusi\u00f3n debe crear una regi\u00f3n de transici\u00f3n suave que se ensanche gradualmente. El salto agudo deber\u00eda suavizarse y la curva deber\u00eda volverse menos pronunciada con el tiempo.<\/p>\n<ul>\n<li>Si el perfil no cambia: es posible que su bucle no se est\u00e9 ejecutando como se espera, o <code>dt<\/code> y <code>steps<\/code> producen muy poco tiempo total.<\/li>\n<li>Si el perfil se vuelve ruidoso o \u00abexplota\u00bb: Reduzca <code>dt<\/code>, aumente la resoluci\u00f3n o simplifique los l\u00edmites.<\/li>\n<li>Si todo parece cambiado o recortado: verifique su condici\u00f3n inicial y confirme que el eje x coincide con su dominio.<\/li>\n<\/ul>\n<h2>Elegir DT y DX: consejos pr\u00e1cticos de estabilidad y precisi\u00f3n<\/h2>\n<p>Incluso si el c\u00f3digo se ejecuta, las opciones de par\u00e1metros afectan la calidad y el tiempo de ejecuci\u00f3n. Tres ajustes cubren la mayor\u00eda de los problemas del \u00abprimer modelo\u00bb:<\/p>\n<ul>\n<li>Reducir <code>dt<\/code> Si la evoluci\u00f3n parece demasiado nerviosa, ruidosa o inconsistente entre ejecuciones. Una prueba r\u00e1pida es reducir a la mitad <code>dt<\/code> y duplicar <code>steps<\/code>, por lo que el tiempo total simulado permanece similar.<\/li>\n<li>Aumentar <code>nx<\/code> Si la curva parece irregular o la zona de transici\u00f3n est\u00e1 mal resuelta. M\u00e1s celdas generalmente significa perfiles m\u00e1s suaves y mejores gradientes, a un mayor costo computacional.<\/li>\n<li>Trate m\u00e1s grande <code>D<\/code> como un \u00absistema m\u00e1s r\u00e1pido\u00bb. Si la difusi\u00f3n es fuerte, por lo general necesita <code>dt <\/code>(o al menos para verificar que los resultados no cambien cuando refina el tiempo).<\/li>\n<\/ul>\n<p>Un h\u00e1bito simple que evita la confusi\u00f3n: siempre que cambie <code>dt<\/code> o <code>nx<\/code>, vuelva a ejecutar y compare dos ejecuciones (grueso vs refinado). Si las curvas son b\u00e1sicamente las mismas, est\u00e1s en un buen r\u00e9gimen de aprendizaje e iteraci\u00f3n.<\/p>\n<h2>Seis experimentos r\u00e1pidos que te ense\u00f1an difusi\u00f3n r\u00e1pido<\/h2>\n<ol>\n<li>Cambie la velocidad de difusi\u00f3n: intente <code>D = 0.1<\/code> y <code>D = 5.0<\/code> y compare la rapidez con la que se relaja el paso.<\/li>\n<li>Aumente la resoluci\u00f3n: cambie <code>nx<\/code> de 200 a 400 y vea c\u00f3mo se ve la regi\u00f3n de transici\u00f3n.<\/li>\n<li>Pruebe un golpe en lugar de un paso: establezca <code>phi = 1<\/code> solo en una regi\u00f3n estrecha y observe c\u00f3mo se extiende sim\u00e9tricamente.<\/li>\n<li>Capture m\u00e1s instant\u00e1neas: agregue m\u00e1s \u00edndices a <code>capture_at<\/code> para ver la evoluci\u00f3n con m\u00e1s detalles.<\/li>\n<li>Ejecutar m\u00e1s tiempo: Aumente <code>steps<\/code> y confirme que el perfil se vuelve m\u00e1s uniforme con el tiempo.<\/li>\n<li>Guardar salida: Agregar <code>plt.savefig(\"diffusion_1d.png\", dpi=200)<\/code> antes de <code>plt.show()<\/code>.<\/li>\n<\/ol>\n<h2>Actualizaci\u00f3n a difusi\u00f3n 2D (cambio m\u00ednimo, gran recompensa)<\/h2>\n<p>Una vez que 1D se siente c\u00f3modo, moverse a 2D se trata principalmente de cambiar la malla y la visualizaci\u00f3n. La estructura de la ecuaci\u00f3n sigue siendo la misma. En 2D, normalmente comenzar\u00e1s con un \u00abpunto\u00bb (valor alto en una regi\u00f3n peque\u00f1a) y ver\u00e1s c\u00f3mo se extiende en una mancha suave.<\/p>\n<pre><code># 2D Diffusion sketch (core ideas)\nfrom fipy import Grid2D, CellVariable, TransientTerm, DiffusionTerm\nimport matplotlib.pyplot as plt\n\nnx = ny = 100\ndx = dy = 1.0 \/ nx\nmesh = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy)\n\nphi = CellVariable(name=\"phi\", mesh=mesh, value=0.0)\n\nx, y = mesh.cellCenters\nphi.setValue(1.0, where=((x - 0.5)**2 + (y - 0.5)**2 &lt; 0.05**2))\n\nD = 1.0\neq = TransientTerm() == DiffusionTerm(coeff=D)\n\ndt = 1e-4\nfor _ in range(500):\n    eq.solve(var=phi, dt=dt)\n\n# Visualize as an image\nplt.figure()\nplt.imshow(phi.value.reshape((ny, nx)), origin=\"lower\")\nplt.colorbar(label=\"phi\")\nplt.title(\"2D Diffusion in FiPy\")\nplt.show()<\/code><\/pre>\n<p>Dos notas pr\u00e1cticas para 2D: primero, puede ser significativamente m\u00e1s lento que 1D porque el n\u00famero de c\u00e9lulas crece como <code>nx * ny<\/code>. En segundo lugar, los gr\u00e1ficos de im\u00e1genes dependen de la remodelaci\u00f3n; Mantenga su <code>(ny, nx)<\/code> consistente.<\/p>\n<h2>Soluci\u00f3n de problemas: problemas comunes por primera vez<\/h2>\n<h3>Errores de importaci\u00f3n o paquetes faltantes<\/h3>\n<ul>\n<li>Confirme que Fipy est\u00e1 instalado en el mismo entorno donde ejecuta el script.<\/li>\n<li>En cuadernos, verifique que el kernel apunte al int\u00e9rprete correcto.<\/li>\n<li>Compruebe que matplotlib importa limpiamente.<\/li>\n<\/ul>\n<h3>La curva no cambia<\/h3>\n<ul>\n<li>Aumente el tiempo total simulado: eleve <code>steps<\/code> o <code>dt<\/code> ligeramente (con cuidado).<\/li>\n<li>Aseg\u00farese de que las instant\u00e1neas incluyan pasos posteriores, no solo el comienzo.<\/li>\n<li>Confirme que en realidad est\u00e1 llamando a <code>eq.solve()<\/code> dentro del bucle.<\/li>\n<\/ul>\n<h3>La soluci\u00f3n parece inestable o ruidosa<\/h3>\n<ul>\n<li>Reduzca <code>dt<\/code> (por ejemplo, de <code>1e-4<\/code> a <code>5e-5<\/code>).<\/li>\n<li>Aumente la resoluci\u00f3n (<code>nx<\/code>) para resolver mejor los gradientes.<\/li>\n<li>Pruebe un <code>D<\/code> m\u00e1s peque\u00f1o para reducir la velocidad de evoluci\u00f3n mientras aprende.<\/li>\n<\/ul>\n<h3>es demasiado lento<\/h3>\n<ul>\n<li>Comience con menos celdas, luego aumente gradualmente una vez que el flujo de trabajo est\u00e9 claro.<\/li>\n<li>Capture menos instant\u00e1neas y trace con menos frecuencia.<\/li>\n<li>En 2D, reduzca <code>nx<\/code> y <code>ny<\/code> mientras experimenta con la configuraci\u00f3n.<\/li>\n<\/ul>\n<h2>Conclusi\u00f3n: el patr\u00f3n de difusi\u00f3n que reutilizar\u00e1s en todas partes<\/h2>\n<p>Resolver la difusi\u00f3n en Fipy ense\u00f1a una estructura repetible que usar\u00e1 para muchos modelos PDE. Una vez que te sientas c\u00f3modo con c\u00f3mo conectar <code>Grid1D\/Grid2D<\/code>, <code>CellVariable<\/code>, <code>TransientTerm<\/code> y <code>DiffusionTerm<\/code>, puedes extender el mismo flujo de trabajo a convecci\u00f3n-difusi\u00f3n, reacci\u00f3n-difusi\u00f3n, fuentes y sumideros, par\u00e1metro barridos y comprobaciones de validaci\u00f3n.<\/p>\n<p>Si desea el ciclo de aprendizaje m\u00e1s r\u00e1pido, realice un cambio a la vez:<code>D<\/code>, <code>nx<\/code>, <code>dt<\/code> o la condici\u00f3n inicial: vuelva a ejecutar y explique qu\u00e9 cambi\u00f3 y por qu\u00e9. Ese h\u00e1bito es lo que convierte a la difusi\u00f3n de una demostraci\u00f3n en una herramienta en la que puedes confiar.<\/p>\n","protected":false,"raw":"<p>La difusi\u00f3n es una de las ecuaciones diferenciales parciales m\u00e1s intuitivas (PDES) que puede simular: un pico agudo se extiende, un paso empinado se suaviza en una transici\u00f3n suave y los gradientes desaparecen gradualmente. Si est\u00e1 aprendiendo Fipy, la difusi\u00f3n tambi\u00e9n es uno de los mejores puntos de partida porque se asigna limpiamente al flujo de trabajo principal de Fipy: <em>Mesh \u2192 Variable \u2192 Ecuaci\u00f3n \u2192 Time Loop \u2192 Visualizaci\u00f3n<\/em>.<\/p>\n<p>En esta gu\u00eda, resolver\u00e1 la ecuaci\u00f3n de difusi\u00f3n en Fipy desde cero, ejecutar\u00e1 una simulaci\u00f3n 1D completa que puede modificar de manera segura, aprender\u00e1 a interpretar la salida y luego ver\u00e1 c\u00f3mo la misma configuraci\u00f3n se extiende a 2D. El objetivo es la confianza pr\u00e1ctica: debe poder cambiar la resoluci\u00f3n, el paso de tiempo, la velocidad de difusi\u00f3n y las condiciones de los l\u00edmites sin romper el modelo.<\/p>\n<h2>Qu\u00e9 significa la difusi\u00f3n (sin las matem\u00e1ticas pesadas)<\/h2>\n<p>La difusi\u00f3n describe c\u00f3mo algo se extiende debido a las diferencias de concentraci\u00f3n (o temperatura). El calor se extiende a trav\u00e9s de una varilla. Una gota de tinte se extiende en el agua. Matem\u00e1ticamente, a menudo escribimos difusi\u00f3n de esta forma:<\/p>\n<pre><code>\u2202\u03c6\/\u2202t = \u2207\u00b7(D \u2207\u03c6)<\/code><\/pre>\n<p>Aqu\u00ed <code>\u03c6<\/code> es el campo que te importa (temperatura, concentraci\u00f3n, etc.). El coeficiente <code>D<\/code> controla la rapidez de la difusi\u00f3n. M\u00e1s grande <code>D<\/code> significa que el perfil se suaviza m\u00e1s r\u00e1pidamente.<\/p>\n<p>Las condiciones de contorno son importantes porque las PDES necesitan reglas en los bordes del dominio. Para una primera ejecuci\u00f3n de difusi\u00f3n, los l\u00edmites de \"sin flujo\" son comunes: nada sale del dominio. Eso hace que la evoluci\u00f3n sea f\u00e1cil de interpretar porque el sistema no est\u00e1 siendo forzado por los l\u00edmites.<\/p>\n<h2>C\u00f3mo Fipy representa la difusi\u00f3n<\/h2>\n<p>Fipy resuelve las PDE utilizando el m\u00e9todo de volumen finito (FVM). Puede pensar en su dominio como dividido en celdas peque\u00f1as. El campo desconocido vive en esas c\u00e9lulas (t\u00edpicamente en los centros celulares). La difusi\u00f3n se implementa como flujo entre celdas vecinas: los valores altos empujan el flujo hacia valores bajos hasta que el perfil se vuelve m\u00e1s suave.<\/p>\n<p>Los pr\u00e1cticos bloques de construcci\u00f3n Fipy son:<\/p>\n<ul>\n<li><code>Mesh<\/code> \u2014 La geometr\u00eda y la resoluci\u00f3n (cuadr\u00edcula 1D o 2D)<\/li>\n<li><code>CellVariable<\/code> \u2014 El campo <code>\u03c6<\/code> que resuelves<\/li>\n<li><code>TransientTerm()<\/code> \u2014 La derivada de tiempo \u2202\u03c6\/\u2202t<\/li>\n<li><code>DiffusionTerm(coeff=D)<\/code> \u2014 El operador de difusi\u00f3n<\/li>\n<li>Un bucle de tiempo: resolver repetidamente con <code>dt<\/code> y visualizar instant\u00e1neas<\/li>\n<\/ul>\n<h2>Antes de comenzar: Lista de verificaci\u00f3n de entorno m\u00ednimo<\/h2>\n<p>Necesita Python Plus Fipy y una biblioteca de trazado. Si est\u00e1 utilizando cuadernos, el mismo c\u00f3digo funciona; Simplemente ejecute celdas en orden.<\/p>\n<ul>\n<li>Python instalado (se recomienda una versi\u00f3n moderna)<\/li>\n<li>Un entorno virtual (recomendado)<\/li>\n<li>Fipy instalado (y sus dependencias num\u00e9ricas)<\/li>\n<li>matplotlib instalado para trazar<\/li>\n<\/ul>\n<h2>Primer ejemplo de trabajo: difusi\u00f3n 1D<\/h2>\n<p>Modelaremos la difusi\u00f3n en un dominio 1D de 0 a 1 usando una cuadr\u00edcula uniforme. La condici\u00f3n inicial ser\u00e1 un paso:<br> <code>\u03c6 = 1<\/code> en la mitad izquierda y <code>\u03c6 = 0<\/code> en la mitad derecha. La difusi\u00f3n suavizar\u00e1 esa discontinuidad con el tiempo.<\/p>\n<p>El siguiente c\u00f3digo es un script completo que puede ejecutar tal cual.<\/p>\n<pre><code># Solving Diffusion Equations with FiPy: 1D Example\n# Save as: diffusion_1d_fipy.py\n\nfrom fipy import Grid1D, CellVariable, TransientTerm, DiffusionTerm\nimport matplotlib.pyplot as plt\n\n# --- 1) Mesh setup ---\nnx = 200\ndx = 1.0 \/ nx\nmesh = Grid1D(nx=nx, dx=dx)\n\n# --- 2) Variable (field) ---\nphi = CellVariable(name=\"phi\", mesh=mesh, value=0.0)\n\n# Initial condition: step (left half = 1, right half = 0)\nx = mesh.cellCenters[0]\nphi.setValue(1.0, where=(x &lt; 0.5))\n\n# --- 3) Diffusion equation ---\nD = 1.0\neq = TransientTerm() == DiffusionTerm(coeff=D)\n\n# --- 4) Time stepping ---\ndt = 1e-4\nsteps = 2000\n\nsnapshots = []\ntimes = []\ncapture_at = {0, 50, 200, 800, 2000}\n\nfor step in range(steps + 1):\n    if step in capture_at:\n        snapshots.append(phi.value.copy())\n        times.append(step * dt)\n\n    eq.solve(var=phi, dt=dt)\n\n# --- 5) Plot ---\nplt.figure()\nfor y, t in zip(snapshots, times):\n    plt.plot(x.value, y, label=f\"t = {t:.4f}\")\n\nplt.xlabel(\"x\")\nplt.ylabel(\"phi\")\nplt.title(\"1D Diffusion in FiPy\")\nplt.legend()\nplt.show()<\/code><\/pre>\n<h2>Qu\u00e9 hace cada bloque (para que puedas modificarlo de forma segura)<\/h2>\n<h3>Mesh: su dominio y resoluci\u00f3n<\/h3>\n<p><code>Grid1D(nx=nx, dx=dx)<\/code> Crea una l\u00ednea dividida en celdas <code>nx<\/code>. m\u00e1s peque\u00f1o <code>dx<\/code> (m\u00e1s grande <code>nx<\/code>) da m\u00e1s detalles pero cuesta m\u00e1s c\u00e1lculo. La longitud de su dominio es aproximadamente <code>nx * dx<\/code>.<\/p>\n<h3>CellVariable: el campo que resuelves para<\/h3>\n<p><code>phi<\/code> se almacena en los centros celulares. Comienza con una condici\u00f3n inicial usando <code>setValue()<\/code>. Con la difusi\u00f3n, esa forma inicial es lo que ves relajarte con el tiempo.<\/p>\n<h3>La ecuaci\u00f3n: El cambio de tiempo es igual a difusi\u00f3n<\/h3>\n<p>Esta l\u00ednea define el PDE de difusi\u00f3n en la sintaxis de t\u00e9rmino de Fipy:<\/p>\n<pre><code>TransientTerm() == DiffusionTerm(coeff=D)<\/code><\/pre>\n<p><code>D<\/code> Controla la rapidez con que se suaviza el paso. Si aumentas <code>D<\/code>, deber\u00edas ver que la zona de transici\u00f3n se ensancha m\u00e1s r\u00e1pido.<\/p>\n<h3>El bucle de tiempo: dar un paso adelante<\/h3>\n<p>Cada llamada a <code>eq.solve(var=phi, dt=dt)<\/code> avanza la soluci\u00f3n en un solo paso de tiempo. Capturamos algunas instant\u00e1neas para que puedas ver la evoluci\u00f3n sin trazar cada paso.<\/p>\n<h2>C\u00f3mo saber si su carrera de difusi\u00f3n se ve correcta<\/h2>\n<p>Con una condici\u00f3n inicial de paso, la difusi\u00f3n debe crear una regi\u00f3n de transici\u00f3n suave que se ensanche gradualmente. El salto agudo deber\u00eda suavizarse y la curva deber\u00eda volverse menos pronunciada con el tiempo.<\/p>\n<ul>\n<li>Si el perfil no cambia: es posible que su bucle no se est\u00e9 ejecutando como se espera, o <code>dt<\/code> y <code>steps<\/code> producen muy poco tiempo total.<\/li>\n<li>Si el perfil se vuelve ruidoso o \"explota\": Reduzca <code>dt<\/code>, aumente la resoluci\u00f3n o simplifique los l\u00edmites.<\/li>\n<li>Si todo parece cambiado o recortado: verifique su condici\u00f3n inicial y confirme que el eje x coincide con su dominio.<\/li>\n<\/ul>\n<h2>Elegir DT y DX: consejos pr\u00e1cticos de estabilidad y precisi\u00f3n<\/h2>\n<p>Incluso si el c\u00f3digo se ejecuta, las opciones de par\u00e1metros afectan la calidad y el tiempo de ejecuci\u00f3n. Tres ajustes cubren la mayor\u00eda de los problemas del \"primer modelo\":<\/p>\n<ul>\n<li>Reducir <code>dt<\/code> Si la evoluci\u00f3n parece demasiado nerviosa, ruidosa o inconsistente entre ejecuciones. Una prueba r\u00e1pida es reducir a la mitad <code>dt<\/code> y duplicar <code>steps<\/code>, por lo que el tiempo total simulado permanece similar.<\/li>\n<li>Aumentar <code>nx<\/code> Si la curva parece irregular o la zona de transici\u00f3n est\u00e1 mal resuelta. M\u00e1s celdas generalmente significa perfiles m\u00e1s suaves y mejores gradientes, a un mayor costo computacional.<\/li>\n<li>Trate m\u00e1s grande <code>D<\/code> como un \"sistema m\u00e1s r\u00e1pido\". Si la difusi\u00f3n es fuerte, por lo general necesita <code>dt <\/code>(o al menos para verificar que los resultados no cambien cuando refina el tiempo).<\/li>\n<\/ul>\n<p>Un h\u00e1bito simple que evita la confusi\u00f3n: siempre que cambie <code>dt<\/code> o <code>nx<\/code>, vuelva a ejecutar y compare dos ejecuciones (grueso vs refinado). Si las curvas son b\u00e1sicamente las mismas, est\u00e1s en un buen r\u00e9gimen de aprendizaje e iteraci\u00f3n.<\/p>\n<h2>Seis experimentos r\u00e1pidos que te ense\u00f1an difusi\u00f3n r\u00e1pido<\/h2>\n<ol>\n<li>Cambie la velocidad de difusi\u00f3n: intente <code>D = 0.1<\/code> y <code>D = 5.0<\/code> y compare la rapidez con la que se relaja el paso.<\/li>\n<li>Aumente la resoluci\u00f3n: cambie <code>nx<\/code> de 200 a 400 y vea c\u00f3mo se ve la regi\u00f3n de transici\u00f3n.<\/li>\n<li>Pruebe un golpe en lugar de un paso: establezca <code>phi = 1<\/code> solo en una regi\u00f3n estrecha y observe c\u00f3mo se extiende sim\u00e9tricamente.<\/li>\n<li>Capture m\u00e1s instant\u00e1neas: agregue m\u00e1s \u00edndices a <code>capture_at<\/code> para ver la evoluci\u00f3n con m\u00e1s detalles.<\/li>\n<li>Ejecutar m\u00e1s tiempo: Aumente <code>steps<\/code> y confirme que el perfil se vuelve m\u00e1s uniforme con el tiempo.<\/li>\n<li>Guardar salida: Agregar <code>plt.savefig(\"diffusion_1d.png\", dpi=200)<\/code> antes de <code>plt.show()<\/code>.<\/li>\n<\/ol>\n<h2>Actualizaci\u00f3n a difusi\u00f3n 2D (cambio m\u00ednimo, gran recompensa)<\/h2>\n<p>Una vez que 1D se siente c\u00f3modo, moverse a 2D se trata principalmente de cambiar la malla y la visualizaci\u00f3n. La estructura de la ecuaci\u00f3n sigue siendo la misma. En 2D, normalmente comenzar\u00e1s con un \"punto\" (valor alto en una regi\u00f3n peque\u00f1a) y ver\u00e1s c\u00f3mo se extiende en una mancha suave.<\/p>\n<pre><code># 2D Diffusion sketch (core ideas)\nfrom fipy import Grid2D, CellVariable, TransientTerm, DiffusionTerm\nimport matplotlib.pyplot as plt\n\nnx = ny = 100\ndx = dy = 1.0 \/ nx\nmesh = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy)\n\nphi = CellVariable(name=\"phi\", mesh=mesh, value=0.0)\n\nx, y = mesh.cellCenters\nphi.setValue(1.0, where=((x - 0.5)**2 + (y - 0.5)**2 &lt; 0.05**2))\n\nD = 1.0\neq = TransientTerm() == DiffusionTerm(coeff=D)\n\ndt = 1e-4\nfor _ in range(500):\n    eq.solve(var=phi, dt=dt)\n\n# Visualize as an image\nplt.figure()\nplt.imshow(phi.value.reshape((ny, nx)), origin=\"lower\")\nplt.colorbar(label=\"phi\")\nplt.title(\"2D Diffusion in FiPy\")\nplt.show()<\/code><\/pre>\n<p>Dos notas pr\u00e1cticas para 2D: primero, puede ser significativamente m\u00e1s lento que 1D porque el n\u00famero de c\u00e9lulas crece como <code>nx * ny<\/code>. En segundo lugar, los gr\u00e1ficos de im\u00e1genes dependen de la remodelaci\u00f3n; Mantenga su <code>(ny, nx)<\/code> consistente.<\/p>\n<h2>Soluci\u00f3n de problemas: problemas comunes por primera vez<\/h2>\n<h3>Errores de importaci\u00f3n o paquetes faltantes<\/h3>\n<ul>\n<li>Confirme que Fipy est\u00e1 instalado en el mismo entorno donde ejecuta el script.<\/li>\n<li>En cuadernos, verifique que el kernel apunte al int\u00e9rprete correcto.<\/li>\n<li>Compruebe que matplotlib importa limpiamente.<\/li>\n<\/ul>\n<h3>La curva no cambia<\/h3>\n<ul>\n<li>Aumente el tiempo total simulado: eleve <code>steps<\/code> o <code>dt<\/code> ligeramente (con cuidado).<\/li>\n<li>Aseg\u00farese de que las instant\u00e1neas incluyan pasos posteriores, no solo el comienzo.<\/li>\n<li>Confirme que en realidad est\u00e1 llamando a <code>eq.solve()<\/code> dentro del bucle.<\/li>\n<\/ul>\n<h3>La soluci\u00f3n parece inestable o ruidosa<\/h3>\n<ul>\n<li>Reduzca <code>dt<\/code> (por ejemplo, de <code>1e-4<\/code> a <code>5e-5<\/code>).<\/li>\n<li>Aumente la resoluci\u00f3n (<code>nx<\/code>) para resolver mejor los gradientes.<\/li>\n<li>Pruebe un <code>D<\/code> m\u00e1s peque\u00f1o para reducir la velocidad de evoluci\u00f3n mientras aprende.<\/li>\n<\/ul>\n<h3>es demasiado lento<\/h3>\n<ul>\n<li>Comience con menos celdas, luego aumente gradualmente una vez que el flujo de trabajo est\u00e9 claro.<\/li>\n<li>Capture menos instant\u00e1neas y trace con menos frecuencia.<\/li>\n<li>En 2D, reduzca <code>nx<\/code> y <code>ny<\/code> mientras experimenta con la configuraci\u00f3n.<\/li>\n<\/ul>\n<h2>Conclusi\u00f3n: el patr\u00f3n de difusi\u00f3n que reutilizar\u00e1s en todas partes<\/h2>\n<p>Resolver la difusi\u00f3n en Fipy ense\u00f1a una estructura repetible que usar\u00e1 para muchos modelos PDE. Una vez que te sientas c\u00f3modo con c\u00f3mo conectar <code>Grid1D\/Grid2D<\/code>, <code>CellVariable<\/code>, <code>TransientTerm<\/code> y <code>DiffusionTerm<\/code>, puedes extender el mismo flujo de trabajo a convecci\u00f3n-difusi\u00f3n, reacci\u00f3n-difusi\u00f3n, fuentes y sumideros, par\u00e1metro barridos y comprobaciones de validaci\u00f3n.<\/p>\n<p>Si desea el ciclo de aprendizaje m\u00e1s r\u00e1pido, realice un cambio a la vez:<code>D<\/code>, <code>nx<\/code>, <code>dt<\/code> o la condici\u00f3n inicial: vuelva a ejecutar y explique qu\u00e9 cambi\u00f3 y por qu\u00e9. Ese h\u00e1bito es lo que convierte a la difusi\u00f3n de una demostraci\u00f3n en una herramienta en la que puedes confiar.<\/p>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 6<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>La difusi\u00f3n es una de las ecuaciones diferenciales parciales m\u00e1s intuitivas (PDES) que puede simular: un pico agudo se extiende, un paso empinado se suaviza en una transici\u00f3n suave y los gradientes desaparecen gradualmente. Si est\u00e1 aprendiendo Fipy, la difusi\u00f3n tambi\u00e9n es uno de los mejores puntos de partida porque se asigna limpiamente al flujo [&hellip;]<\/p>\n","protected":false,"raw":""},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"es_ES","_original_post":"https:\/\/new.matforge.org\/?p=59","iawp_total_views":0,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-634","post","type-post","status-publish","format-standard","hentry","category-fipy-documentation-examples-development","es-ES"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Resolver ecuaciones de difusi\u00f3n con Fipy: una gu\u00eda pr\u00e1ctica paso a paso<\/title>\n<meta name=\"description\" content=\"Aprenda c\u00f3mo resolver ecuaciones de difusi\u00f3n en Fipy con un ejemplo 1D claro, condiciones de contorno, consejos de paso de tiempo, comprobaciones de estabilidad y un camino f\u00e1cil hacia simulaciones 2D.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Resolver ecuaciones de difusi\u00f3n con Fipy: una gu\u00eda pr\u00e1ctica paso a paso\" \/>\n<meta property=\"og:description\" content=\"Aprenda c\u00f3mo resolver ecuaciones de difusi\u00f3n en Fipy con un ejemplo 1D claro, condiciones de contorno, consejos de paso de tiempo, comprobaciones de estabilidad y un camino f\u00e1cil hacia simulaciones 2D.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-22T08:16:49+00:00\" \/>\n<meta name=\"author\" content=\"Tomas Delgado\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomas Delgado\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/solving-diffusion-equations-with-fipy\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/solving-diffusion-equations-with-fipy\\\/\"},\"author\":{\"name\":\"Tomas Delgado\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"headline\":\"Resolviendo ecuaciones de difusi\u00f3n con Fipy\",\"datePublished\":\"2026-07-22T08:16:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/solving-diffusion-equations-with-fipy\\\/\"},\"wordCount\":1522,\"commentCount\":0,\"articleSection\":[\"Fipy: Documentaci\u00f3n, ejemplos &amp; Desarrollo\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/solving-diffusion-equations-with-fipy\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/solving-diffusion-equations-with-fipy\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/es\\\/solving-diffusion-equations-with-fipy\\\/\",\"name\":\"Resolver ecuaciones de difusi\u00f3n con Fipy: una gu\u00eda pr\u00e1ctica paso a paso\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-22T08:16:49+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"description\":\"Aprenda c\u00f3mo resolver ecuaciones de difusi\u00f3n en Fipy con un ejemplo 1D claro, condiciones de contorno, consejos de paso de tiempo, comprobaciones de estabilidad y un camino f\u00e1cil hacia simulaciones 2D.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/solving-diffusion-equations-with-fipy\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/solving-diffusion-equations-with-fipy\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/solving-diffusion-equations-with-fipy\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Resolviendo ecuaciones de difusi\u00f3n con Fipy\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\",\"name\":\"Tomas Delgado\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"caption\":\"Tomas Delgado\"},\"sameAs\":[\"http:\\\/\\\/matforge.org\"],\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/tomas-delgado\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Resolver ecuaciones de difusi\u00f3n con Fipy: una gu\u00eda pr\u00e1ctica paso a paso","description":"Aprenda c\u00f3mo resolver ecuaciones de difusi\u00f3n en Fipy con un ejemplo 1D claro, condiciones de contorno, consejos de paso de tiempo, comprobaciones de estabilidad y un camino f\u00e1cil hacia simulaciones 2D.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/","og_locale":"es_ES","og_type":"article","og_title":"Resolver ecuaciones de difusi\u00f3n con Fipy: una gu\u00eda pr\u00e1ctica paso a paso","og_description":"Aprenda c\u00f3mo resolver ecuaciones de difusi\u00f3n en Fipy con un ejemplo 1D claro, condiciones de contorno, consejos de paso de tiempo, comprobaciones de estabilidad y un camino f\u00e1cil hacia simulaciones 2D.","og_url":"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/","og_site_name":"matforge.org","article_published_time":"2026-07-22T08:16:49+00:00","author":"Tomas Delgado","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Tomas Delgado","Tiempo de lectura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/"},"author":{"name":"Tomas Delgado","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"headline":"Resolviendo ecuaciones de difusi\u00f3n con Fipy","datePublished":"2026-07-22T08:16:49+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/"},"wordCount":1522,"commentCount":0,"articleSection":["Fipy: Documentaci\u00f3n, ejemplos &amp; Desarrollo"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/","url":"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/","name":"Resolver ecuaciones de difusi\u00f3n con Fipy: una gu\u00eda pr\u00e1ctica paso a paso","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-22T08:16:49+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"description":"Aprenda c\u00f3mo resolver ecuaciones de difusi\u00f3n en Fipy con un ejemplo 1D claro, condiciones de contorno, consejos de paso de tiempo, comprobaciones de estabilidad y un camino f\u00e1cil hacia simulaciones 2D.","breadcrumb":{"@id":"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/es\/solving-diffusion-equations-with-fipy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/es\/"},{"@type":"ListItem","position":2,"name":"Resolviendo ecuaciones de difusi\u00f3n con Fipy"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061","name":"Tomas Delgado","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","caption":"Tomas Delgado"},"sameAs":["http:\/\/matforge.org"],"url":"https:\/\/matforge.org\/author\/tomas-delgado\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=634"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/634\/revisions"}],"predecessor-version":[{"id":655,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/634\/revisions\/655"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}