# Conjugate multiplication of square root

Is there a simple way to simplify a formula using conjugate multiplication of the square roots? For example, when I perform

var('a,b,d')
exp = 1/(a+b*sqrt(d))
exp.full_simplify()


I would like to get

(b*sqrt(d) - a)/(b^2*d - a^2)


but what I actually get is just the form that I started with. Even if I specify the assumptions

assume(d,'real')
assume(d>0)


the conjugate multiplication does not happen automatically. I would like to be able to tell Sage, that I want the conjugate multiplication. In some cases that are relevant to me, the conjugate multiplication would simplify my expressions significantly.

edit retag close merge delete

Sort by » oldest newest most voted

Well...

sage: var("a,b,d")
(a, b, d)
sage: E=1/(a-b*sqrt(d));E
-1/(b*sqrt(d) - a)
def cm(x):
W=[SR.wild(u) for u in range(2)]
def cm1(x):
W=[SR.wild(u) for u in range(4)]
return x.subs(W[0]/(W[1]+W[2]*sqrt(W[3]))==\
(W[0]*(W[1]-W[2]*sqrt(W[3])))/(W[1]^2-W[2]^2*W[3]))
return x.subs(W[0]+W[1]==W[0]+cm1(W[1]))


This should do the job.

sage: cm(E)
-1/(b*sqrt(d) - a)


But be aware that recursing in subexpressions isn't especially Sage's forte.

more