MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Quadratic form: symbolic transformation


Hello Wolfgang.

It is very easy with the following code to make your procedure much
more compact.

If you are working in Mathematica 5.2 the following will take you in a
section of Mathematica Book that contains material to understand the
code.

FrontEndExecute[{HelpBrowserLookup["MainBook", "3.6.1"]}]

If you are working in 6 see here

http://reference.wolfram.com/mathematica/tutorial/SolvingEquationsInvolvingPowerSeries.html

Here are your polynomials in x.

In[2]:=
q1 = R*x^2 + S*x + T ;

In[3]:=
q2 = u*(x+v)^2 + w ;

Here are the procedure (*with comments*)

In[11]:=
q1 == q2 + O[x]^3 (*this gives an equation involving the power
series*)
LogicalExpand[%] (*LogicalExpand generates a sequence of equations for
each power of x*)
Solve[%, {u, v, w}]  (*now the rest is obvious!*)
q1 == q2 /. %[[1]]  (*verification*)
Expand /@ %        (*no need for Simplify here*)

Out[11]=
T + S*x + R*x^2 == SeriesData[Global`x, 0, {Global`u*Global`v^2 +
Global`w, 2*Global`u*Global`v, Global`u}, 0, 3, 1]
Out[12]=
-R + u == 0 && -S + 2*u*v == 0 && -T + u*v^2 + w == 0
Out[13]=
{{w -> (-S^2 + 4*R*T)/(4*R), u -> R, v -> S/(2*R)}}
Out[14]=
T + S*x + R*x^2 == (-S^2 + 4*R*T)/(4*R) + R*(S/(2*R) + x)^2
Out[15]=
True

True? We are indeed right!

Let's make now an one-liner that will collect the steps (apart from
the verification!).
Note that this one liner is not something special. It is a quick
attempt to show
how you could work! Various modifications can be done to be better.
The code looks
big because I have add some coments to explain how it works. Please
feel free to make
me any questions.

In[16]:=
quadform[f_(*put here the expanded form*), g_(*put here the quadratic
form*), x_(*the variable please*)] := If[PolynomialQ[f, x] &&
PolynomialQ[g, x] && (Exponent[#1, x] & ) /@ {f, g} == {2, 2}(*check
if the expressions are polynomials in x and if their order is two*),
   Solve[LogicalExpand[f == g + O[x]^3], Variables[CoefficientList[g,
x]](*this gives a list of the parameters which you want to express in
known parameters*) ], Print["sorry; try again! I am a quick attempt
not something special!"]]

Let's taste it!

In[17]:=
quadform[q1, q2, x]
Out[17]=
{{w -> (-S^2 + 4*R*T)/(4*R), u -> R, v -> S/(2*R)}}

Good!

In[27]:=
quadform[x^2 + 2*x + 4, q2, x]

Out[27]=
{{w -> 3, u -> 1, v -> 1}}

Better!

In[28]:=
quadform[x^3 + a*x^2 + b*x + c, q2, x]
>From In[28]:=
"sorry; try again! I am a quick attempt not something special!"

The best! My code knows its level!

Regards
Dimitris Anagnostou





 /  Dr. Wolfgang Hintze       :
> Hello,
>
> this is a simple question but perhaps I can get here some information
> towards a more apropriate way of using Mathematica.
>
> I take a very simple example: I would like to write the quadratic form
>
> q1 = R*x^2 + R*x + T
>
> in the form
>
> q2 = u*(x+v)^2 + w
>
> How can I find u, v, and w from R, S, and T?
>
> I'm sure there must be some symbolic way (using a sufficient amount of
> _'s) to answer this question.
>
> My (cumbersome) procedure compares coefficients and looks like this
>
> (* writing down lhs == rhs)
> In[112]:=
> q = R*x^2 + S*x + T == u*(x + v)^2 + w
> Out[112]=
> T + S*x + R*x^2 == w + u*(v + x)^2
>
> (* as q must be an identiy in x, i.e. must hold for all x, I compare
> coefficients at x=0 *)
> In[113]:=
> eq1 = q /. {x -> 0}
> Out[113]=
> T == u*v^2 + w
> In[114]:=
> eq2 = D[q, x] /. {x -> 0}
> Out[114]=
> S == 2*u*v
> In[115]:=
> eq3 = D[q, {x, 2}] /. {x -> 0}
> Out[115]=
> 2*R == 2*u
> In[119]:=
> t = First[Solve[{eq1, eq2, eq3}, {u, v, w}]]
> Out[119]=
> {w -> (-S^2 + 4*R*T)/(4*R), u -> R, v -> S/(2*R)}
>
> (* writing down the result explicitly *)
> In[120]:=
> q /. t
> Out[120]=
> T + S*x + R*x^2 == (-S^2 + 4*R*T)/(4*R) + R*(S/(2*R) + x)^2
> In[122]:=
> Simplify[q /. t]
> Out[122]=
> True
>
> Thanks in advance for any hints.
> Regards,
> Wolfgang



  • Prev by Date: Re: ListIntegrate3D ?
  • Next by Date: Re: Stopping Automatic Animation in v6
  • Previous by thread: Re: Quadratic form: symbolic transformation
  • Next by thread: Re: Quadratic form: symbolic transformation