# Getting an equation of particular curve

How can I get an equation of the similar shaped curve? I've tried to get it like y = a + c x^2 + d x^3:

Fit[{{-3, -3}, {0, 3}, {6, 4}}, {1, x^2, x^3}, x]


But it lacks two roots.

I can't use PolynomialFit because of the lack of points.

• You could use InterpolationInterpolation[{{-3, -3}, {0, 3}, {6, 4}, {-2, 0}, {2, 0}, {4.5, 0}}, InterpolationOrder -> 4], so the curve will go through the points you specify. Nov 16, 2013 at 9:59

Another option is put more points at all the critical locations

pts = {{-3, -3}, {-2, 0}, {0, 3}, {3, 0}, {4, -1}, {5, 0}, {6, 4}};
Fit[pts, {1, x, x^2, x^3, x^4}, x]
Show[ListPlot[pts, PlotStyle -> Directive[Red,PointSize[Large]]],Plot[%, {x, -3, 6}]] You can also try BSplineCurve but you'd have to play with the option more than what I have below.

 Graphics[BSplineCurve[pts, SplineDegree -> 3], Axes -> True] • I like this reply, but I´m trying to obtain any similar to this with the maximins in the BIG-points, and I can´t reach the solution. sensa.square7.ch/_FIT_2014-04-07-18.01.jpg Apr 8, 2014 at 8:07

You have three points that will give you three linear equations in three unknown coefficients. Just solve for the coefficients

data = {{-3, -3}, {0, 3}, {6, 4}};

makeEq[{x_, y_}] := y == a + c x^2 + d x^3
Solve[makeEq /@ data]


This will give you a=3, c=-47/108 and d=25/324. The good news is that this is the one and only solution for that model. The bad news is that, sorry, the curve is not like the one you depicted.

EDIT: By re-reading your question it seems that a + c x^2 + d x^3 is just a tentative model and not the actual model you are trying to fit. I guess the fact you get a definite solution here shows that this model is inadequate for a curve passing for those points and with two more real roots. As a matter of fact, the other answer(s) showed a curve modeled by a different polynomial.

Let me add that, the condition to have a relative maximum in x=0 means that the coefficient b has to be zero (since by differentiating the polynomial you get b + something*x = ...). Thus is you wanted a solution in the form of a third degree polynomial passing for the points given in data and with a relative maximum in 0 you are out of luck. You can still get a third degree polynomial passing for those points, with one negative and two positive real roots in the specified intervals, if you let go the condition on the peak. One can be found in this way

makeEq[{x_, y_}] := (y == (x - x0)(x - x1)(x - x2) // Expand)
data = {{-3, -3}, {0, 3}, {6, 4}};
sols=NSolve[makeEq /@ data]


You will get the same solution in different permutations. The third degree poly with one (negative) real solution in [-3,0] and two (real) positive solutions in [0,6] is given by

Expand[(x - x0)(x - x1)(x - x2) /. sols][]

x^3 + 3.2037 x^2 - 16.6111 x + 3


It goes through (0,3) but it has no stationary point there.

Using InterpolatingPolynomial:

InterpolatingPolynomial[{{-3, -3}, {-2, 0}, {0, {3, 0}}, {4, {-1, 0}}, {6, 4}}, x] // Expand

3 - (3653 x^2)/5292 + (2477 x^3)/31752 + (13 x^4)/784 - (
17 x^5)/5292 + (17 x^6)/63504

p = Plot[%, {x, -3, 6}, PlotStyle -> Thickness[0.0035],
ColorFunction -> "BlueGreenYellow"];

pp = ListPlot[{{-3, -3}, {-2, 0}, {0, 3}, {2.7, 0}, {4.99,
0}, {4, -1}, {6, 4}},
PlotStyle -> Directive[Red, PointSize[Large]]];

Show[p, pp]