I'm not sure how to interpret some of your latest message. See what you can make of this.
I take your latest Mathematica, modify that slightly and hope I haven't made any typos entering that.
sol=Solve[{-2a1x+10/(a1x+a1y-10)+g1==0,
-2a1y+10/(a1x+a1y-10)+g2==0,
0.9(-2a2x(1-ix/40)+10/(a2x+a2y-10))+g3==0,
0.9(-2a2y(1-ix/40)+10/(a2x+a2y-10))+g4==0,
-1/2+0.9(a2x^2/40+a2y^2/40)+g5==0,-1/2+g6==0,
g1*-a1x==0,g2*-a1y==0,g3*-a2x==0,g4*-a2y==0,
g5*-ix==0,g6*-iy==0,g7*(ix-24)==0,g8*(iy-24)==0},
{a1x,a1y,a2x,a2y,ix,iy,g1,g2,g3,g4,g5,g6,g7,g8}]
I'm using Solve instead of Reduce. For this problem they should be about the same, but the way it formats the answer will be different.
When I give that to Mathematica it issues a warning
Solve was unable to solve the system with inexact coefficients.
The answer was obtained by solving a corresponding exact system
and numericizing the result
That is not an error in this case. It is just saying that it looked at your problem which had a mixture of exact integer and rational coefficients with some approximate decimal numbers 0.9. The algorithm it selected to try to solve this couldn't deal with the 0.9, so it translated those into 9/10, solved the problem and then turned everything back into approximate decimals.
And it gives me 91 different solutions! Two it shows me in detail and the other 89 are hidden behind a ...89... If you need to you can append a //InputForm onto the end of that Solve line and you should see about 15 pages of solutions, but InputForm changes things and is mostly just to display something, not to do further calculations with.
Now I am not going to use that InputForm and I am going to try to test the first solution to see if it works. sol[[1]] is going to extract the first solution and /. is going to substitute that into your system and show the result.
{-2a1x+10/(a1x+a1y-10)+g1==0,
-2a1y+10/(a1x+a1y-10)+g2==0,
0.9(-2a2x(1-ix/40)+10/(a2x+a2y-10))+g3==0,
0.9(-2a2y(1-ix/40)+10/(a2x+a2y-10))+g4==0,
-1/2+0.9(a2x^2/40+a2y^2/40)+g5==0,-1/2+g6==0,
g1*-a1x==0,g2*-a1y==0,g3*-a2x==0,g4*-a2y==0,
g5*-ix==0,g6*-iy==0,g7*(ix-24)==0,g8*(iy-24)==0}/.sol[[1]]
That returns
{True,True,False,False,False,True,True,True,True,True,True,True,True,True}
and thus every one of those equations is true with that particular solution except equations 3,4,5.
What is going on with those? I'm going to look a those this way
{0.9(-2a2x(1-ix/40)+10/(a2x+a2y-10))+g3,
0.9(-2a2y(1-ix/40)+10/(a2x+a2y-10))+g4,
-1/2+0.9(a2x^2/40+a2y^2/40)+g5}/.sol[[1]]
and that returns
{-9.99201*^-17,-9.99201*^-17,1.11022*^-16}
Ah, because of the inexact approximate decimal values each of those tiny floating point numbers would have been compared with zero, they were not exactly equal to zero and so that is why it reported those three equations were False. Notice the three equations it complained about were exactly the three equations with approximate decimal 0.9 in them. If I turn those three 0.9 into 9/10 and do this all over again then the solutions get bigger and more complicated and involve more square roots and powers and etc, but it looks like the warning and the False go away, but I have not checked this in every case.
Learning how to understand and deal with tiny floating point discrepancies is a whole different world and we probably don't have time to even begin exploring that at this point.
You can test others of your 91 solutions by doing things like
{-2a1x+10/(a1x+a1y-10)+g1==0,
-2a1y+10/(a1x+a1y-10)+g2==0,
0.9(-2a2x(1-ix/40)+10/(a2x+a2y-10))+g3==0,
0.9(-2a2y(1-ix/40)+10/(a2x+a2y-10))+g4==0,
-1/2+0.9(a2x^2/40+a2y^2/40)+g5==0,-1/2+g6==0,
g1*-a1x==0,g2*-a1y==0,g3*-a2x==0,g4*-a2y==0,
g5*-ix==0,g6*-iy==0,g7*(ix-24)==0,g8*(iy-24)==0}/.sol[[17]]
which returns
{True,True,True,False,False,True,True,True,True,True,True,True,True,True}
So I suspect that most of the solutions are "close", but not exactly equal due to the small uncertainty involved with any floating point number.
I realize that Matlab lives on approximate decimal numbers and can handle exact integers and rationals, often turning those into approximate decimals. Mathematica tends to go the other way and often turns things into exact rationals when possible.
So, where are we now? I'm not certain. Is there something specific you need from this? Can you come up with a specific case or example that you need to test or understand?
As I always say, check all of this very carefully before you even begin thinking you might trust something that I've done.