Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

How can I get an equation of the similar shaped curve?

enter image description here

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.

share|improve this question
    
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. –  b.gatessucks Nov 16 '13 at 9:59

3 Answers 3

up vote 3 down vote accepted

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}]]

Mathematica graphics

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]

Mathematica graphics

share|improve this answer
    
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 –  Mika Ike Apr 8 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][[1]]
x^3 + 3.2037 x^2 - 16.6111 x + 3

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

share|improve this answer

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]
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.