MathGroup Archive 2006

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

Search the Archive

Re: normalization and square roots

Ruth, There are several problems with the way you have set up your
functions. First of all if you define the functions as in your post

f[x_, om_, oro_] := 1/(Sqrt[oro] - Sqrt[
  om(1 + x)^3 + ol + oro]) /. ol -> myrule

myrule = -om + (-1 + Sqrt[oro])^2 - oro

then evaluating

f[0, om, oro]


1/(-Sqrt[(-1 + Sqrt[oro])^2] + Sqrt[oro])

whereas evaluating

f[0, a, b]


1/(Sqrt[b] - Sqrt[a + b - om + (-1 + Sqrt[oro])^2 - oro])

The reason is clear: the arguments of f are pattern matched in the
function expression but the pattern matching does not extend to the
rule. You can resolve this by writing out myrule explicitly in the
function definition or defining a new rule and function as follows:

myrule2[om_, oro_] := -om + (-1 + Sqrt[oro])^2 - oro

f2[x_, om_, oro_] := 1/(
    Sqrt[oro] - Sqrt[om(1 + x)^3 + ol + oro]) /. ol -> myrule2[om, oro]

Now f2[0,om,oro] gives the same expression for  f2[0,a,b]  with a
substitued for om and b for oro.

If you wrap f2[a,b] with PowerExpand you get 1



But this is only true if  oro (or b) is greater than unity. If you look
at the output

f2[0, a, b]

1/(-Sqrt[(-1 + Sqrt[b])^2] + Sqrt[b])

the reason is clear. When you use PowerExpand Mathematica always takes
the positive root of Sqrt[(-1 + Sqrt[b])^2]. There is no ambiguity if
b>1, but if b<1, you need the negative root if you want f2[0,0.2,0.3]
to evalaute to 1.

Hope this helps,



  • Prev by Date: Re: unable to FullSimplify
  • Next by Date: Re: Named Formats? (followup question)
  • Previous by thread: Re: normalization and square roots
  • Next by thread: Re: normalization and square roots