Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

Matlab simplify Proof do not understand output

1 visualización (últimos 30 días)
Hao Sun
Hao Sun el 8 de Nov. de 2019
Cerrada: MATLAB Answer Bot el 20 de Ag. de 2021
Inputing
simplify((( x^3+a*x+b) -(y^3+a*y+b) )^2/(x-y)^4)
ans =
(x^2 + x*y + y^2 + a)^2/(x - y)^2
feval(symengine,'Simplify',(( x^3+a*x+b) -(y^3+a*y+b) )^2/(x-y)^4,'OutputType = "Proof"')
get ans =
Input was \r\n (x^3 + a*x - y^3 - a*y)^2/(x - y)^4 \r\nApplying the rule\r\n () -> #X -> partfrac(#X, x, Mapcoeffs = proc(p)\r\n name polylib::sqrfree;\r\n local pp, pr, t, recollect, ret, options, unextend, ratsubsts, minpol, T, inds, Args, Float;\r\n begin\r\n pp := p; \r\n Args := [args()]; \r\n if nops(Args) = 2 && domtype(Args[2]) = DOM_BOOL then\r\n Args[2] := \"Recollect\" = Args[2]\r\n end_if; \r\n options := prog::getOptions(2, Args, faclib::defaultOptions, TRUE, faclib::optionTypes)[1]; \r\n recollect := (if options[\"Recollect\"] then\r\n proc(f)\r\n local t, i, j;\r\n begin\r\n t := table(); \r\n for i from 3 to nops(f) step 2 do\r\n if contains(t, f[i]) then\r\n t[f[i]] := t[f[i]]*f[i - 1]\r\n else \r\n t[f[i]] := f[i - 1]\r\n end_if\r\n end_for; \r\n [f[1], (op(t, [j, 2]), op(t, [j, 1])) $ j = 1..nops(t)]\r\n end_proc\r\n else \r\n id\r\n end_if); \r\n if (type(p) <> DOM_POLY || op(p, 3) = Expr) && stdlib::hasfloat(p) then\r\n p := numeric::rationalize(p); \r\n Float := proc(l)\r\n local i;\r\n begin\r\n for i from 2 to nops(l) step 2 do\r\n if type(l[i]) = DOM_POLY then\r\n l[i] := mapcoeffs(l[i], float)\r\n else \r\n l[i] := float(l[i])\r\n end_if\r\n end_for; \r\n l\r\n end_proc\r\n else \r\n Float := id\r\n end_if; \r\n unextend := id; \r\n if options[\"UseAlgebraicExtension\"] then\r\n p := poly(p); \r\n T := op(p, 3); \r\n if T = Expr then\r\n if map({coeff(p)}, domtype) minus {DOM_RAT, DOM_INT} = {} then\r\n T := Dom::Rational\r\n else \r\n T := Dom::Fraction(Dom::Polynomial(Dom::Rational))\r\n end_if\r\n end_if; \r\n inds := indets(poly2list(p)); \r\n [pr, ratsubsts, minpol] := [rationalize(poly2list(p), FindRelations = [\"_power\", \"exp\"], MinimalPolynomials)]; \r\n if ratsubsts = {} || traperror((T := fp::fold((p, d) -> Dom::AlgebraicExtension(d, poly(p, [op(indets(p) minus inds)], d)), T)(op(minpol)))) <> 0 || traperror((p := poly(pr, op(p, 2), T))) <> 0 || p = FAIL then\r\n p := pp\r\n else \r\n unextend := (if pp::dom = DOM_POLY then\r\n proc(f)\r\n local i;\r\n begin\r\n evalAt([(if op(pp, 3) = Expr then\r\n expr(f[1])\r\n else \r\n coerce(f[1], op(pp, 3))\r\n end_if), (poly(f[i], op(pp, 3)), f[i + 1]) $ i = 2..nops(f) - 1 step 2], ratsubsts)\r\n end_proc\r\n else \r\n proc(f)\r\n local i;\r\n begin\r\n evalAt([expr(f[1]), (expr(f[i]), f[i + 1]) $ i = 2..nops(f) - 1 step 2], ratsubsts)\r\n end_proc\r\n end_if)\r\n end_if\r\n end_if; \r\n if p::dom::sqrfree <> FAIL then\r\n return(p::dom::sqrfree(p))\r\n end_if; \r\n if domtype(p) = DOM_POLY then\r\n if testargs() then\r\n t := op(p, 3); \r\n if domtype(t) = DOM_DOMAIN then\r\n if t::hasProp <> FAIL then\r\n if t::hasProp(Cat::FactorialDomain) then\r\n if t::characteristic <> 0 then\r\n if t::hasProp(Cat::Field) then\r\n if ~t::hasProp(Dom::IntegerMod) then\r\n if ~t::hasProp(Dom::GaloisField) then\r\n if ~t::hasProp(Dom::AlgebraicExtension) || t::degreeOverPrimeField = UNKNOWN then\r\n error(message(\"symbolic:polylib:NotAFiniteField\"))\r\n end_if\r\n end_if\r\n end_if\r\n else \r\n error(message(\"symbolic:polylib:NotAField\"))\r\n end_if\r\n end_if\r\n else \r\n error(message(\"symbolic:polylib:NotAFactorialDomain\"))\r\n end_if\r\n end_if\r\n else \r\n if t <> hold(Expr) && ~isprime(op(t, 1)) then\r\n error(message(\"symbolic:polylib:NoPrimeModulus\"))\r\n end_if\r\n end_if\r\n end_if; \r\n ret := Float(recollect(unextend(faclib::sqrfree_poly(p, options)))); \r\n Factored::create(ret, \"squarefree\")\r\n else \r\n ret := Float(recollect(unextend(faclib::factor_expr(p, options, TRUE)))); \r\n Factored::create(ret, \"squarefree\")\r\n end_if\r\n end_proc@normal)\r\ngives \r\n 2*a + 4*x*y + (3*y^2 + a)^2/(x - y)^2 + x^2 + 10*y^2 + (6*y*(3*y^2 + a))/(x - y) \r\nApplying the rule\r\n Simplify::sqrfreeFactor\r\ngives \r\n (x^2 + x*y + y^2 + a)^2/(x - y)^2 \r\nEND OF PROOF \r\n
I don't understand what the proof for simplify is doing I was just trying to get the steps how do I just get the like mathematica/wolfram alpha show steps output

Respuestas (1)

Walter Roberson
Walter Roberson el 9 de Nov. de 2019
The output is showing the steps.
If you look near the end of the output, you will find
Applying the rule\r\n Simplify::sqrfreeFactor
That indicates that a rule named Simplify::sqrfreeFactor is being applied to the current expression it is working with. That part is easy to understand.
But when you look near the top of the output, you will find
Applying the rule\r\n () -> #X -> partfrac(#X, x, Mapcoeffs = proc(p)\r\n
and so on. What is happening there is that there is an anonymous function being applied, rather than one that a specific name has been given to. Because there is no name for it, MuPAD is outputing what the anonymous function code is, which is a bunch of MuPAD code. The short summary of the code is that the anonymous function runs partial fraction expansion, with each term processed by a procedure named polylib::sqrfree the code for which is given there.

La pregunta está cerrada.

Etiquetas

Productos


Versión

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by