Info

Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.

Matlab simplify Proof do not understand output

1 Ansicht (letzte 30 Tage)
Hao Sun
Hao Sun am 8 Nov. 2019
Geschlossen: MATLAB Answer Bot am 20 Aug. 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

Antworten (1)

Walter Roberson
Walter Roberson am 9 Nov. 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.

Diese Frage ist geschlossen.

Produkte


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by