Using cubic splines to fit data

6 次查看(过去 30 天)
Matlab User
Matlab User 2016-10-18
评论: Matlab User 2016-10-20
Hi, I have a quite involved code for fitting cubic splines to data. I have noticed something odd and wondered if anyone had experience with this. For horizontal data, the spline fits extremely well, however for data within a small x range and large y, i.e. a series of vertical points, the spline is very odd! I have attached two images, first the data set and next the resulting fits.. Any help would be appreciated.

回答(1 个)

John D'Errico
John D'Errico 2016-10-18
First of all, why are you writing cubic spline codes to fit data, if you don't really understand cubic splines, and the issues involved with them?
I'm not sure why I made this an answer, since you say nothing concrete about what EXACTLY you are doing. There are lots of ways you can fit a spline to data, and the data that you have is nothing I would ever decide that a spline would be a good choice for. Do you presume noise in the fit? Is this an interpolating spline? (Why would you do that, EVER? But people do.)
Are you fitting the horizontal lines as separate functions, thus y as function of x for each horizontal set of points? Are the vertical lines fit as x as a function of y? If not, then why not? If you are trying to fit a spline through essentially vertical data in the form of y(x), you should realize that is an insane thing to do. (Sorry but it is.) Or are you somehow trying to fit all of these points at once? (How can I guess what you're doing wrong, when you say nothing?)
The fact is, there are spline codes out there. You would do far better to learn to use an appropriate spline code before trying to write your own. As it is, I'm not at all sure why you are trying to use splines on that data at all.
  4 个评论
John D'Errico
John D'Errico 2016-10-18
编辑:John D'Errico 2016-10-18
You did post the data as a figure, so I can extract the data. I think I can figure out how to employ gridfit to solve this problem...
open Fibres.fig
H = get(gca,'children');
x = H.XData;
y = H.YData;
I guess the question is, before I go further, how much of the variability in this data do you need to follow? What is your eventual goal? For example, do you want to turn this into a set of 4 slightly curvy-edged rects? Or would it be sufficient to simply replace those noisy lines with straight edges, though not necessarily meeting at right angles? So those nominal squares might turn into general 4 sided polygons?
Matlab User
Matlab User 2016-10-20
Thankyou for your reply - i now understand why it is unreasonable to fit the vertical data in this way. I think including a loop to calculate the x range over which the ID is known, then if it is extremely small, inverting that ID is a great idea.
No connections is okay, in the example I gave, there are unique IDs associated to the series of points forming the horizontal and vertical lines. So, I do not want to join these "IDs" together..
The main problem I guess is data variability. The example i gave is a simple case of a series of horizontal and vertical IDs. I have written a code to generate at random, the orientation of these 6 unique series of points. I've attached an example in case my text is unclear. In this case, the lines are coded to be linear. Although the idea is to fit this data without too much restriction on orientation or linearity.
I have also written code to generate randomly placed curved series of points, given a unique ID. So I was hoping that I could be able to fit these types of data without restriction on linearity/curvature and came across your function and thought it may be just what I was looking for!! Although, perhaps the variability in the data series could be too much and I need to tell the model more about each system ?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Spline Postprocessing 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by