este problema se puede tratar de diversas formas, pero nosotros te dejamos la que en nuestra opinión es la respuesta más completa.
Solución:
La razón por la que el reemplazo no funciona es que las reglas de reemplazo no son reemplazos matemáticos, sino reemplazos estructurales puros. Por lo tanto el reemplazo z^2->x
solo busca ocurrencias del patrón z^2
y reemplaza eso con x
. Ahora z^4
no coincide con ese patrón.
También tenga en cuenta que las reglas operan en el formulario interno, que no siempre coincide con el formulario que se muestra. Por ejemplo, uno esperaría a-2b /. 2b->c
para resultar en a-c
pero en realidad da como resultado a-2b
de nuevo, porque internamente la expresión dice Plus[a, Times[-2, b]]
(puedes verlo aplicando FullForm
), tiempo 2b
es Times[2,b]
.
Para hacer el reemplazo deseado, uno tiene que usar un método que tenga en cuenta las matemáticas en lugar de solo la estructura. Una posibilidad es
Solve[p==z^4+z^2+4 && x==z^2, p, z]
lo que significa “Resolver las ecuaciones dadas para p eliminando z”. El resultado entonces es
p->4+x+x^2
Tenga en cuenta que las llaves alrededor z
son obligatorios porque, de lo contrario, Mathematica lo interpreta como dominio, lo que genera un mensaje de error porque z
por supuesto, no es un dominio válido. También tenga en cuenta que la página de documentación de Solve omite la posibilidad de dar una lista de variables para eliminar como tercer argumento (al menos no lo encontré). Sin embargo, lo encontrará en un tutorial de Mathematica sobre la eliminación de variables (pero allí usan el tercer argumento sin llaves, lo que al menos para mí resulta en un mensaje de error, como se escribió anteriormente).
In[409]:= PolynomialReduce[z^4 + z^2 + 4, z^2 - x, z, x][[2]]
Out[409]= 4 + x + x^2
Esto es similar a la Solve
enfoque en el que ambos usan medios algebraicos para efectuar la sustitución. Pero uno puede ser un poco más general usando PolynomialReduce
(aprovechando las órdenes a plazo, por ejemplo).
Para obtener más detalles sobre este enfoque, puede echar un vistazo a algunas respuestas a estas preguntas:
- Pregunta sobre el reemplazo “inteligente” en Mathematica
- Cómo reducir el número de variables independientes en Mathematica
z^4 + z^2 + 4 /. z^(a_Integer) -> x^(1/2 a)
rendimientos
4 + x + x^2
Ten en cuenta comunicar este post si te fue de ayuda.