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]
gives
1/(-Sqrt[(-1 + Sqrt[oro])^2] + Sqrt[oro])
whereas evaluating
f[0, a, b]
gives
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
f2[0,om,oro]//PowerExpand
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,
Cheers,
brian