Your equations are, if I'm not mistaken, polynomials in several variables of degree 2 or greater (where the degree is equal to the maximum number of variables multiplied together). You say that you have more equations than unknowns.
If I'm not mistaken, in general there are no exact solutions, but you can look for a best-fitting solution via least squares. I don't know how many locally best-fitting solutions there might be. You might ask on math.stackexchange.com about the number of solutions and other characteristics of such equations.
Here is a way to look for a locally best-fitting solution in Maxima. Form a "figure of merit" expression (fom
below) from the equations, and look for a local minimum of it. I'll use lbfgs
to search for a numerical approximation.
(%i3) eq:[a*c=8,a*d=10,b*c=12,b*d=15,a+b=5,c+d=9];
(%o3) [a*c = 8,a*d = 10,b*c = 12,b*d = 15,b+a = 5,d+c = 9]
(%i4) eq0 : map (lambda ([e], lhs(e) - rhs(e)), eq);
(%o4) [a*c-8,a*d-10,b*c-12,b*d-15,b+a-5,d+c-9]
(%i5) eq2 : expand (eq0^2);
(%o5) [a^2*c^2-16*a*c+64,a^2*d^2-20*a*d+100,b^2*c^2-24*b*c+144,
b^2*d^2-30*b*d+225,b^2+2*a*b-10*b+a^2-10*a+25,
d^2+2*c*d-18*d+c^2-18*c+81]
(%i6) load (lbfgs);
(%o6) "/usr/local/share/maxima/branch_5_40_base_95_g4c9cbbd/share/lbfgs/lbfgs.mac"
(%i9) fom : apply ("+", eq2);
(%o9) b^2*d^2+a^2*d^2+d^2+2*c*d-30*b*d-20*a*d-18*d+b^2*c^2
+a^2*c^2+c^2-24*b*c-16*a*c-18*c+b^2+2*a*b-10*b+a^2
-10*a+639
Here fom
is just the sum of squares of error (i.e. the discrepancy between the right hand side and left hand sides of the equations, squared and added up).
(%i10) lbfgs (fom, [a, b, c, d], [1, 1, 1, 1]/4, 1e-4, [1, 0]);
*************************************************
N= 4 NUMBER OF CORRECTIONS=25
INITIAL VALUES
F= 6.198906250000000D+02 GNORM= 4.916696680699350D+01
*************************************************
I NFN FUNC GNORM STEPLENGTH
1 5 1.029984221465989D+01 3.303822830240210D+01 1.342303790326981D-01
2 7 1.858590097968602D+00 7.066597977731433D+00 2.567282877401947D-01
3 9 1.707935938873334D+00 7.250276888460332D+00 1.939008057328834D-01
4 10 1.071933775239074D+00 3.590373568045903D+00 1.000000000000000D+00
5 11 6.984083995048138D-01 2.736311274794537D+00 1.000000000000000D+00
6 12 2.756317886006059D-01 2.992718120186393D+00 1.000000000000000D+00
7 13 4.947211249555039D-02 2.105297770017910D+00 1.000000000000000D+00
8 14 8.047123928918154D-04 2.073845793942183D-01 1.000000000000000D+00
9 15 7.401148110375289D-06 2.195111965609954D-02 1.000000000000000D+00
10 16 3.129228502984915D-07 4.565302248467960D-03 1.000000000000000D+00
11 17 1.750777300912887D-09 4.710495250075657D-04 1.000000000000000D+00
THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.
IFLAG = 0
(%o10) [a = 2.000003188592,b = 2.999996386563707,
c = 4.000008973580663,d = 5.00000040529949]
I can guess that the a = 2, b = 3, c = 4, d = 5
might be an exact solution. I can verify that:
(%i11) subst ([a = 2, b = 3, c = 4, d = 5], fom);
(%o11) 0
That's encouraging in this case, but in general I think there won't be an exact solution near the approximate one. The approximate solution may be the best you can do.