How to solve polynomial for a number of values x?
7 次查看(过去 30 天)
显示 更早的评论
I have a data set with x and y values. (x=discharge and y = water level). Now I made a 3rd order polynomial fit and I need the value x given y for y = 0.00, 0.05, ..., 14.00 How do I solve the polynomial for x and get the x values in a nice matrix?
x = [5965 7867 9459 11763 13881 14794 16000 16619 20000] y = [3.7 6.34 7.04 7.89 8.61 8.91 9.25 9.42 10.19]
plot(x,y,'o')
[p,~,mu] = polyfit(x,y,3); y2 = polyval(p,x,[],mu); hold on plot(x,y2) hold off
h = [0.00:0.05:14.00]; %h are the values of y for which I want to know x
so the result should be a matrix like: [y1 x1 y2 x2 y3 x3 etc]
I'm only interested in real solutions
0 个评论
采纳的回答
更多回答(1 个)
John D'Errico
2015-2-16
Nothing personal, but that cubic polynomial is a relatively poor fit.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/173449/image.jpeg)
See that the cubic has some lack of fit, but that far more importantly, in extrapolation, it starts to do some nasty stuff, that does not seem indicated by your data.
Whereas, with essentially no options chosen at all, my SLM toolbox provides this result:
slm = slmengine(x,y,'plot','on','knots',[3000:3000:24000]);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/173451/image.jpeg)
Which seems to represent the data a bit more cleanly.
The inverse function is also easily done in one call to slmeval.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Polynomials 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!