Re: turning differences into sums

Claude Heiland-Allen <[email protected]> Sun, 21 Jun 2026 13:02:07 +0200
Newsgroups gmane.comp.mathematics.maxima.general
Message-ID <[email protected]>
Thanks for your reply Stavros, however the first example doesn't make 
any difference in this case and the second one has the copy/paste issue 
that I'm trying to avoid (though, it uses a nicer syntax than my 
previous attempts, which is good to learn).

Concretely, I want to programmatically transform all the subtractions in 
the numerator to additions, that is, go from

-((4*(W*sqrt(Y^2+X^2)*Z*sqrt(z^2+2*Z*z+w^2+2*W*w+Z^2+W^2)
             -sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
             -W*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
             -Z*sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)

-W*Z*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)))


to


-((4*(W*sqrt(Y^2+X^2)*Z*sqrt(z^2+2*Z*z+w^2+2*W*w+Z^2+W^2)
+sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z

+W*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
+Z*sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)
+W*Z*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)))


so that I can the multiply the parts of the fraction by it.


Thanks,


Claude

On 21/06/2026 12:49, Stavros Macrakis wrote:
> Try
>
> factor(1/ratsimp(1/ex)),algebraic;
>
> ratsimp/algebraic generally eliminates roots in the denominator
>
> or more "manually"
>
> apply("/",factor(expand(args(ex)*(sqrt(a)+sqrt(b)))))
>
>
> On Sun, Jun 21, 2026, 04:46 Claude Heiland-Allen <[email protected]> 
> wrote:
>
>     Hi all,
>
>     I have something like
>
>     (sqrt(a) - sqrt(b)) / c
>
>     and I would like to multiply to and bottom by
>
>     (sqrt(a) + sqrt(b))
>
>     and simplify each to get
>
>     (a - b) / (c * (sqrt(a) + sqrt(b)))
>
>     of course my actual expressions are much more complicated (and I
>     hope my (a-b) will simplify further) and I cannot see how to do it
>     programmatically without lots of manual copy and paste with
>     potential for errors.
>
>     actual code:
>
>     s(x,y,z,w) := (x^2 + y^2 - z^2 - w^2) * (x^2 - y^2) / (x^2 + y^2);
>     t(x,y,z,w) := (x^2 + y^2 - z^2 - w^2) * (2 * x * y) / (x^2 + y^2);
>     u(x,y,z,w) := 2 * sqrt((x^2 + y^2) * (z^2 + w^2)) * (z^2 - w^2) /
>     (z^2 + w^2);
>     v(x,y,z,w) := 2 * sqrt((x^2 + y^2) * (z^2 + w^2)) * (2 * z * w) /
>     (z^2 + w^2);
>     p(f) := factor(expand(f(X+x,Y+y,Z+z,W+w) - f(X,Y,Z,W)));
>     p(s);
>     p(t);
>     p(u);
>     p(v);
>
>     the last two expressions are the ones I want to manipulate as
>     described, here is the last one:
>
>     -((4*(W*sqrt(Y^2+X^2)*Z*sqrt(z^2+2*Z*z+w^2+2*W*w+Z^2+W^2)
>     -sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
>     -W*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
>     -Z*sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)
>     -W*Z*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)))
>      /(sqrt(Z^2+W^2)*sqrt(z^2+2*Z*z+w^2+2*W*w+Z^2+W^2)))
>
>
>     context: I'm trying to apply perturbation techniques to iterations
>     of the 4D Hopfbrot fractal, a cousin of the famous 3D Mandelbulb. 
>     Perturbation techniques popularized in the last years allow
>     computationally efficient deep zooming of 2D fractals like the
>     Mandelbrot set, and recently have been applied to the Mandelbulb. 
>     The main idea is to use "small" differences from one "large"
>     reference orbit, and the key step is symbolically simplifying so
>     there is no catastrophic cancellation when evaluating numerically
>     (i.e. naively (X+x)-X will give 0 instead of x when x << X).
>
>     Thanks,
>
>
>     Claude
>
>     https://mathr.co.uk
>
>
>     _______________________________________________
>     Maxima-discuss mailing list
>     [email protected]
>     https://lists.sourceforge.net/lists/listinfo/maxima-discuss
>


_______________________________________________
Maxima-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/maxima-discuss