Need help finding intercept in a polynomial function
7 views (last 30 days)
Show older comments
Gerardo Flores Sempertegui
on 27 Nov 2019
Commented: Gerardo Flores Sempertegui
on 28 Nov 2019
Hello,
I have a polynomial function and I would like to find all the "x" values for a "y" value.
For example I have tried to plot this function:
x=[0:0.05:23]
f=@(x) 152.094827571469-206.917405701416*x+188.571689289441*(x.^2)-93.85238987*(x.^3)+25.7783269818991*(x.^4)-4.34657779503011*(x.^5)+0.485315204*(x.^6)-0.0353709647924109*(x.^7)+0.00158130195601334*(x.^8)-0.0000388214150997567*(x.^9)+0.000000397986046326228*(x.^10)
y=f(x)
plot(x,y)
grid on
I have tried to do all the intercepts with the interp1 formula (for example when y=600)
x0=interp1(y,x,600,'nearest')
x1=interp1(y,x,600,'linear')
x2=interp1(y,x,600,'spline')
x3=interp1(y,x,600,'pchip')
x4=interp1(y,x,600,'cubic')
x5=interp1(y,x,600,'v5cubic')
As you can see in the graph I should get 2 points when y=600 but I only one and it is the same for all the y values I use.
Please if you know any way to find all the interceptions when y=600 or any value it would be very helpful!
Thank you for your time and help.
0 Comments
Accepted Answer
James Tursa
on 27 Nov 2019
Edited: James Tursa
on 27 Nov 2019
Why can't you just find the real roots of f(x)-600? What am I missing here?
2 Comments
Guillaume
on 27 Nov 2019
Indeed, and that would be trivial to do if the polynomial was expressed as a vector of coefficients instead of being hardcoded in an anonymous function:
p = fliplr([152.094827571469;
-206.917405701416;
188.571689289441;
-93.85238987;
25.7783269818991
-4.34657779503011
0.485315204
-0.0353709647924109
0.00158130195601334
-0.0000388214150997567
0.000000397986046326228].')
f = @(x) polyval(p, x);
r = roots(p - [zeros(1, 10), 600]);
r(imag(r) == 0)
More Answers (0)
See Also
Categories
Find more on Polynomials in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!