Needing help fitting a parametric path to a surface defined by noisy X Y Z data (better explanation)

Hi - this request for help continues from the Igor List (which seems to be down at the moment). In brief, I have a sparse 3D data set (xwave, ywave, zwave). Each point (xyz co-ordinate) falls upon a single surface (but the data is noisy in the z dimension). I need to fit a line-path that falls upon this surface and passes through a known point. The line-path is defined by two equations: y=f(x) and z=g(x), and I need to simultaneously fit these two functions so that the resulting path through xyz space falls upon the surface defined by my xyz data. This kind of function fitting problem does not seem to conform to 'standard' fitting procedures available in Igor. I therefore need help working out how to do it.

I've had problems describing my problem in such a way that people can understand what I'm trying to do. To assist, I've put together a graphic which explains things a more clearly (I hope). To access this graphic, please go to http://www.box.net/shared/7prtbkil0q This link takes you to a 1.1 MByte .jpg file I've uploaded to the file-sharing website called simply 'Box' (www.box.net). This is a safe site, and I can guarantee that the jpg file is free of nasties.

I would appreciate any input from anyone. The schematic shows all of what I'm trying to do, and I think that there might be a much easier/mathematically elegant way of doing what I'm attempting.

Thank you very much for your help!

Cheers,

Dan Sinclair
Neat problem!

Just a thought -- using the fit to slope as a boundary constraint is, if I understand, constraining the curvature across the entire ring based on the curvature(s) of a (sometimes limited) segment. From the dispersal of curvatures I see for many of the partial rings, I wonder whether this fitting method might eventually prove too unreliable.

Even though you cannot see entire rings, can you assign each (or some of them) segments to a "sequence number" in order from inner to outer? Then, you might be able to fit segments belonging to the same "sequence number" that go partially around in more than one location. On hand the completed set of fitted rings, set "artificial" data points at random theta locations between those completed rings, constraining the r values to be between the innermost and outermost defined ring position for that given (as yet incomplete ring) sequence number. Then, fit to the partial rings segments + artificial data points.

In other words, rather than trying to use the slope of a partial ring segment as a guide to where the rest of that ring segment should be going, use (r,theta) positions of two neighboring (inner- and outer-most), already well-defined and complete rings as clear constraints on where it must not go. The problem then becomes one of sequentially defining complete rings as boundaries for the bordering incomplete ones, then "filling in the gaps" with the partials.

--
J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAH
Wow, Dan. I guess you can console yourself with the thought that you needed to write all that anyway for the publication...

What you're asking for isn't an implicit fit; Igor can do that (FuncFit/ODR=3). This is called "multi-response modelling" in some circles. The ODRPACK fitting package that supports Igor's ODR fitting actually does support this, but I haven't implemented access to it. Darn.

It occurs to me that you can use the technique described in technote PTN002 complex fit. A fit to complex data is just a special case of multi-response fitting. And since you want just two values, you can think of your y and z as real and imaginary parts.

Find technotes in the Igor Pro folder, in Technical Notes:Igor Pro Tech Notes:.

John Weeks
WaveMetrics, Inc.
support@wavemetrics.com