How to Fit One Curve to Another in MATLAB?

  • Thread starter Thread starter villiami
  • Start date Start date
  • Tags Tags
    Fitting
Click For Summary

Discussion Overview

The discussion revolves around the challenge of fitting one curve to another in MATLAB, focusing on transforming the first curve through rotations and shifts to achieve the best fit with the second curve. The problem is explored in the context of data that is not paired, raising questions about the appropriate methods for comparison and optimization.

Discussion Character

  • Exploratory
  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant describes their approach to transforming curves in MATLAB, noting difficulties due to the curves doubling back on themselves.
  • Another participant questions whether the data sets are paired or if there is a parameterization that relates points on one curve to unique points on the other.
  • A participant clarifies that the data is not paired and mentions using spline interpolation for comparison.
  • One suggestion involves calculating the squared distance between points in the two sets to minimize the total distance, indicating that this method may be computationally intensive.
  • Another participant proposes minimizing the absolute area between the two curves, questioning how to define and calculate this area effectively.
  • A later reply indicates a partial solution was found by rotating parts of the curves to avoid doubling back, expressing satisfaction with the progress made.

Areas of Agreement / Disagreement

Participants express various methods and considerations for fitting curves, but no consensus is reached on a definitive approach. Multiple competing views and techniques remain under discussion.

Contextual Notes

Participants mention the potential computational complexity of the proposed methods and the challenges posed by the non-paired nature of the data. The discussion includes uncertainty regarding the best way to define and minimize the area between the curves.

villiami
Messages
27
Reaction score
0
I'm currently working on a MATLAB program which, given two sets of data each representing curves, will transform (through rotations about the origin and x-y shifts) the first curve so it fits the second one best (so far in terms of sum of squares).

I have been able to create a program calculating vertical distance between the two curves, but because my curves double back on themselves I don't think this will really work.

Does anyone know how this might be done (in MATLAB or another language)? Or even just what this type of problem is called (I tried "Curve fitting", but this seems to only refer to point-to-curve fitting)

Thanks in advance,
Will
 
Technology news on Phys.org
Is each set of data paired with the other or is there some parameterization that relates a given point on one curve with a unique point on the other?
 
The data is not paired, i.e. one set might be for x-values 10,20,30,40,50 and the other at 11,17,31.46,...etc
In the first version I used spline interpolation when I needed to compare points/curves.
(note these are not actually the data points!)
Thanks
 
OK, if the data is not paired then this may be very slow depending on the size of your data. I think the operation I am going to suggest is O(N²).

For each data point A in the first set calculate the squared distance (x²+y²) with each data point B in the second set. The minimum distance is the distance of point A from set B. Sum that over all points in A to get a total distance measure. Minimize that distance measure.

By the way, this seems like it is a kind of registration problem, which is a type of optimization problem. There are probably people who have solved this much more efficiently than what I am suggesting.
 
Do the functions fit within some sort of boundary box or circle? It seems to me that what you want to minimize is the absolute area between the two curves; however, I'm not sure how well-defined that is.

Are the curves finite? If so, one could define the area by drawing lines between the endpoints of the curves. Still, I'm not sure exactly how to calculate the area in order to minimize it.
 
Thanks for the responses, I think I've solved it (partially) by rotating the parts of the curves so the don't double back on themselves. Works well so I'm happy with it!
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 9 ·
Replies
9
Views
4K
Replies
86
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K
Replies
1
Views
2K
  • · Replies 6 ·
Replies
6
Views
6K
  • · Replies 22 ·
Replies
22
Views
4K