{"id":787,"date":"2026-07-30T12:21:39","date_gmt":"2026-07-30T12:21:39","guid":{"rendered":"https:\/\/matforge.org\/?p=787","raw":"https:\/\/matforge.org\/?p=787"},"modified":"2026-07-30T12:21:39","modified_gmt":"2026-07-30T12:21:39","slug":"nonlinear-solver-methods-newton-broyden-quasi-newton-pdes","status":"publish","type":"post","link":"https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/","title":{"rendered":"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES","raw":"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES"},"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\"> 12<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>Cuando discretizas una ecuaci\u00f3n diferencial parcial no lineal, obtienes un sistema algebraico no lineal. Resolverlo requiere elegir el m\u00e9todo de solucionador correcto. El m\u00e9todo de Newton converge cuadr\u00e1ticamente pero exige un jacobiano completo. El m\u00e9todo de Broyden hace que el jacobiano sea m\u00e1s barato pero puede desestabilizarse. El enfoque de Newton-Krylov (JFNK) libre de jacobiano evita por completo el jacobiano, confiando solo en productos vectoriales jacobianos con preacondicionamiento basado en la f\u00edsica para mantener la convergencia manejable.<\/p>\n<p>La elecci\u00f3n no es te\u00f3rica. Determina si su simulaci\u00f3n converge, cu\u00e1nta memoria consume y si termina en minutos o d\u00edas.<\/p>\n<p><strong><a href=\"https:\/\/matforge.org\/time-integration-methods-for-pde-solvers-explicit-vs-implicit-schemes\/\" target=\"_blank\" rel=\"nofollow noopener\">Enlace al art\u00edculo existente: los m\u00e9todos de integraci\u00f3n de tiempo para los solucionadores de PDE<\/a><\/strong> cubren el panorama m\u00e1s amplio de esquemas expl\u00edcitos versus impl\u00edcitos y la divisi\u00f3n del operador. <strong><a href=\"https:\/\/matforge.org\/implicit-vs-explicit-methods-stability-accuracy\/\" target=\"_blank\" rel=\"nofollow noopener\">Enlace al art\u00edculo existente: M\u00e9todos impl\u00edcitos frente a m\u00e9todos expl\u00edcitos<\/a><\/strong> Discute las regiones de estabilidad, los criterios de precisi\u00f3n y cu\u00e1ndo se hacen necesarios esquemas impl\u00edcitos. Este art\u00edculo se centra espec\u00edficamente en los solucionadores no lineales que se sientan dentro de cada esquema impl\u00edcito.<\/p>\n<h2>Cuando los m\u00e9todos impl\u00edcitos exigen un solucionador no lineal<\/h2>\n<p>La integraci\u00f3n de tiempo impl\u00edcita requiere resolver un sistema no lineal en cada paso de tiempo. Considere la discretizaci\u00f3n de Euler hacia atr\u00e1s de una PDE gen\u00e9rica:<\/p>\n<pre><code>F(u\u207f\u207a\u00b9) = 0<\/code><\/pre>\n<p>El <code>u\u207f\u207a\u00b9<\/code> desconocido aparece dentro del operador <code>F<\/code> a trav\u00e9s de t\u00e9rminos de difusi\u00f3n, cin\u00e9tica de reacci\u00f3n o ecuaciones multif\u00edsicas acopladas. Despu\u00e9s de la discretizaci\u00f3n espacial (volumen finito, elemento finito o diferencia finita), el sistema se convierte en:<\/p>\n<pre><code>F(x) = 0, where x \u2208 \u211d\u207f<\/code><\/pre>\n<p>La dimensi\u00f3n <code>n<\/code> es el n\u00famero de grados de libertad, t\u00edpicamente el producto de las celdas de la cuadr\u00edcula, los campos f\u00edsicos y las iteraciones de paso de tiempo. En una simulaci\u00f3n de campo de fase 3D con celdas de 500\u00b3 y dos campos acoplados, <code>n<\/code> puede superar f\u00e1cilmente 10\u2078.<\/p>\n<p>El desaf\u00edo es que <code>F<\/code> no es lineal. No puedes escribir <code>x = F\u207b\u00b9(0)<\/code>. En su lugar, necesita un algoritmo iterativo que construya una secuencia que converja a la ra\u00edz.<\/p>\n<h2>M\u00e9todo de Newton: la l\u00ednea de base<\/h2>\n<p>El m\u00e9todo de Newton es la referencia contra la cual se miden todos los dem\u00e1s solucionadores no lineales. Para el sistema <code>F(x) = 0<\/code>, construye la matriz jacobiana:<\/p>\n<pre><code>J = \u2202F\/\u2202x<\/code><\/pre>\n<p>e itera:<\/p>\n<pre><code>x\u2096\u208a\u2081 = x\u2096 \u2212 J\u207b\u00b9\u00b7F(x\u2096)<\/code><\/pre>\n<p>La propiedad clave es <strong>convergencia cuadr\u00e1tica<\/strong>. Si el jacobiano es Lipschitz continuo y la suposici\u00f3n inicial est\u00e1 dentro de la cuenca de convergencia, el error satisface:<\/p>\n<pre><code>\u2016x\u2096\u208a\u2081 \u2212 x*\u2016 \u2264 C \u00b7 \u2016x\u2096 \u2212 x*\u2016\u00b2<\/code><\/pre>\n<p>Esto significa que el n\u00famero de d\u00edgitos correctos se duplica aproximadamente con cada iteraci\u00f3n. Para los sistemas de PDE que se comportan bien, el m\u00e9todo de Newton a menudo converge en 3 a 5 iteraciones.<\/p>\n<h3>Jacobiano completo: diferencia anal\u00edtica vs finita<\/h3>\n<p>Construir el jacobiano es la parte m\u00e1s cara del m\u00e9todo de Newton. Las opciones son:<\/p>\n<p><strong>Jacobiano anal\u00edtico.<\/strong> obtienes <code>\u2202F\/\u2202x<\/code> a mano o mediante la diferenciaci\u00f3n autom\u00e1tica. En bibliotecas como Fenics, la formulaci\u00f3n variacional genera autom\u00e1ticamente el jacobiano a trav\u00e9s de la diferenciaci\u00f3n simb\u00f3lica. El resultado es exacto (hasta la precisi\u00f3n del punto flotante).<\/p>\n<p><strong>Jacobiano de diferencia finita.<\/strong> perturbes cada columna de <code>J<\/code> por <code>\u03b5<\/code> y vuelves a evaluar <code>F<\/code>:<\/p>\n<pre><code>J\u1d62 \u2248 (F(x + \u03b5\u00b7e\u1d62) \u2212 F(x)) \/ \u03b5<\/code><\/pre>\n<p>Esto requiere <code>n<\/code> evaluaciones de funciones adicionales por iteraci\u00f3n de Newton. Para grandes <code>n<\/code>, esto domina el costo.<\/p>\n<p><strong>Bloquear jacobiano.<\/strong> En sistemas acoplados con campos <code>k<\/code>, el jacobiano est\u00e1 estructurado en bloques:<\/p>\n<pre><code>J = [ \u2202F\u2081\/\u2202x\u2081  \u2202F\u2081\/\u2202x\u2082  ... ]\n    [ \u2202F\u2082\/\u2202x\u2081  \u2202F\u2082\/\u2202x\u2082  ... ]\n    [          ...       ... ]<\/code><\/pre>\n<p>Si solo necesita bloques diagonales <code>\u2202F\u1d62\/\u2202x\u1d62<\/code>, puede evaluarlos de forma independiente: una t\u00e9cnica llamada <strong> congelaci\u00f3n diagonal<\/strong> o <strong>solvedores totalmente acoplados frente a solucionadores segregados<\/strong>.<\/p>\n<h3>Convergencia global: regiones de b\u00fasqueda y confianza de l\u00ednea<\/h3>\n<p>El m\u00e9todo de Pure Newton es un m\u00e9todo local. Si la suposici\u00f3n inicial est\u00e1 lejos de la soluci\u00f3n, las iteraciones pueden divergir aunque la convergencia cuadr\u00e1tica se mantenga cerca de la ra\u00edz.<\/p>\n<p><strong>B\u00fasqueda de l\u00ednea<\/strong> Modifica el paso de Newton al escalarlo:<\/p>\n<pre><code>x\u2096\u208a\u2081 = x\u2096 \u2212 \u03b1\u00b7J\u207b\u00b9\u00b7F(x\u2096)<\/code><\/pre>\n<p>donde <code>\u03b1 \u2208 (0, 1]<\/code> se elige para reducir una funci\u00f3n de m\u00e9rito. El enfoque cl\u00e1sico minimiza <code>\u2016F(x\u2096 \u2212 \u03b1\u00b7J\u207b\u00b9\u00b7F(x\u2096))\u2016<\/code>.<\/p>\n<p><strong>Regiones de confianza<\/strong> Defina un radio <code>\u0394<\/code> dentro del cual se conf\u00eda en el modelo cuadr\u00e1tico:<\/p>\n<pre><code>min q(s) = F(x\u2096) + J\u00b7s + \u00bd\u00b7s\u1d40\u00b7H\u00b7s\nsubject to \u2016s\u2016 \u2264 \u0394<\/code><\/pre>\n<p>Cuando la reducci\u00f3n de la funci\u00f3n de m\u00e9rito es insuficiente, el radio se encoge. Cuando es suficiente, el radio crece.<\/p>\n<p>El paquete <code>SNES<\/code> de PETSC (SNU no lineal de ecuaciones) proporciona tanto la globalizaci\u00f3n de b\u00fasqueda de l\u00ednea como de la regi\u00f3n de confianza. La elecci\u00f3n afecta el recuento total de iteraciones m\u00e1s que el costo por iteraci\u00f3n.<\/p>\n<h3>Pr\u00e1ctico Newton: cuando funciona y cuando no<\/h3>\n<p>El m\u00e9todo de Newton sobresale cuando:<\/p>\n<ul>\n<li>El jacobiano est\u00e1 disponible en forma exacta (simb\u00f3lico, AD o bloque-anal\u00edtico)<\/li>\n<li>Las no linealidades son leves (difusi\u00f3n, t\u00e9rminos de reacci\u00f3n leves)<\/li>\n<li>La memoria es suficiente para el jacobiano completo (o su escasa factorizaci\u00f3n)<\/li>\n<\/ul>\n<p>El m\u00e9todo de Newton lucha cuando:<\/p>\n<ul>\n<li><code>n<\/code> supera los 10\u2076 y ensamblar el jacobiano completo es prohibitivo<\/li>\n<li>La funci\u00f3n <code>F<\/code> es opaca (c\u00f3digo de simulaci\u00f3n de caja negra)<\/li>\n<li>Cada evaluaci\u00f3n de funciones ya domina el tiempo de ejecuci\u00f3n<\/li>\n<\/ul>\n<p>Para las PDE a gran escala, el enfoque jacobiano completo suele ser demasiado caro. Aqu\u00ed es donde entran los m\u00e9todos cuasi-newton.<\/p>\n<h2>M\u00e9todos cuasi-Newton de Broyden<\/h2>\n<p>El m\u00e9todo de Broyden pertenece a la clase m\u00e1s amplia de m\u00e9todos cuasi-newton. En lugar de calcular <code>J = \u2202F\/\u2202x<\/code>, construye una aproximaci\u00f3n <code>B\u2096 \u2248 J<\/code> a trav\u00e9s de actualizaciones de rango 1 a la condici\u00f3n secante:<\/p>\n<pre><code>B\u2096\u208a\u2081 \u00b7 (x\u2096\u208a\u2081 \u2212 x\u2096) = F(x\u2096\u208a\u2081) \u2212 F(x\u2096)<\/code><\/pre>\n<p>La condici\u00f3n secante es una ecuaci\u00f3n para <code>n<\/code> inc\u00f3gnitas en <code>B\u2096\u208a\u2081<\/code>. La formulaci\u00f3n de Broyden elige la actualizaci\u00f3n que minimiza el cambio de norma de Frobenius:<\/p>\n<pre><code>min \u2016B\u2096\u208a\u2081 \u2212 B\u2096\u2016_F\nsubject to B\u2096\u208a\u2081\u00b7(x\u2096\u208a\u2081 \u2212 x\u2096) = F(x\u2096\u208a\u2081) \u2212 F(x\u2096)<\/code><\/pre>\n<h3>bueno contra malo broyden<\/h3>\n<p>El m\u00e9todo original de Broyden (a veces llamado \u00abbueno Broyden\u00bb) actualiza <code>B\u2096<\/code> usando la ecuaci\u00f3n de la secante. La variante inversa (\u00abBad Broyden\u00bb) actualiza <code>B\u2096\u207b\u00b9<\/code> directamente:<\/p>\n<pre><code>B\u2096\u208a\u2081\u207b\u00b9 = B\u2096\u207b\u00b9 + (\u03b4y \u2212 B\u2096\u207b\u00b9\u00b7\u03b4x)\u00b7\u03b4x\u1d40 \/ (\u03b4x\u1d40\u00b7\u03b4x)<\/code><\/pre>\n<p>donde <code>\u03b4x = x\u2096\u208a\u2081 \u2212 x\u2096<\/code> y <code>\u03b4y = F(x\u2096\u208a\u2081) \u2212 F(x\u2096)<\/code>.<\/p>\n<p>La actualizaci\u00f3n inversa es lo que usa <code>scipy.optimize.broyden1<\/code> de Python. Evita invertir la aproximaci\u00f3n jacobiana en cada paso, un ahorro significativo para grandes problemas.<\/p>\n<h3>La inestabilidad del n\u00famero de condici\u00f3n<\/h3>\n<p>La limitaci\u00f3n pr\u00e1ctica m\u00e1s importante del m\u00e9todo de Broyden es que su aproximaci\u00f3n jacobiana puede estar mal condicionada. La actualizaci\u00f3n de rango 1 modifica solo una direcci\u00f3n, mientras que el resto de la matriz se desplaza. Durante muchas iteraciones, <code>B\u2096<\/code> acumula informaci\u00f3n de curvatura obsoleta.<\/p>\n<p>El n\u00famero de condici\u00f3n <code>\u03ba(B\u2096) = \u2016B\u2096\u2016 \u00b7 \u2016B\u2096\u207b\u00b9\u2016<\/code> puede crecer sin l\u00edmite. Un n\u00famero de condici\u00f3n superior a 10\u2078 hace que los solucionadores de Krylov, como los GMRE, se detengan, incluso si el problema subyacente est\u00e1 bien acondicionado.<\/p>\n<p>Esta es la raz\u00f3n concreta para preferir Newton o JFNK sobre Broyden en simulaciones de producci\u00f3n. Para problemas levemente no lineales con pocos grados de libertad por campo (por ejemplo, difusi\u00f3n 1D, estado estable 2D), el m\u00e9todo de Broyden puede ser competitivo. Para sistemas 3D con 10\u2076+ grados de libertad, la deriva de la condici\u00f3n hace que no sea confiable.<\/p>\n<h3>Broyden de memoria limitada (L-BFGS)<\/h3>\n<p>Para la optimizaci\u00f3n a gran escala, L-BFGS almacena los \u00faltimos <code>m<\/code> pares de pasos <code>(\u03b4x\u1d62, \u03b4y\u1d62)<\/code> y construye impl\u00edcitamente el inverso jacobiano a trav\u00e9s de una recursi\u00f3n. Evita almacenar la matriz <code>n \u00d7 n<\/code> completa.<\/p>\n<p>Sin embargo, L-BFGS est\u00e1 dise\u00f1ado para la optimizaci\u00f3n (minimizar un objetivo escalar), no para la b\u00fasqueda de ra\u00edces (resolviendo <code>F(x) = 0<\/code>). Para la b\u00fasqueda de ra\u00edces de PDE, la actualizaci\u00f3n de Broyden de memoria limitada utilizada en solucionadores como el solucionador <code>BFGS<\/code> de PetSc es m\u00e1s com\u00fan.<\/p>\n<h2>Newton-Krylov sin jacobiano: el moderno est\u00e1ndar a gran escala<\/h2>\n<p>El m\u00e9todo de Newton-Krylov (JFNK) libre de jacobiano aborda el cuello de botella de la memoria de Newton jacobiano completo al nunca ensamblar el jacobiano. En cambio, utiliza un m\u00e9todo subespacial Krylov (t\u00edpicamente GMRES) para resolver el sistema Newton:<\/p>\n<pre><code>J \u00b7 \u0394x = \u2212F(x)<\/code><\/pre>\n<p>GMRES solo requiere productos de matriz-vector <code>J\u00b7v<\/code>. Estos se calculan a trav\u00e9s del <strong> producto del vector jacobiano<\/strong>:<\/p>\n<pre><code>J \u00b7 v \u2248 (F(x + \u03b5\u00b7v) \u2212 F(x)) \/ \u03b5<\/code><\/pre>\n<p>No se ensambla ning\u00fan jacobiano expl\u00edcito. Solo se necesitan <code>F<\/code> y el vector de perturbaci\u00f3n <code>v<\/code>.<\/p>\n<h3>Por qu\u00e9 es obligatorio el preacondicionamiento<\/h3>\n<p>JFNK con un producto de vector jacobiano desnudo rara vez es pr\u00e1ctico. El sistema Newton puede tener un gran n\u00famero de condici\u00f3n, especialmente cuando el jacobiano tiene valores propios muy variados de diferentes procesos f\u00edsicos.<\/p>\n<p><strong>El preacondicionamiento basado en la f\u00edsica (PBP)<\/strong> aborda esto teniendo en cuenta a los operadores conocidos. Considere un sistema de convecci\u00f3n-difusi\u00f3n-reacci\u00f3n:<\/p>\n<pre><code>J = J_convection + J_diffusion + J_reaction<\/code><\/pre>\n<p>PBP reemplaza el preacondicionador con:<\/p>\n<pre><code>M = J_diffusion<\/code><\/pre>\n<p>El operador de difusi\u00f3n generalmente domina el espectro y, a menudo, es de bloque-tridiagonal o tridiagonal por campo. Su inversa se puede calcular de manera eficiente a trav\u00e9s de una escasa factorizaci\u00f3n directa o ILU, mientras que los t\u00e9rminos de convecci\u00f3n y reacci\u00f3n se tratan expl\u00edcitamente.<\/p>\n<p>El sistema preacondicionado se convierte en:<\/p>\n<pre><code>M\u207b\u00b9 \u00b7 J \u00b7 \u0394x = \u2212M\u207b\u00b9 \u00b7 F(x)<\/code><\/pre>\n<p>El n\u00famero de condici\u00f3n de <code>M\u207b\u00b9\u00b7J<\/code> se reduce dr\u00e1sticamente porque el operador de difusi\u00f3n, la fuente del peor condicionamiento, se ha incluido en <code>M<\/code>.<\/p>\n<p>Sin preacondicionamiento, JFNK puede requerir cientos o miles de iteraciones de GMRES. Con PBP, a menudo converge en 10 a 50 iteraciones, igualando o superando a Newton jacobiano completo.<\/p>\n<h3>El patr\u00f3n Newton-Krylov en la pr\u00e1ctica<\/h3>\n<ol>\n<li><strong>Construir el residuo de Newton<\/strong> <code>r = F(x\u2096)<\/code><\/li>\n<li><strong>Resolver<\/strong> <code>J \u00b7 \u0394x = \u2212r<\/code> <strong>Usando GMRES<\/strong><\/li>\n<li><strong>Los productos Jacobian-Vector<\/strong> se calculan a trav\u00e9s de perturbaciones de diferencia finita de <code>F<\/code><\/li>\n<li><strong>preacondicionador<\/strong> <code>M<\/code> se aplica en cada iteraci\u00f3n de GMRES<\/li>\n<li><strong>Actualizar<\/strong> <code>x\u2096\u208a\u2081 = x\u2096 + \u0394x<\/code><\/li>\n<li><strong>Comprobar convergencia<\/strong> en <code>\u2016r\u2016<\/code><\/li>\n<\/ol>\n<p>Este patr\u00f3n aparece en todos los marcos PDE principales: Fenics\/Dolfin, PetSc\/SNES, Fipy y Nonlinearsolve.jl. La diferencia radica en c\u00f3mo se construye el preacondicionador y c\u00f3mo se calcula el producto vectorial jacobiano.<\/p>\n<h2>El patr\u00f3n de polialgoritmo: c\u00f3mo los solucionadores modernos se despliegan realmente<\/h2>\n<p>Los solucionadores de producci\u00f3n rara vez se basan en un solo m\u00e9todo. En su lugar, utilizan un <strong>polialgoritmo<\/strong> que se adapta a la dificultad del problema:<\/p>\n<pre><code>1. Start with fast Broyden (cheap per iteration, no Jacobian)\n2. If convergence stalls, fall back to full Newton (robust quadratic convergence)\n3. If Newton also fails, fall back to TrustRegion (globally convergent)<\/code><\/pre>\n<p>Este es el patr\u00f3n utilizado por <code>SNES<\/code> de PetSc, <code>DifferentialEquations.jl<\/code> de PetSc y el solucionador no lineal de Moose.<\/p>\n<h3>Forzamiento de Eisenstat-Walker<\/h3>\n<p>La estrategia Eisenstat-Walker (a veces llamada \u00abestrategia de forzamiento\u00bb) adapta la tolerancia interna del solucionador de Krylov en relaci\u00f3n con el residuo de Newton:<\/p>\n<pre><code>\u2016J \u00b7 \u0394x + r\u2016 \u2264 \u03b7\u2096 \u00b7 \u2016r\u2016<\/code><\/pre>\n<p>donde <code>\u03b7\u2096<\/code> se relaja cuando <code>r<\/code> se encoge. Las primeras iteraciones de Newton utilizan una tolerancia interna suelta (menos pasos de Krylov). A medida que disminuye el residuo de Newton, la tolerancia interna se aprieta (m\u00e1s precisi\u00f3n de Krylov).<\/p>\n<p>Esto evita que el trabajo desperdiciado resuelva el sistema lineal con una alta precisi\u00f3n cuando el iterado de Newton a\u00fan est\u00e1 lejos de la ra\u00edz.<\/p>\n<h2>Marco de decisi\u00f3n: cu\u00e1ndo elegir qu\u00e9 m\u00e9todo<\/h2>\n<p>La siguiente tabla resume las compensaciones pr\u00e1cticas:<\/p>\n<h2>Comparaci\u00f3n de m\u00e9todos<\/h2>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Criterio<\/th>\n<th>Newton-Raphson<\/th>\n<th>Broyden (cuasi-Newton)<\/th>\n<th>JFNK (Newton-Krylov)<\/th>\n<\/tr>\n<tr>\n<td>tasa de convergencia<\/td>\n<td>Cuadr\u00e1tico (ca\u00edda cercana)<\/td>\n<td>Superlinear (por iteraci\u00f3n), pero no confiable para grandes <code>n<\/code><\/td>\n<td>depende del preacondicionador; Superlineal con buen PBP<\/td>\n<\/tr>\n<tr>\n<td>Huella de memoria<\/td>\n<td>o(n\u00b2) para jacobiano completo (pero escaso lo reduce)<\/td>\n<td>o(n\u00b2) para la aproximaci\u00f3n inversa de Broyden; O(m\u00b7n) para variantes de memoria limitada<\/td>\n<td>O(n): solo vectores de funciones y almacenamiento de Krylov<\/td>\n<\/tr>\n<tr>\n<td>Costo por iteraci\u00f3n<\/td>\n<td>Alto (Asamblea Jacobiano + Factorizaci\u00f3n)<\/td>\n<td>Low (Actualizaci\u00f3n Rank-1 + Evaluaci\u00f3n de Funciones)<\/td>\n<td>Moderado (iteraci\u00f3n JVP + Krylov)<\/td>\n<\/tr>\n<tr>\n<td>Requisito jacobiano<\/td>\n<td>Jacobiano completo (anal\u00edtico, AD o FD)<\/td>\n<td>No jacobiano (aproximado de pasos)<\/td>\n<td>No Jacobiano expl\u00edcito (solo JVP)<\/td>\n<\/tr>\n<tr>\n<td>preacondicionamiento<\/td>\n<td>Opcional (mejora la soluci\u00f3n lineal dentro de Newton)<\/td>\n<td>No aplicable (sin jacobiano)<\/td>\n<td>Requerido para la convergencia pr\u00e1ctica (PBP muy recomendable)<\/td>\n<\/tr>\n<tr>\n<td>Mejor caso de uso<\/td>\n<td>Problemas peque\u00f1os a medianos con exacto jacobiano disponible<\/td>\n<td>Problemas levemente no lineales 1D-2D con presupuesto limitado<\/td>\n<td>Problemas 3D a gran escala con millones de grados de libertad<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Elegir por tama\u00f1o del problema<\/h3>\n<p><strong>Peque\u00f1os problemas (n &lt; 10\u2074):<\/strong> Newton completo con jacobiano anal\u00edtico o simb\u00f3lico. El costo est\u00e1 dominado por el ensamblaje de la matriz, por lo que la convergencia cuadr\u00e1tica supera el costo de configuraci\u00f3n.<\/p>\n<p><strong>Problemas medios (10\u2074 &lt; n &lt; 10\u2076):<\/strong> Broyden puede ser competitivo si la no linealidad es leve. Newton con escasa factorizaci\u00f3n directa es m\u00e1s robusta pero cuesta m\u00e1s por iteraci\u00f3n.<\/p>\n<p><strong>Grandes problemas (n &gt; 10\u2076):<\/strong> JFNK con preacondicionamiento basado en la f\u00edsica es la opci\u00f3n est\u00e1ndar. La asamblea jacobiana completa es prohibitiva y la deriva de condiciones de Broyden no es confiable.<\/p>\n<h3>Elegir por severidad de no linealidad<\/h3>\n<p><strong>La no linealidad leve (t\u00e9rminos de reacci\u00f3n d\u00e9biles dominados por difusi\u00f3n):<\/strong> Newton o Broyden funcionan bien. La convergencia cuadr\u00e1tica de Newton lo hace atractivo para sistemas peque\u00f1os.<\/p>\n<p><strong>Fuerte no linealidad (campo de fase acoplado, reacci\u00f3n-difusi\u00f3n con cin\u00e9tica r\u00edgida):<\/strong> Newton con globalizaci\u00f3n (b\u00fasqueda de l\u00ednea o regi\u00f3n de confianza) es esencial. La aproximaci\u00f3n de Broyden puede enga\u00f1ar a la direcci\u00f3n de b\u00fasqueda.<\/p>\n<p><strong>No linealidad opaca (simulaci\u00f3n de caja negra, desconocida <code>F<\/code>):<\/strong> JFNK o Broyden, ya que no requieren una construcci\u00f3n jacobiana expl\u00edcita.<\/p>\n<h3>Elegir por restricciones de memoria<\/h3>\n<p><strong>Memoria limitada (nodo \u00fanico, &lt; 64 GB):<\/strong> JFNK solo requiere almacenamiento O(n) para vectores. Newton requiere o(nz(j)) para el almacenamiento jacobiano escaso m\u00e1s o(nz(l)) para la factorizaci\u00f3n.<\/p>\n<p><strong>Amplia memoria (nodo de cl\u00faster, &gt; 256 GB):<\/strong> Full Newton se vuelve factible para problemas con N hasta 10\u2077, siempre que el jacobiano sea escaso.<\/p>\n<h2>Ejemplos de c\u00f3digo: c\u00f3mo se ven estos m\u00e9todos en la pr\u00e1ctica<\/h2>\n<h3>Scipy: m\u00e9todo de Broyden<\/h3>\n<p>Scipy proporciona <code>broyden1<\/code> para la b\u00fasqueda de ra\u00edces con la actualizaci\u00f3n cuasi-newton de Broyden:<\/p>\n<pre><code class=\"language-python\">from scipy.optimize import broyden1, root\n\ndef f(x):\n    \"\"\"System F(x) = 0\"\"\"\n    return [x[0]**2 + x[1] - 1,\n            x[0] + x[1]**2 - 2]\n\nresult = broyden1(f, [0.5, 0.5])\nprint(f\"Solution: {result.x}\")\n<\/code><\/pre>\n<p>La funci\u00f3n <code>broyden1<\/code> construye la aproximaci\u00f3n jacobiana inversa a trav\u00e9s de actualizaciones de rango 1. Para sistemas peque\u00f1os, evita el montaje jacobiano completo. Para sistemas grandes, la deriva de la condici\u00f3n puede causar fallas de convergencia.<\/p>\n<p>La interfaz <code>root<\/code> tambi\u00e9n admite <code>'hybr'<\/code> (Levenberg-Region-Trust-Region de MinPack) y <code>'lm'<\/code> (Levenberg-Marquardt), que pueden manejar mejor los problemas estructurados de m\u00ednimos cuadrados que Broyden.<\/p>\n<h3>Fenics: Newton con simb\u00f3lico jacobiano<\/h3>\n<p>Fenics genera el jacobiano simb\u00f3licamente a partir de la forma variacional:<\/p>\n<pre><code class=\"language-python\">from fenics import *\n\nmesh = UnitSquareMesh(32, 32)\nV = FunctionSpace(mesh, \"P\", 1)\n\nu = TrialFunction(V)\nv = TestFunction(V)\n\nf = Constant(1.0)\na = dot(grad(u), grad(v)) * dx\nL = f * v * dx\n\nu_solution = Function(V)\nsolve(a == L, u_solution)\n\n# Nonlinear: Newton iterate with automatic Jacobian\nU = Function(V)  # current solution\nu = TrialFunction(V)\n\nF = dot(grad(U), grad(v)) * dx - f * v * dx  # residual\nA = derivative(F, U, u)  # Jacobian (symbolic)\n\nproblem = NonlinearProblem(F, U, bcs)\nsolver = NewtonSolver(MPI.comm.world)\nsolver.parameters[\"linear_solver\"] = \"petsc\"\nsolver.solve(problem)\n<\/code><\/pre>\n<p>La llamada <code>derivative(F, U, u)<\/code> genera el jacobiano exacto a trav\u00e9s de la diferenciaci\u00f3n autom\u00e1tica. Esta es la caracter\u00edstica m\u00e1s poderosa de Fenics para problemas no lineales.<\/p>\n<h3>PETSC\/SNES: Newton-Krylov con preacondicionamiento<\/h3>\n<p>El paquete SNES de PetSc implementa el patr\u00f3n completo de Newton-Krylov:<\/p>\n<pre><code class=\"language-python\">from pysns import SNES\n\n# Define residual function\ndef residual(x):\n    # Return F(x) \u2014 the nonlinear residual\n    return F_of_x(x)\n\n# Create SNES solver\nsnes = SNESCreate()\nsnesSetFunction(snes, x, residual)\n\n# Set Newton-Krylov with preconditioning\nSNESSetType(snes, SNESNEWTONKRYLOV)\nSNESSetKrylovDimension(snes, 50)  # GMRES max iterations\n\n# Configure preconditioner (physics-based)\nksp = SNESGetKSP(snes)\nKSPSetType(ksp, KSPPRECONDEL)  # ILU preconditioner\nKSPSetPreconditioner(ksp, PCILU)\n\n# Solve\nSNESSetUp(snes)\nSNESSolve(snes)\n<\/code><\/pre>\n<p>El tipo de Newton-Krylov cambia autom\u00e1ticamente entre las variantes de Newton (ensamblados jacobianos), libres jacobianos de Newton y basados en Broyden, seg\u00fan la configuraci\u00f3n de <code>SNESSetUser Jacobian<\/code>. La configuraci\u00f3n del preacondicionador controla la tasa de convergencia de Krylov.<\/p>\n<h3>Nonlinearsolve.jl: el patr\u00f3n de polialgoritmo<\/h3>\n<p>El ecosistema de diferenciales de Julia utiliza un polialgoritmo que encadena m\u00e9todos:<\/p>\n<pre><code class=\"language-julia\">using DifferentialEquations\n\n# Define the nonlinear system\nf! = (residual, x) -&gt; begin\n    residual[1] = x[1]^2 + x[2] - 1\n    residual[2] = x[1] + x[2]^2 - 2\nend\n\n# Newton-Krylov with Eisenstein-Walker forcing\nprob = NonlinearProblem(f!, [0.5, 0.5])\nsol = solve(prob, NewtonRaphson(); abstol=1e-8, reltol=1e-6)\n\n# For large-scale systems: Jacobian-free Newton-Krylov\nsol = solve(prob, JFNK(); abstol=1e-8)\n<\/code><\/pre>\n<p>El algoritmo <code>JFNK<\/code> calcula los productos del vector jacobiano a trav\u00e9s de diferencias finitas y delega en un solucionador de subespacios de Krylov. Para sistemas r\u00edgidos, el polialgoritmo vuelve a <code>TrustRegion<\/code> si JFNK se detiene.<\/p>\n<h2>Rendimiento emp\u00edrico: JFNK vs Dividir operador<\/h2>\n<p>Un punto de referencia concreto de la literatura demuestra la ventaja pr\u00e1ctica de JFNK. En c\u00e1lculos de transferencia radiativa no LTE (NLTE), un estudio de 2024 en Astronom\u00eda &amp; La astrof\u00edsica (A&amp;Amp;A) compar\u00f3 a Newton-Krylov libre de jacobios con enfoques de divisi\u00f3n del operador. JFNK convergi\u00f3 aproximadamente <strong>2\u00d7 m\u00e1s r\u00e1pido<\/strong> que la divisi\u00f3n del operador para el mismo objetivo de precisi\u00f3n, mientras usaba memoria comparable. El resultado destaca que los solucionadores no lineales monol\u00edticos pueden superar los enfoques particionados cuando la no linealidad es fuerte y el preacondicionador est\u00e1 bien adaptado a la f\u00edsica.<\/p>\n<h2>Resumen: \u00bfQu\u00e9 m\u00e9todo recomendamos?<\/h2>\n<p>La recomendaci\u00f3n depende de la escala y estructura de su problema:<\/p>\n<ul>\n<li><strong>Peque\u00f1os problemas con el jacobiano exacto disponible:<\/strong> Newton-Raphson. La convergencia cuadr\u00e1tica y la robusta cuenca de convergencia superan el costo jacobiano.<\/li>\n<li><strong>Sistemas 1D-2D levemente no lineales:<\/strong> El m\u00e9todo de Broyden es rentable. Acepte el riesgo de desviaci\u00f3n de la condici\u00f3n para problemas de peque\u00f1o a medio donde cada iteraci\u00f3n es barata.<\/li>\n<li><strong>Sistemas 3D a gran escala con millones de grados de libertad:<\/strong> JFNK con preacondicionamiento basado en la f\u00edsica. Esta es la \u00fanica opci\u00f3n viable cuando la asamblea jacobiana completa es prohibitiva y la desviaci\u00f3n de la condici\u00f3n de Broyden es inaceptable.<\/li>\n<li><strong>C\u00f3digos de simulaci\u00f3n de caja negra:<\/strong> JFNK o Broyden. Ambos evitan la construcci\u00f3n jacobiana expl\u00edcita.<\/li>\n<li><strong>Requisitos de simulaci\u00f3n cr\u00edtica:<\/strong> Newton con globalizaci\u00f3n de b\u00fasqueda de l\u00ednea. La convergencia cuadr\u00e1tica y la estabilidad global de los m\u00e9todos de la regi\u00f3n de confianza valen el costo adicional.<\/li>\n<\/ul>\n<p>Para la mayor\u00eda de los flujos de trabajo de PDE de producci\u00f3n, el patr\u00f3n de polialgorithm (Fast Broyden Retrolback to Newton Fallback to trustRegion) proporciona el mejor equilibrio de velocidad, robustez y fiabilidad.<\/p>\n<h2>Gu\u00edas relacionadas<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/time-integration-methods-for-pde-solvers-explicit-vs-implicit-schemes\/\" target=\"_blank\" rel=\"nofollow noopener\">Integraci\u00f3n horaria M\u00e9todos para solucionadores de PDE: esquemas expl\u00edcitos versus impl\u00edcitos<\/a> \u2014 Gu\u00eda fundamental para esquemas impl\u00edcitos que requieren solucionadores no lineales.<\/li>\n<li><a href=\"https:\/\/matforge.org\/implicit-vs-explicit-methods-stability-accuracy\/\" target=\"_blank\" rel=\"nofollow noopener\">m\u00e9todos impl\u00edcitos frente a expl\u00edcitos: estabilidad, precisi\u00f3n, y cu\u00e1ndo usar cada<\/a>: analiza las regiones de estabilidad y cu\u00e1ndo se hacen necesarios los m\u00e9todos impl\u00edcitos.<\/li>\n<li><a href=\"https:\/\/matforge.org\/choosing-right-python-pde-solver-fipy-py-pde-fenics\/\" target=\"_blank\" rel=\"nofollow noopener\">elegir el derecho Solucionador de PDE de Python: Fipy vs PY-PDE vs Fenics<\/a>: compara las bibliotecas de solucionadores, incluidos sus backends de solucionador no lineal.<\/li>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\" target=\"_blank\" rel=\"nofollow noopener\">Gesti\u00f3n de problemas de PDE a gran escala: estrategias, solucionadores y estudios de casos de HPC<\/a> \u2014 Cubre solucionadores no lineales a escala con infraestructura HPC.<\/li>\n<li><a href=\"https:\/\/matforge.org\/operator-splitting-strang-splitting-and-imex-schemes-for-pde-solvers\/\" target=\"_blank\" rel=\"nofollow noopener\">M\u00e9todos de divisi\u00f3n del operador: esquemas de divisi\u00f3n y IMEX de Strang<\/a> \u2014 alternativas a la resoluci\u00f3n no lineal monol\u00edtica.<\/li>\n<\/ul>\n<h2>referencias<\/h2>\n<ul>\n<li>Carga, r., &amp; Faires, J. D. (2011). <em>An\u00e1lisis num\u00e9rico<\/em> (9\u00aa ed.). Aprendizaje Cengage. El cap\u00edtulo 8 cubre el m\u00e9todo de Newton y los m\u00e9todos cuasi-Newton.<\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Broyden%27s_method\" target=\"_blank\" rel=\"nofollow noopener\">Wikipedia: M\u00e9todo de Broyden<\/a> \u2014 Descripci\u00f3n general de la familia de b\u00fasqueda de ra\u00edces cuasi-Newton.<\/li>\n<li><a href=\"https:\/\/docs.scipy.org\/doc\/scipy\/reference\/generated\/scipy.optimize.broyden1.html\" target=\"_blank\" rel=\"nofollow noopener\">scipy: scipy.optimize.broyden1<\/a> \u2014 Documentaci\u00f3n para el solucionador Broyden de Scipy.<\/li>\n<li><a href=\"https:\/\/petsc.org\/main\/docs\/fieldsn\/snes\/snes.html\" target=\"_blank\" rel=\"nofollow noopener\">Documentaci\u00f3n de PETSC SNES<\/a> \u2014 Solucionador de ecuaciones no lineales SNU para patrones de Newton-Krylov.<\/li>\n<li><a href=\"https:\/\/docs.python-fenics.org\/prob\/fem-solutions\/nonlinear-variables\/\" target=\"_blank\" rel=\"nofollow noopener\">FENICS no lineal Solvers<\/a> \u2014 Generaci\u00f3n jacobiana autom\u00e1tica a trav\u00e9s de la diferenciaci\u00f3n simb\u00f3lica.<\/li>\n<li><a href=\"https:\/\/diffeq.sciml.ai\/stable\/solvers\/nonsolve_overview\/#jfnk\" target=\"_blank\" rel=\"nofollow noopener\">differentialequations.jl: JFNK<\/a> \u2014 Newton-Krylov sin jacobiano para solucionadores de PDE basados en Julia.<\/li>\n<\/ul>\n<h2>\u00bfQuiere ayuda para implementar un solucionador no lineal para su investigaci\u00f3n?<\/h2>\n<p>Elegir el m\u00e9todo de solucionador no lineal adecuado puede marcar la diferencia entre una simulaci\u00f3n que termina en horas y una que nunca converge. Si est\u00e1 luchando con la divergencia de iteraci\u00f3n de Newton, la deriva de la condici\u00f3n de Broyden o el ajuste del preacondicionador JFNK, nuestro equipo puede ayudarlo.<\/p>\n<p>Nos especializamos en marcos de verificaci\u00f3n de construcci\u00f3n para c\u00f3digos cient\u00edficos de Python y Julia, incluidos los flujos de trabajo del solucionador no lineal para simulaciones PDE. <a href=\"https:\/\/matforge.org\/category\/issue-tracking-tickets-technical-requests\/\" target=\"_blank\" rel=\"nofollow noopener\">Ponte en contacto a trav\u00e9s de nuestro seguimiento de problemas sistema<\/a> para discutir las necesidades de su proyecto.<\/p>\n","protected":false,"raw":"<p>Cuando discretizas una ecuaci\u00f3n diferencial parcial no lineal, obtienes un sistema algebraico no lineal. Resolverlo requiere elegir el m\u00e9todo de solucionador correcto. El m\u00e9todo de Newton converge cuadr\u00e1ticamente pero exige un jacobiano completo. El m\u00e9todo de Broyden hace que el jacobiano sea m\u00e1s barato pero puede desestabilizarse. El enfoque de Newton-Krylov (JFNK) libre de jacobiano evita por completo el jacobiano, confiando solo en productos vectoriales jacobianos con preacondicionamiento basado en la f\u00edsica para mantener la convergencia manejable.<\/p>\n<p>La elecci\u00f3n no es te\u00f3rica. Determina si su simulaci\u00f3n converge, cu\u00e1nta memoria consume y si termina en minutos o d\u00edas.<\/p>\n<p><strong><a href=\"https:\/\/matforge.org\/time-integration-methods-for-pde-solvers-explicit-vs-implicit-schemes\/\" target=\"_blank\" rel=\"nofollow noopener\">Enlace al art\u00edculo existente: los m\u00e9todos de integraci\u00f3n de tiempo para los solucionadores de PDE<\/a><\/strong> cubren el panorama m\u00e1s amplio de esquemas expl\u00edcitos versus impl\u00edcitos y la divisi\u00f3n del operador. <strong><a href=\"https:\/\/matforge.org\/implicit-vs-explicit-methods-stability-accuracy\/\" target=\"_blank\" rel=\"nofollow noopener\">Enlace al art\u00edculo existente: M\u00e9todos impl\u00edcitos frente a m\u00e9todos expl\u00edcitos<\/a><\/strong> Discute las regiones de estabilidad, los criterios de precisi\u00f3n y cu\u00e1ndo se hacen necesarios esquemas impl\u00edcitos. Este art\u00edculo se centra espec\u00edficamente en los solucionadores no lineales que se sientan dentro de cada esquema impl\u00edcito.<\/p>\n<h2>Cuando los m\u00e9todos impl\u00edcitos exigen un solucionador no lineal<\/h2>\n<p>La integraci\u00f3n de tiempo impl\u00edcita requiere resolver un sistema no lineal en cada paso de tiempo. Considere la discretizaci\u00f3n de Euler hacia atr\u00e1s de una PDE gen\u00e9rica:<\/p>\n<pre><code>F(u\u207f\u207a\u00b9) = 0<\/code><\/pre>\n<p>El <code>u\u207f\u207a\u00b9<\/code> desconocido aparece dentro del operador <code>F<\/code> a trav\u00e9s de t\u00e9rminos de difusi\u00f3n, cin\u00e9tica de reacci\u00f3n o ecuaciones multif\u00edsicas acopladas. Despu\u00e9s de la discretizaci\u00f3n espacial (volumen finito, elemento finito o diferencia finita), el sistema se convierte en:<\/p>\n<pre><code>F(x) = 0, where x \u2208 \u211d\u207f<\/code><\/pre>\n<p>La dimensi\u00f3n <code>n<\/code> es el n\u00famero de grados de libertad, t\u00edpicamente el producto de las celdas de la cuadr\u00edcula, los campos f\u00edsicos y las iteraciones de paso de tiempo. En una simulaci\u00f3n de campo de fase 3D con celdas de 500\u00b3 y dos campos acoplados, <code>n<\/code> puede superar f\u00e1cilmente 10\u2078.<\/p>\n<p>El desaf\u00edo es que <code>F<\/code> no es lineal. No puedes escribir <code>x = F\u207b\u00b9(0)<\/code>. En su lugar, necesita un algoritmo iterativo que construya una secuencia que converja a la ra\u00edz.<\/p>\n<h2>M\u00e9todo de Newton: la l\u00ednea de base<\/h2>\n<p>El m\u00e9todo de Newton es la referencia contra la cual se miden todos los dem\u00e1s solucionadores no lineales. Para el sistema <code>F(x) = 0<\/code>, construye la matriz jacobiana:<\/p>\n<pre><code>J = \u2202F\/\u2202x<\/code><\/pre>\n<p>e itera:<\/p>\n<pre><code>x\u2096\u208a\u2081 = x\u2096 \u2212 J\u207b\u00b9\u00b7F(x\u2096)<\/code><\/pre>\n<p>La propiedad clave es <strong>convergencia cuadr\u00e1tica<\/strong>. Si el jacobiano es Lipschitz continuo y la suposici\u00f3n inicial est\u00e1 dentro de la cuenca de convergencia, el error satisface:<\/p>\n<pre><code>\u2016x\u2096\u208a\u2081 \u2212 x*\u2016 \u2264 C \u00b7 \u2016x\u2096 \u2212 x*\u2016\u00b2<\/code><\/pre>\n<p>Esto significa que el n\u00famero de d\u00edgitos correctos se duplica aproximadamente con cada iteraci\u00f3n. Para los sistemas de PDE que se comportan bien, el m\u00e9todo de Newton a menudo converge en 3 a 5 iteraciones.<\/p>\n<h3>Jacobiano completo: diferencia anal\u00edtica vs finita<\/h3>\n<p>Construir el jacobiano es la parte m\u00e1s cara del m\u00e9todo de Newton. Las opciones son:<\/p>\n<p><strong>Jacobiano anal\u00edtico.<\/strong> obtienes <code>\u2202F\/\u2202x<\/code> a mano o mediante la diferenciaci\u00f3n autom\u00e1tica. En bibliotecas como Fenics, la formulaci\u00f3n variacional genera autom\u00e1ticamente el jacobiano a trav\u00e9s de la diferenciaci\u00f3n simb\u00f3lica. El resultado es exacto (hasta la precisi\u00f3n del punto flotante).<\/p>\n<p><strong>Jacobiano de diferencia finita.<\/strong> perturbes cada columna de <code>J<\/code> por <code>\u03b5<\/code> y vuelves a evaluar <code>F<\/code>:<\/p>\n<pre><code>J\u1d62 \u2248 (F(x + \u03b5\u00b7e\u1d62) \u2212 F(x)) \/ \u03b5<\/code><\/pre>\n<p>Esto requiere <code>n<\/code> evaluaciones de funciones adicionales por iteraci\u00f3n de Newton. Para grandes <code>n<\/code>, esto domina el costo.<\/p>\n<p><strong>Bloquear jacobiano.<\/strong> En sistemas acoplados con campos <code>k<\/code>, el jacobiano est\u00e1 estructurado en bloques:<\/p>\n<pre><code>J = [ \u2202F\u2081\/\u2202x\u2081  \u2202F\u2081\/\u2202x\u2082  ... ]\n    [ \u2202F\u2082\/\u2202x\u2081  \u2202F\u2082\/\u2202x\u2082  ... ]\n    [          ...       ... ]<\/code><\/pre>\n<p>Si solo necesita bloques diagonales <code>\u2202F\u1d62\/\u2202x\u1d62<\/code>, puede evaluarlos de forma independiente: una t\u00e9cnica llamada <strong> congelaci\u00f3n diagonal<\/strong> o <strong>solvedores totalmente acoplados frente a solucionadores segregados<\/strong>.<\/p>\n<h3>Convergencia global: regiones de b\u00fasqueda y confianza de l\u00ednea<\/h3>\n<p>El m\u00e9todo de Pure Newton es un m\u00e9todo local. Si la suposici\u00f3n inicial est\u00e1 lejos de la soluci\u00f3n, las iteraciones pueden divergir aunque la convergencia cuadr\u00e1tica se mantenga cerca de la ra\u00edz.<\/p>\n<p><strong>B\u00fasqueda de l\u00ednea<\/strong> Modifica el paso de Newton al escalarlo:<\/p>\n<pre><code>x\u2096\u208a\u2081 = x\u2096 \u2212 \u03b1\u00b7J\u207b\u00b9\u00b7F(x\u2096)<\/code><\/pre>\n<p>donde <code>\u03b1 \u2208 (0, 1]<\/code> se elige para reducir una funci\u00f3n de m\u00e9rito. El enfoque cl\u00e1sico minimiza <code>\u2016F(x\u2096 \u2212 \u03b1\u00b7J\u207b\u00b9\u00b7F(x\u2096))\u2016<\/code>.<\/p>\n<p><strong>Regiones de confianza<\/strong> Defina un radio <code>\u0394<\/code> dentro del cual se conf\u00eda en el modelo cuadr\u00e1tico:<\/p>\n<pre><code>min q(s) = F(x\u2096) + J\u00b7s + \u00bd\u00b7s\u1d40\u00b7H\u00b7s\nsubject to \u2016s\u2016 \u2264 \u0394<\/code><\/pre>\n<p>Cuando la reducci\u00f3n de la funci\u00f3n de m\u00e9rito es insuficiente, el radio se encoge. Cuando es suficiente, el radio crece.<\/p>\n<p>El paquete <code>SNES<\/code> de PETSC (SNU no lineal de ecuaciones) proporciona tanto la globalizaci\u00f3n de b\u00fasqueda de l\u00ednea como de la regi\u00f3n de confianza. La elecci\u00f3n afecta el recuento total de iteraciones m\u00e1s que el costo por iteraci\u00f3n.<\/p>\n<h3>Pr\u00e1ctico Newton: cuando funciona y cuando no<\/h3>\n<p>El m\u00e9todo de Newton sobresale cuando:<\/p>\n<ul>\n<li>El jacobiano est\u00e1 disponible en forma exacta (simb\u00f3lico, AD o bloque-anal\u00edtico)<\/li>\n<li>Las no linealidades son leves (difusi\u00f3n, t\u00e9rminos de reacci\u00f3n leves)<\/li>\n<li>La memoria es suficiente para el jacobiano completo (o su escasa factorizaci\u00f3n)<\/li>\n<\/ul>\n<p>El m\u00e9todo de Newton lucha cuando:<\/p>\n<ul>\n<li><code>n<\/code> supera los 10\u2076 y ensamblar el jacobiano completo es prohibitivo<\/li>\n<li>La funci\u00f3n <code>F<\/code> es opaca (c\u00f3digo de simulaci\u00f3n de caja negra)<\/li>\n<li>Cada evaluaci\u00f3n de funciones ya domina el tiempo de ejecuci\u00f3n<\/li>\n<\/ul>\n<p>Para las PDE a gran escala, el enfoque jacobiano completo suele ser demasiado caro. Aqu\u00ed es donde entran los m\u00e9todos cuasi-newton.<\/p>\n<h2>M\u00e9todos cuasi-Newton de Broyden<\/h2>\n<p>El m\u00e9todo de Broyden pertenece a la clase m\u00e1s amplia de m\u00e9todos cuasi-newton. En lugar de calcular <code>J = \u2202F\/\u2202x<\/code>, construye una aproximaci\u00f3n <code>B\u2096 \u2248 J<\/code> a trav\u00e9s de actualizaciones de rango 1 a la condici\u00f3n secante:<\/p>\n<pre><code>B\u2096\u208a\u2081 \u00b7 (x\u2096\u208a\u2081 \u2212 x\u2096) = F(x\u2096\u208a\u2081) \u2212 F(x\u2096)<\/code><\/pre>\n<p>La condici\u00f3n secante es una ecuaci\u00f3n para <code>n<\/code> inc\u00f3gnitas en <code>B\u2096\u208a\u2081<\/code>. La formulaci\u00f3n de Broyden elige la actualizaci\u00f3n que minimiza el cambio de norma de Frobenius:<\/p>\n<pre><code>min \u2016B\u2096\u208a\u2081 \u2212 B\u2096\u2016_F\nsubject to B\u2096\u208a\u2081\u00b7(x\u2096\u208a\u2081 \u2212 x\u2096) = F(x\u2096\u208a\u2081) \u2212 F(x\u2096)<\/code><\/pre>\n<h3>bueno contra malo broyden<\/h3>\n<p>El m\u00e9todo original de Broyden (a veces llamado \"bueno Broyden\") actualiza <code>B\u2096<\/code> usando la ecuaci\u00f3n de la secante. La variante inversa (\"Bad Broyden\") actualiza <code>B\u2096\u207b\u00b9<\/code> directamente:<\/p>\n<pre><code>B\u2096\u208a\u2081\u207b\u00b9 = B\u2096\u207b\u00b9 + (\u03b4y \u2212 B\u2096\u207b\u00b9\u00b7\u03b4x)\u00b7\u03b4x\u1d40 \/ (\u03b4x\u1d40\u00b7\u03b4x)<\/code><\/pre>\n<p>donde <code>\u03b4x = x\u2096\u208a\u2081 \u2212 x\u2096<\/code> y <code>\u03b4y = F(x\u2096\u208a\u2081) \u2212 F(x\u2096)<\/code>.<\/p>\n<p>La actualizaci\u00f3n inversa es lo que usa <code>scipy.optimize.broyden1<\/code> de Python. Evita invertir la aproximaci\u00f3n jacobiana en cada paso, un ahorro significativo para grandes problemas.<\/p>\n<h3>La inestabilidad del n\u00famero de condici\u00f3n<\/h3>\n<p>La limitaci\u00f3n pr\u00e1ctica m\u00e1s importante del m\u00e9todo de Broyden es que su aproximaci\u00f3n jacobiana puede estar mal condicionada. La actualizaci\u00f3n de rango 1 modifica solo una direcci\u00f3n, mientras que el resto de la matriz se desplaza. Durante muchas iteraciones, <code>B\u2096<\/code> acumula informaci\u00f3n de curvatura obsoleta.<\/p>\n<p>El n\u00famero de condici\u00f3n <code>\u03ba(B\u2096) = \u2016B\u2096\u2016 \u00b7 \u2016B\u2096\u207b\u00b9\u2016<\/code> puede crecer sin l\u00edmite. Un n\u00famero de condici\u00f3n superior a 10\u2078 hace que los solucionadores de Krylov, como los GMRE, se detengan, incluso si el problema subyacente est\u00e1 bien acondicionado.<\/p>\n<p>Esta es la raz\u00f3n concreta para preferir Newton o JFNK sobre Broyden en simulaciones de producci\u00f3n. Para problemas levemente no lineales con pocos grados de libertad por campo (por ejemplo, difusi\u00f3n 1D, estado estable 2D), el m\u00e9todo de Broyden puede ser competitivo. Para sistemas 3D con 10\u2076+ grados de libertad, la deriva de la condici\u00f3n hace que no sea confiable.<\/p>\n<h3>Broyden de memoria limitada (L-BFGS)<\/h3>\n<p>Para la optimizaci\u00f3n a gran escala, L-BFGS almacena los \u00faltimos <code>m<\/code> pares de pasos <code>(\u03b4x\u1d62, \u03b4y\u1d62)<\/code> y construye impl\u00edcitamente el inverso jacobiano a trav\u00e9s de una recursi\u00f3n. Evita almacenar la matriz <code>n \u00d7 n<\/code> completa.<\/p>\n<p>Sin embargo, L-BFGS est\u00e1 dise\u00f1ado para la optimizaci\u00f3n (minimizar un objetivo escalar), no para la b\u00fasqueda de ra\u00edces (resolviendo <code>F(x) = 0<\/code>). Para la b\u00fasqueda de ra\u00edces de PDE, la actualizaci\u00f3n de Broyden de memoria limitada utilizada en solucionadores como el solucionador <code>BFGS<\/code> de PetSc es m\u00e1s com\u00fan.<\/p>\n<h2>Newton-Krylov sin jacobiano: el moderno est\u00e1ndar a gran escala<\/h2>\n<p>El m\u00e9todo de Newton-Krylov (JFNK) libre de jacobiano aborda el cuello de botella de la memoria de Newton jacobiano completo al nunca ensamblar el jacobiano. En cambio, utiliza un m\u00e9todo subespacial Krylov (t\u00edpicamente GMRES) para resolver el sistema Newton:<\/p>\n<pre><code>J \u00b7 \u0394x = \u2212F(x)<\/code><\/pre>\n<p>GMRES solo requiere productos de matriz-vector <code>J\u00b7v<\/code>. Estos se calculan a trav\u00e9s del <strong> producto del vector jacobiano<\/strong>:<\/p>\n<pre><code>J \u00b7 v \u2248 (F(x + \u03b5\u00b7v) \u2212 F(x)) \/ \u03b5<\/code><\/pre>\n<p>No se ensambla ning\u00fan jacobiano expl\u00edcito. Solo se necesitan <code>F<\/code> y el vector de perturbaci\u00f3n <code>v<\/code>.<\/p>\n<h3>Por qu\u00e9 es obligatorio el preacondicionamiento<\/h3>\n<p>JFNK con un producto de vector jacobiano desnudo rara vez es pr\u00e1ctico. El sistema Newton puede tener un gran n\u00famero de condici\u00f3n, especialmente cuando el jacobiano tiene valores propios muy variados de diferentes procesos f\u00edsicos.<\/p>\n<p><strong>El preacondicionamiento basado en la f\u00edsica (PBP)<\/strong> aborda esto teniendo en cuenta a los operadores conocidos. Considere un sistema de convecci\u00f3n-difusi\u00f3n-reacci\u00f3n:<\/p>\n<pre><code>J = J_convection + J_diffusion + J_reaction<\/code><\/pre>\n<p>PBP reemplaza el preacondicionador con:<\/p>\n<pre><code>M = J_diffusion<\/code><\/pre>\n<p>El operador de difusi\u00f3n generalmente domina el espectro y, a menudo, es de bloque-tridiagonal o tridiagonal por campo. Su inversa se puede calcular de manera eficiente a trav\u00e9s de una escasa factorizaci\u00f3n directa o ILU, mientras que los t\u00e9rminos de convecci\u00f3n y reacci\u00f3n se tratan expl\u00edcitamente.<\/p>\n<p>El sistema preacondicionado se convierte en:<\/p>\n<pre><code>M\u207b\u00b9 \u00b7 J \u00b7 \u0394x = \u2212M\u207b\u00b9 \u00b7 F(x)<\/code><\/pre>\n<p>El n\u00famero de condici\u00f3n de <code>M\u207b\u00b9\u00b7J<\/code> se reduce dr\u00e1sticamente porque el operador de difusi\u00f3n, la fuente del peor condicionamiento, se ha incluido en <code>M<\/code>.<\/p>\n<p>Sin preacondicionamiento, JFNK puede requerir cientos o miles de iteraciones de GMRES. Con PBP, a menudo converge en 10 a 50 iteraciones, igualando o superando a Newton jacobiano completo.<\/p>\n<h3>El patr\u00f3n Newton-Krylov en la pr\u00e1ctica<\/h3>\n<ol>\n<li><strong>Construir el residuo de Newton<\/strong> <code>r = F(x\u2096)<\/code><\/li>\n<li><strong>Resolver<\/strong> <code>J \u00b7 \u0394x = \u2212r<\/code> <strong>Usando GMRES<\/strong><\/li>\n<li><strong>Los productos Jacobian-Vector<\/strong> se calculan a trav\u00e9s de perturbaciones de diferencia finita de <code>F<\/code><\/li>\n<li><strong>preacondicionador<\/strong> <code>M<\/code> se aplica en cada iteraci\u00f3n de GMRES<\/li>\n<li><strong>Actualizar<\/strong> <code>x\u2096\u208a\u2081 = x\u2096 + \u0394x<\/code><\/li>\n<li><strong>Comprobar convergencia<\/strong> en <code>\u2016r\u2016<\/code><\/li>\n<\/ol>\n<p>Este patr\u00f3n aparece en todos los marcos PDE principales: Fenics\/Dolfin, PetSc\/SNES, Fipy y Nonlinearsolve.jl. La diferencia radica en c\u00f3mo se construye el preacondicionador y c\u00f3mo se calcula el producto vectorial jacobiano.<\/p>\n<h2>El patr\u00f3n de polialgoritmo: c\u00f3mo los solucionadores modernos se despliegan realmente<\/h2>\n<p>Los solucionadores de producci\u00f3n rara vez se basan en un solo m\u00e9todo. En su lugar, utilizan un <strong>polialgoritmo<\/strong> que se adapta a la dificultad del problema:<\/p>\n<pre><code>1. Start with fast Broyden (cheap per iteration, no Jacobian)\n2. If convergence stalls, fall back to full Newton (robust quadratic convergence)\n3. If Newton also fails, fall back to TrustRegion (globally convergent)<\/code><\/pre>\n<p>Este es el patr\u00f3n utilizado por <code>SNES<\/code> de PetSc, <code>DifferentialEquations.jl<\/code> de PetSc y el solucionador no lineal de Moose.<\/p>\n<h3>Forzamiento de Eisenstat-Walker<\/h3>\n<p>La estrategia Eisenstat-Walker (a veces llamada \"estrategia de forzamiento\") adapta la tolerancia interna del solucionador de Krylov en relaci\u00f3n con el residuo de Newton:<\/p>\n<pre><code>\u2016J \u00b7 \u0394x + r\u2016 \u2264 \u03b7\u2096 \u00b7 \u2016r\u2016<\/code><\/pre>\n<p>donde <code>\u03b7\u2096<\/code> se relaja cuando <code>r<\/code> se encoge. Las primeras iteraciones de Newton utilizan una tolerancia interna suelta (menos pasos de Krylov). A medida que disminuye el residuo de Newton, la tolerancia interna se aprieta (m\u00e1s precisi\u00f3n de Krylov).<\/p>\n<p>Esto evita que el trabajo desperdiciado resuelva el sistema lineal con una alta precisi\u00f3n cuando el iterado de Newton a\u00fan est\u00e1 lejos de la ra\u00edz.<\/p>\n<h2>Marco de decisi\u00f3n: cu\u00e1ndo elegir qu\u00e9 m\u00e9todo<\/h2>\n<p>La siguiente tabla resume las compensaciones pr\u00e1cticas:<\/p>\n<h2>Comparaci\u00f3n de m\u00e9todos<\/h2>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Criterio<\/th>\n<th>Newton-Raphson<\/th>\n<th>Broyden (cuasi-Newton)<\/th>\n<th>JFNK (Newton-Krylov)<\/th>\n<\/tr>\n<tr>\n<td>tasa de convergencia<\/td>\n<td>Cuadr\u00e1tico (ca\u00edda cercana)<\/td>\n<td>Superlinear (por iteraci\u00f3n), pero no confiable para grandes <code>n<\/code><\/td>\n<td>depende del preacondicionador; Superlineal con buen PBP<\/td>\n<\/tr>\n<tr>\n<td>Huella de memoria<\/td>\n<td>o(n\u00b2) para jacobiano completo (pero escaso lo reduce)<\/td>\n<td>o(n\u00b2) para la aproximaci\u00f3n inversa de Broyden; O(m\u00b7n) para variantes de memoria limitada<\/td>\n<td>O(n): solo vectores de funciones y almacenamiento de Krylov<\/td>\n<\/tr>\n<tr>\n<td>Costo por iteraci\u00f3n<\/td>\n<td>Alto (Asamblea Jacobiano + Factorizaci\u00f3n)<\/td>\n<td>Low (Actualizaci\u00f3n Rank-1 + Evaluaci\u00f3n de Funciones)<\/td>\n<td>Moderado (iteraci\u00f3n JVP + Krylov)<\/td>\n<\/tr>\n<tr>\n<td>Requisito jacobiano<\/td>\n<td>Jacobiano completo (anal\u00edtico, AD o FD)<\/td>\n<td>No jacobiano (aproximado de pasos)<\/td>\n<td>No Jacobiano expl\u00edcito (solo JVP)<\/td>\n<\/tr>\n<tr>\n<td>preacondicionamiento<\/td>\n<td>Opcional (mejora la soluci\u00f3n lineal dentro de Newton)<\/td>\n<td>No aplicable (sin jacobiano)<\/td>\n<td>Requerido para la convergencia pr\u00e1ctica (PBP muy recomendable)<\/td>\n<\/tr>\n<tr>\n<td>Mejor caso de uso<\/td>\n<td>Problemas peque\u00f1os a medianos con exacto jacobiano disponible<\/td>\n<td>Problemas levemente no lineales 1D-2D con presupuesto limitado<\/td>\n<td>Problemas 3D a gran escala con millones de grados de libertad<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Elegir por tama\u00f1o del problema<\/h3>\n<p><strong>Peque\u00f1os problemas (n &lt; 10\u2074):<\/strong> Newton completo con jacobiano anal\u00edtico o simb\u00f3lico. El costo est\u00e1 dominado por el ensamblaje de la matriz, por lo que la convergencia cuadr\u00e1tica supera el costo de configuraci\u00f3n.<\/p>\n<p><strong>Problemas medios (10\u2074 &lt; n &lt; 10\u2076):<\/strong> Broyden puede ser competitivo si la no linealidad es leve. Newton con escasa factorizaci\u00f3n directa es m\u00e1s robusta pero cuesta m\u00e1s por iteraci\u00f3n.<\/p>\n<p><strong>Grandes problemas (n &gt; 10\u2076):<\/strong> JFNK con preacondicionamiento basado en la f\u00edsica es la opci\u00f3n est\u00e1ndar. La asamblea jacobiana completa es prohibitiva y la deriva de condiciones de Broyden no es confiable.<\/p>\n<h3>Elegir por severidad de no linealidad<\/h3>\n<p><strong>La no linealidad leve (t\u00e9rminos de reacci\u00f3n d\u00e9biles dominados por difusi\u00f3n):<\/strong> Newton o Broyden funcionan bien. La convergencia cuadr\u00e1tica de Newton lo hace atractivo para sistemas peque\u00f1os.<\/p>\n<p><strong>Fuerte no linealidad (campo de fase acoplado, reacci\u00f3n-difusi\u00f3n con cin\u00e9tica r\u00edgida):<\/strong> Newton con globalizaci\u00f3n (b\u00fasqueda de l\u00ednea o regi\u00f3n de confianza) es esencial. La aproximaci\u00f3n de Broyden puede enga\u00f1ar a la direcci\u00f3n de b\u00fasqueda.<\/p>\n<p><strong>No linealidad opaca (simulaci\u00f3n de caja negra, desconocida <code>F<\/code>):<\/strong> JFNK o Broyden, ya que no requieren una construcci\u00f3n jacobiana expl\u00edcita.<\/p>\n<h3>Elegir por restricciones de memoria<\/h3>\n<p><strong>Memoria limitada (nodo \u00fanico, &lt; 64 GB):<\/strong> JFNK solo requiere almacenamiento O(n) para vectores. Newton requiere o(nz(j)) para el almacenamiento jacobiano escaso m\u00e1s o(nz(l)) para la factorizaci\u00f3n.<\/p>\n<p><strong>Amplia memoria (nodo de cl\u00faster, &gt; 256 GB):<\/strong> Full Newton se vuelve factible para problemas con N hasta 10\u2077, siempre que el jacobiano sea escaso.<\/p>\n<h2>Ejemplos de c\u00f3digo: c\u00f3mo se ven estos m\u00e9todos en la pr\u00e1ctica<\/h2>\n<h3>Scipy: m\u00e9todo de Broyden<\/h3>\n<p>Scipy proporciona <code>broyden1<\/code> para la b\u00fasqueda de ra\u00edces con la actualizaci\u00f3n cuasi-newton de Broyden:<\/p>\n<pre><code class=\"language-python\">from scipy.optimize import broyden1, root\n\ndef f(x):\n    \"\"\"System F(x) = 0\"\"\"\n    return [x[0]**2 + x[1] - 1,\n            x[0] + x[1]**2 - 2]\n\nresult = broyden1(f, [0.5, 0.5])\nprint(f\"Solution: {result.x}\")\n<\/code><\/pre>\n<p>La funci\u00f3n <code>broyden1<\/code> construye la aproximaci\u00f3n jacobiana inversa a trav\u00e9s de actualizaciones de rango 1. Para sistemas peque\u00f1os, evita el montaje jacobiano completo. Para sistemas grandes, la deriva de la condici\u00f3n puede causar fallas de convergencia.<\/p>\n<p>La interfaz <code>root<\/code> tambi\u00e9n admite <code>'hybr'<\/code> (Levenberg-Region-Trust-Region de MinPack) y <code>'lm'<\/code> (Levenberg-Marquardt), que pueden manejar mejor los problemas estructurados de m\u00ednimos cuadrados que Broyden.<\/p>\n<h3>Fenics: Newton con simb\u00f3lico jacobiano<\/h3>\n<p>Fenics genera el jacobiano simb\u00f3licamente a partir de la forma variacional:<\/p>\n<pre><code class=\"language-python\">from fenics import *\n\nmesh = UnitSquareMesh(32, 32)\nV = FunctionSpace(mesh, \"P\", 1)\n\nu = TrialFunction(V)\nv = TestFunction(V)\n\nf = Constant(1.0)\na = dot(grad(u), grad(v)) * dx\nL = f * v * dx\n\nu_solution = Function(V)\nsolve(a == L, u_solution)\n\n# Nonlinear: Newton iterate with automatic Jacobian\nU = Function(V)  # current solution\nu = TrialFunction(V)\n\nF = dot(grad(U), grad(v)) * dx - f * v * dx  # residual\nA = derivative(F, U, u)  # Jacobian (symbolic)\n\nproblem = NonlinearProblem(F, U, bcs)\nsolver = NewtonSolver(MPI.comm.world)\nsolver.parameters[\"linear_solver\"] = \"petsc\"\nsolver.solve(problem)\n<\/code><\/pre>\n<p>La llamada <code>derivative(F, U, u)<\/code> genera el jacobiano exacto a trav\u00e9s de la diferenciaci\u00f3n autom\u00e1tica. Esta es la caracter\u00edstica m\u00e1s poderosa de Fenics para problemas no lineales.<\/p>\n<h3>PETSC\/SNES: Newton-Krylov con preacondicionamiento<\/h3>\n<p>El paquete SNES de PetSc implementa el patr\u00f3n completo de Newton-Krylov:<\/p>\n<pre><code class=\"language-python\">from pysns import SNES\n\n# Define residual function\ndef residual(x):\n    # Return F(x) \u2014 the nonlinear residual\n    return F_of_x(x)\n\n# Create SNES solver\nsnes = SNESCreate()\nsnesSetFunction(snes, x, residual)\n\n# Set Newton-Krylov with preconditioning\nSNESSetType(snes, SNESNEWTONKRYLOV)\nSNESSetKrylovDimension(snes, 50)  # GMRES max iterations\n\n# Configure preconditioner (physics-based)\nksp = SNESGetKSP(snes)\nKSPSetType(ksp, KSPPRECONDEL)  # ILU preconditioner\nKSPSetPreconditioner(ksp, PCILU)\n\n# Solve\nSNESSetUp(snes)\nSNESSolve(snes)\n<\/code><\/pre>\n<p>El tipo de Newton-Krylov cambia autom\u00e1ticamente entre las variantes de Newton (ensamblados jacobianos), libres jacobianos de Newton y basados en Broyden, seg\u00fan la configuraci\u00f3n de <code>SNESSetUser Jacobian<\/code>. La configuraci\u00f3n del preacondicionador controla la tasa de convergencia de Krylov.<\/p>\n<h3>Nonlinearsolve.jl: el patr\u00f3n de polialgoritmo<\/h3>\n<p>El ecosistema de diferenciales de Julia utiliza un polialgoritmo que encadena m\u00e9todos:<\/p>\n<pre><code class=\"language-julia\">using DifferentialEquations\n\n# Define the nonlinear system\nf! = (residual, x) -&gt; begin\n    residual[1] = x[1]^2 + x[2] - 1\n    residual[2] = x[1] + x[2]^2 - 2\nend\n\n# Newton-Krylov with Eisenstein-Walker forcing\nprob = NonlinearProblem(f!, [0.5, 0.5])\nsol = solve(prob, NewtonRaphson(); abstol=1e-8, reltol=1e-6)\n\n# For large-scale systems: Jacobian-free Newton-Krylov\nsol = solve(prob, JFNK(); abstol=1e-8)\n<\/code><\/pre>\n<p>El algoritmo <code>JFNK<\/code> calcula los productos del vector jacobiano a trav\u00e9s de diferencias finitas y delega en un solucionador de subespacios de Krylov. Para sistemas r\u00edgidos, el polialgoritmo vuelve a <code>TrustRegion<\/code> si JFNK se detiene.<\/p>\n<h2>Rendimiento emp\u00edrico: JFNK vs Dividir operador<\/h2>\n<p>Un punto de referencia concreto de la literatura demuestra la ventaja pr\u00e1ctica de JFNK. En c\u00e1lculos de transferencia radiativa no LTE (NLTE), un estudio de 2024 en Astronom\u00eda &amp; La astrof\u00edsica (A&amp;Amp;A) compar\u00f3 a Newton-Krylov libre de jacobios con enfoques de divisi\u00f3n del operador. JFNK convergi\u00f3 aproximadamente <strong>2\u00d7 m\u00e1s r\u00e1pido<\/strong> que la divisi\u00f3n del operador para el mismo objetivo de precisi\u00f3n, mientras usaba memoria comparable. El resultado destaca que los solucionadores no lineales monol\u00edticos pueden superar los enfoques particionados cuando la no linealidad es fuerte y el preacondicionador est\u00e1 bien adaptado a la f\u00edsica.<\/p>\n<h2>Resumen: \u00bfQu\u00e9 m\u00e9todo recomendamos?<\/h2>\n<p>La recomendaci\u00f3n depende de la escala y estructura de su problema:<\/p>\n<ul>\n<li><strong>Peque\u00f1os problemas con el jacobiano exacto disponible:<\/strong> Newton-Raphson. La convergencia cuadr\u00e1tica y la robusta cuenca de convergencia superan el costo jacobiano.<\/li>\n<li><strong>Sistemas 1D-2D levemente no lineales:<\/strong> El m\u00e9todo de Broyden es rentable. Acepte el riesgo de desviaci\u00f3n de la condici\u00f3n para problemas de peque\u00f1o a medio donde cada iteraci\u00f3n es barata.<\/li>\n<li><strong>Sistemas 3D a gran escala con millones de grados de libertad:<\/strong> JFNK con preacondicionamiento basado en la f\u00edsica. Esta es la \u00fanica opci\u00f3n viable cuando la asamblea jacobiana completa es prohibitiva y la desviaci\u00f3n de la condici\u00f3n de Broyden es inaceptable.<\/li>\n<li><strong>C\u00f3digos de simulaci\u00f3n de caja negra:<\/strong> JFNK o Broyden. Ambos evitan la construcci\u00f3n jacobiana expl\u00edcita.<\/li>\n<li><strong>Requisitos de simulaci\u00f3n cr\u00edtica:<\/strong> Newton con globalizaci\u00f3n de b\u00fasqueda de l\u00ednea. La convergencia cuadr\u00e1tica y la estabilidad global de los m\u00e9todos de la regi\u00f3n de confianza valen el costo adicional.<\/li>\n<\/ul>\n<p>Para la mayor\u00eda de los flujos de trabajo de PDE de producci\u00f3n, el patr\u00f3n de polialgorithm (Fast Broyden Retrolback to Newton Fallback to trustRegion) proporciona el mejor equilibrio de velocidad, robustez y fiabilidad.<\/p>\n<h2>Gu\u00edas relacionadas<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/time-integration-methods-for-pde-solvers-explicit-vs-implicit-schemes\/\" target=\"_blank\" rel=\"nofollow noopener\">Integraci\u00f3n horaria M\u00e9todos para solucionadores de PDE: esquemas expl\u00edcitos versus impl\u00edcitos<\/a> \u2014 Gu\u00eda fundamental para esquemas impl\u00edcitos que requieren solucionadores no lineales.<\/li>\n<li><a href=\"https:\/\/matforge.org\/implicit-vs-explicit-methods-stability-accuracy\/\" target=\"_blank\" rel=\"nofollow noopener\">m\u00e9todos impl\u00edcitos frente a expl\u00edcitos: estabilidad, precisi\u00f3n, y cu\u00e1ndo usar cada<\/a>: analiza las regiones de estabilidad y cu\u00e1ndo se hacen necesarios los m\u00e9todos impl\u00edcitos.<\/li>\n<li><a href=\"https:\/\/matforge.org\/choosing-right-python-pde-solver-fipy-py-pde-fenics\/\" target=\"_blank\" rel=\"nofollow noopener\">elegir el derecho Solucionador de PDE de Python: Fipy vs PY-PDE vs Fenics<\/a>: compara las bibliotecas de solucionadores, incluidos sus backends de solucionador no lineal.<\/li>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\" target=\"_blank\" rel=\"nofollow noopener\">Gesti\u00f3n de problemas de PDE a gran escala: estrategias, solucionadores y estudios de casos de HPC<\/a> \u2014 Cubre solucionadores no lineales a escala con infraestructura HPC.<\/li>\n<li><a href=\"https:\/\/matforge.org\/operator-splitting-strang-splitting-and-imex-schemes-for-pde-solvers\/\" target=\"_blank\" rel=\"nofollow noopener\">M\u00e9todos de divisi\u00f3n del operador: esquemas de divisi\u00f3n y IMEX de Strang<\/a> \u2014 alternativas a la resoluci\u00f3n no lineal monol\u00edtica.<\/li>\n<\/ul>\n<h2>referencias<\/h2>\n<ul>\n<li>Carga, r., &amp; Faires, J. D. (2011). <em>An\u00e1lisis num\u00e9rico<\/em> (9\u00aa ed.). Aprendizaje Cengage. El cap\u00edtulo 8 cubre el m\u00e9todo de Newton y los m\u00e9todos cuasi-Newton.<\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Broyden%27s_method\" target=\"_blank\" rel=\"nofollow noopener\">Wikipedia: M\u00e9todo de Broyden<\/a> \u2014 Descripci\u00f3n general de la familia de b\u00fasqueda de ra\u00edces cuasi-Newton.<\/li>\n<li><a href=\"https:\/\/docs.scipy.org\/doc\/scipy\/reference\/generated\/scipy.optimize.broyden1.html\" target=\"_blank\" rel=\"nofollow noopener\">scipy: scipy.optimize.broyden1<\/a> \u2014 Documentaci\u00f3n para el solucionador Broyden de Scipy.<\/li>\n<li><a href=\"https:\/\/petsc.org\/main\/docs\/fieldsn\/snes\/snes.html\" target=\"_blank\" rel=\"nofollow noopener\">Documentaci\u00f3n de PETSC SNES<\/a> \u2014 Solucionador de ecuaciones no lineales SNU para patrones de Newton-Krylov.<\/li>\n<li><a href=\"https:\/\/docs.python-fenics.org\/prob\/fem-solutions\/nonlinear-variables\/\" target=\"_blank\" rel=\"nofollow noopener\">FENICS no lineal Solvers<\/a> \u2014 Generaci\u00f3n jacobiana autom\u00e1tica a trav\u00e9s de la diferenciaci\u00f3n simb\u00f3lica.<\/li>\n<li><a href=\"https:\/\/diffeq.sciml.ai\/stable\/solvers\/nonsolve_overview\/#jfnk\" target=\"_blank\" rel=\"nofollow noopener\">differentialequations.jl: JFNK<\/a> \u2014 Newton-Krylov sin jacobiano para solucionadores de PDE basados en Julia.<\/li>\n<\/ul>\n<h2>\u00bfQuiere ayuda para implementar un solucionador no lineal para su investigaci\u00f3n?<\/h2>\n<p>Elegir el m\u00e9todo de solucionador no lineal adecuado puede marcar la diferencia entre una simulaci\u00f3n que termina en horas y una que nunca converge. Si est\u00e1 luchando con la divergencia de iteraci\u00f3n de Newton, la deriva de la condici\u00f3n de Broyden o el ajuste del preacondicionador JFNK, nuestro equipo puede ayudarlo.<\/p>\n<p>Nos especializamos en marcos de verificaci\u00f3n de construcci\u00f3n para c\u00f3digos cient\u00edficos de Python y Julia, incluidos los flujos de trabajo del solucionador no lineal para simulaciones PDE. <a href=\"https:\/\/matforge.org\/category\/issue-tracking-tickets-technical-requests\/\" target=\"_blank\" rel=\"nofollow noopener\">Ponte en contacto a trav\u00e9s de nuestro seguimiento de problemas sistema<\/a> para discutir las necesidades de su proyecto.<\/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\"> 12<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Aprenda a elegir entre los m\u00e9todos Newton-Krylov de Newton-Krylov de Newton-Raphson, Broyden y Newton-Krylov libres de Jacobia para resolver sistemas PDE no lineales. Incluye ejemplos pr\u00e1cticos de Python y marcos de decisi\u00f3n.<\/p>\n","protected":false,"raw":"Aprenda a elegir entre los m\u00e9todos Newton-Krylov de Newton-Krylov de Newton-Raphson, Broyden y Newton-Krylov libres de Jacobia para resolver sistemas PDE no lineales. Incluye ejemplos pr\u00e1cticos de Python y marcos de decisi\u00f3n."},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"es_ES","_original_post":"https:\/\/matforge.org\/?p=505","iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-787","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","es-ES"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES - matforge.org<\/title>\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\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  12 minutesAprenda a elegir entre los m\u00e9todos Newton-Krylov de Newton-Krylov de Newton-Raphson, Broyden y Newton-Krylov libres de Jacobia para resolver sistemas PDE no lineales. Incluye ejemplos pr\u00e1cticos de Python y marcos de decisi\u00f3n.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T12:21:39+00:00\" \/>\n<meta name=\"author\" content=\"Priya Nair\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Priya Nair\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\\\/\"},\"author\":{\"name\":\"Priya Nair\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/2effd7bc155a5e6357f31dac970c5795\"},\"headline\":\"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES\",\"datePublished\":\"2026-07-30T12:21:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\\\/\"},\"wordCount\":3196,\"commentCount\":0,\"articleSection\":[\"Simulaci\u00f3n &amp; Proyectos de modelado\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/es\\\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\\\/\",\"name\":\"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-30T12:21:39+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/2effd7bc155a5e6357f31dac970c5795\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES\"}]},{\"@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\\\/2effd7bc155a5e6357f31dac970c5795\",\"name\":\"Priya Nair\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g\",\"caption\":\"Priya Nair\"},\"sameAs\":[\"http:\\\/\\\/matforge.org\"],\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/priya-nair\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES - matforge.org","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\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/","og_locale":"es_ES","og_type":"article","og_title":"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES - matforge.org","og_description":"Reading Time:  12 minutesAprenda a elegir entre los m\u00e9todos Newton-Krylov de Newton-Krylov de Newton-Raphson, Broyden y Newton-Krylov libres de Jacobia para resolver sistemas PDE no lineales. Incluye ejemplos pr\u00e1cticos de Python y marcos de decisi\u00f3n.","og_url":"https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/","og_site_name":"matforge.org","article_published_time":"2026-07-30T12:21:39+00:00","author":"Priya Nair","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Priya Nair","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/"},"author":{"name":"Priya Nair","@id":"https:\/\/matforge.org\/#\/schema\/person\/2effd7bc155a5e6357f31dac970c5795"},"headline":"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES","datePublished":"2026-07-30T12:21:39+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/"},"wordCount":3196,"commentCount":0,"articleSection":["Simulaci\u00f3n &amp; Proyectos de modelado"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/","url":"https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/","name":"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-30T12:21:39+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/2effd7bc155a5e6357f31dac970c5795"},"breadcrumb":{"@id":"https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/es\/nonlinear-solver-methods-newton-broyden-quasi-newton-pdes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/es\/"},{"@type":"ListItem","position":2,"name":"M\u00e9todos de solucionador no lineal: Newton, Broyden y Quasi-Newton para PDES"}]},{"@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\/2effd7bc155a5e6357f31dac970c5795","name":"Priya Nair","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g","caption":"Priya Nair"},"sameAs":["http:\/\/matforge.org"],"url":"https:\/\/matforge.org\/author\/priya-nair\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/787","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\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=787"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/787\/revisions"}],"predecessor-version":[{"id":937,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/787\/revisions\/937"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}