Shapes of elliptic curves

Manipulate[ContourPlot[y^2==x^3+a x^2+b x,{x,-10,10},{y,-20,20}],{a,-10,10},{b,-10,10}]

Finding a solution of the problem
(a/(b+c))+(b/(c+a))+(c/(a+b))=M
using theory of elliptic curves

Equivalence with a cubic curve in the Weierstrass form

Homogeneous cubic curve C in the projective plane (all points {ta,tb,tc} for t≠0  are treated as one {a,b,c}) which has at least one rational solution

OrigCubic[a_,b_,c_,M_]:=M(a+b)(b+c)(c+a)-a(a+b)(c+a)-b(a+b)(b+c)-c(b+c)(c+a)

is equivalent to a cubic curve W in the regular plane in the Weierstrass form

Weierstrass[x_,y_,M_]:=y^2-x^3-(4M^2+12M-3)x^2-32(M+3)x
Print["For M = 4 we have the curve ",Weierstrass[x,y,4]==0];
GraphicsRow[{ContourPlot[Weierstrass[x,y,4]==0,{x,-150,100},{y,-1000,1000}],ContourPlot[Weierstrass[x,y,4]==0,{x,-5,5},{y,-50,50}]},ImageSize->Medium]

To get from C to W or the other way, one can use relations

substXY={x->-4(a+b+2c)(M+3)/(2a+2b-c+(a+b)M),y->4(a-b)(M+3)(2M+5)/(2a+2b-c+(a+b)M)}
substABC={a->(8(M+3)-x+y)/(2(4-x)(M+3)),b->(8(M+3)-x-y)/(2(4-x)(M+3)),c->(-4(M+3)-(M+2)x)/((4-x)(M+3))}

Because transition from {x,y} to {a,b,c} and back is given by rational functions, 
rational solutions of W are transformed to rational solutions of C (and vice versa)

substValuesABCM={a->5,b->-9,c->-11,M->4};
Print["The solution {a,b,c} = ",{a,b,c}/.substValuesABCM," gives the solution {x,y} = ",({x,y}/.substXY)/.substValuesABCM];
Print["Checking W(x,y) = 0: ",Simplify[Weierstrass[x,y,M]/.substXY]/.substValuesABCM]
Print["Checking C(a,b,c) = 0: ",OrigCubic[a,b,c,M]/.substValuesABCM]

substValuesXYM={x->-100,y->260,M->4};
Print["The solution {x,y} = ",{x,y}/.substValuesXYM," gives the solution {a,b,c} = ",({a,b,c}/.substABC)/.substValuesXYM];
Print["Checking W(x,y) = 0: ",Weierstrass[x,y,M]/.substValuesXYM]
Print["Checking C(a,b,c) = 0: ",Simplify[OrigCubic[a,b,c,M]/.substABC]/.substValuesXYM]

Starting from W and using the substitutions in the general form, we get C multiplied by a factor

Factor[Simplify[Weierstrass[x,y,M]/.substXY]]
Factor[OrigCubic[a,b,c,M]]

Positive solution using group addition on the cubic curve

Starting with a known rational solution S on W, we can get a new rational solution using the formula for adding a point S to itself by constructing a tangent to W at S, finding another point where this tangent crosses W and then reflecting it along the axis x.
Then we can continue simply by adding S to this new solution, etc.

A function to get a new solution of W:
parameters: 	p, q, and r are the right-hand site of W written as (y^2)= f(x)=(x^3)+p (x^2)+q x+r
			S1 and S2 are two known solutions, they can be the same point

GetNewSolutionOfW[p_,q_,r_,S1_,S2_]:=Module[
{xS,yS,x,y,k,y0},
xS=S1[[1]];yS=S1[[2]];
(* a line is given by y = k*x + y0 *)
If[xS==S2[[1]],
(* if points are the same we use a tangent line, where k is obtained from the derivative of W *)
k=(3xS^2+2p*xS+q)/(2yS),
(* otherwise k is given simply by *)
k=(yS-S2[[2]])/(xS-S2[[1]])
];
y0=yS-k*xS;
x=k^2-p-xS-S2[[1]];
y=k*x+y0;
Return[{x,-y}]
];

