Re: express a quadratic, in the form (x+a)^2 + b
- To: mathgroup at smc.vnet.net
- Subject: [mg84360] Re: express a quadratic, in the form (x+a)^2 + b
- From: "David Park" <djmpark at comcast.net>
- Date: Thu, 20 Dec 2007 00:07:51 -0500 (EST)
- References: <fkan3b$d6k$1@smc.vnet.net>
Joe,
The following is a step by step derivation of the 'complete the square'
process. Copy the entire statement from the posting and paste into a
notebook and then evaluate. I think you will find the steps straightforward,
but as a beginner you will probably find the Mathematica implementation of
the steps somewhat difficult. Nevertheless this does show how you can carry
out derivations with Mathematica and let it do all of the calculation. You
don't have to do anything 'by hand' on the side. I used a pure function, # -
Part[%%, 2] &, with Map, /@, to move the right hand side of the equation to
the left. Pure functions (Function in Help) are extremely useful in
manipulating expressions. I didn't actually have to do the step where the
terms were collected but I included it because it clarifies the derivation.
You should look up the various commands (Part, Function, Map, MapAt,
Collect, CoefficientList and Thread) if you are unfamiliar with them. This
is all done in a single cell using % and %% to refer back to previous
outputs in the cell. In making such a derivation one would usually develop
it step by step, making additions and modifications and continually
reevaluating until you are satisfied. The Print statements aren't really
necessary but I often find them useful for keeping track of what I'm doing.
Print["General polynomial represented as a square plus a constant"]
step1 = a x^2 + b x + c == d (x + e)^2 + f
Print["Moving right hand side to the left"]
# - Part[%%, 2] & /@ %%
Print["Collecting terms"]
MapAt[Collect[#, x] &, %%, 1]
Print["Setting the coefficients of each power of x to zero and \
threading"]
MapAt[CoefficientList[#, x] &, %%, 1]
Thread[%]
Print["Solve the equations for d, e and f"]
defsols = First@Solve[%%, {d, e, f}]
Print["Substitute into the right hand side of step1"]
step2 = Last[step1] /. defsols
Now that we have a general solution, we can write a general routine
CompleteTheSquare.
CompleteTheSquare::usage =
"CompleteTheSquare[x][expr] will complete the square of \
subexpressions a \!\(\*SuperscriptBox[\"x\", \"2\"]\) + b x + c in \
expr.";
CompleteTheSquare[var_: Global`x][expr_] :=
expr //.
a_. var^2 + b_. var + c_. -> (-b^2 + 4 a c)/(4 a) +
a (b/(2 a) + var)^2
If you write a nice routine you should always consider writing a good usage
message for it. All the funny stuff in the usage message is because I used a
superscript expression in a String expression and the internal
representation came out when I copied and pasted to this posting. In the
routine itself we just use a Rule to replace quadratic expressions with
their 'complete the square' forms. We allow the variable to be specified and
give it a default value of x. Global`x is used just in case you later
decided to copy this function into a package and the routine would have to
know that x is the global symbol and not some internal package symbol.
You can check the usage message with:
?CompleteTheSquare
We check the routine on your initial example:
x^2+4x+7//CompleteTheSquare[]
and a more complicated example with x and y polynomials.
(3 x^2 - 11 x + 7)/(x^2 + 5 x - 11) == 5 y^2 + 24 y - 3
% // CompleteTheSquare[]
% // CompleteTheSquare[y]
You can use Mathematica to derive results. Then you can use the result of
the derivation to write a useful routine. Then you could keep that routine,
say in a Routines Section at the top of your notebook, or later in a
package, and use it whenever you need it. You will have actually generated
something useful and permanent - for yourself and perhaps for others.
--
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/
"Joseph Fagan" <noemailplease at nowhere.ru> wrote in message
news:fkan3b$d6k$1 at smc.vnet.net...
> I'm a Mathematica beginner.
> I wish to express a quadratic, in the form (x+a)^2 + b
> eg to express x^2 + 4x + 7 as (x+2)^2 + 3
> Is there an easy way?
> Thanks
> Joe
>
>
>