Now, start with the solution S = {-100, 260}  for M = 4 on W obtained from {a,b,c} = {1,-4,11} (found by direct tests for small integers) and iterate until the solution of C is positive (hopefully)

valM=4;
{x0,y0}={-100,260};
{xN,yN}={x0,y0};
Do[
{xN,yN}=Simplify[GetNewSolutionOfW[4M^2+12M-3,32(M+3),0,{x0,y0},{xN,yN}]/.{M->valM}];
substValuesXYM={x->xN,y->yN,M->valM};
newABC=({a,b,c}/.substABC)/.substValuesXYM;
commonDenominator=LCM@Delete[ Denominator@newABC,0];
newABC=commonDenominator*newABC;
Print["The solution {x,y} = ",{x,y}/.substValuesXYM," gives a new solution {a,b,c} = ",newABC];
Print["Checking W(x,y) = 0: ",Weierstrass[x,y,M]/.substValuesXYM];
Print["Checking C(a,b,c) = 0: ",Simplify[OrigCubic[a,b,c,M]/.substABC]/.substValuesXYM];
If[Positive@Min@newABC,
Print["We found a solution of the original problem with ",IntegerLength[newABC]," digits after ",i," iterations. Hooray!"];
Break[]
],
{i,1,15}
];

GCD[Delete[newABC,0]]

But what about to start with the solution S = {-56,-392}  for M = 4 on W obtained from {a,b,c} = {5,-9,-11} (also found by direct tests for small integers)  ?

valM=4;
{x0,y0}={-56,-392};
{xN,yN}={x0,y0};
Do[
{xN,yN}=Simplify[GetNewSolutionOfW[4M^2+12M-3,32(M+3),0,{x0,y0},{xN,yN}]/.{M->valM}];
substValuesXYM={x->xN,y->yN,M->valM};
newABC=({a,b,c}/.substABC)/.substValuesXYM;
commonDenominator=LCM@Delete[ Denominator@newABC,0];
newABC=commonDenominator*newABC;
Print["The solution {x,y} = ",{x,y}/.substValuesXYM," gives a new solution {a,b,c} = ",newABC];
Print["Checking W(x,y) = 0: ",Weierstrass[x,y,M]/.substValuesXYM];
Print["Checking C(a,b,c) = 0: ",Simplify[OrigCubic[a,b,c,M]/.substABC]/.substValuesXYM];
If[Positive@Min@newABC,
Print["We found a solution of the original problem with ",IntegerLength[newABC]," digits after ",i," iterations. Hooray!"];
Break[]
],
{i,1,15}
];

GCD[Delete[newABC,0]]

Solution for M = 6:

valM=6;
substValuesABCM={a->3,b->-7,c->-23,M->valM};
{x0,y0}=({x,y}/.substXY)/.substValuesABCM;
{xN,yN}={x0,y0};
Do[
{xN,yN}=Simplify[GetNewSolutionOfW[4M^2+12M-3,32(M+3),0,{x0,y0},{xN,yN}]/.{M->valM}];
substValuesXYM={x->xN,y->yN,M->valM};
newABC=({a,b,c}/.substABC)/.substValuesXYM;
commonDenominator=LCM@Delete[ Denominator@newABC,0];
newABC=commonDenominator*newABC;
Print["The solution {x,y} = ",{x,y}/.substValuesXYM," gives a new solution {a,b,c} = ",newABC];
Print["Checking W(x,y) = 0: ",Weierstrass[x,y,M]/.substValuesXYM];
Print["Checking C(a,b,c) = 0: ",Simplify[OrigCubic[a,b,c,M]/.substABC]/.substValuesXYM];
If[Positive@Min@newABC,
Print["We found a solution of the original problem with ",IntegerLength[newABC]," digits after ",i," iterations. Hooray!"];
Break[]
],
{i,1,15}
];

GCD[Delete[newABC,0]]