how to find data points of function passed through a distorted

Illustration
mark palmer - 2023-11-08T13:09:04+00:00
Question: how to find data points of function passed through a distorted

This is not going to be your ordinary question, but hopefully somebody can assist me.   I want to take a function of data points, for instance a random set of points ("rnpi" in my code), and fit it to an upper and lower bounding function, such as a pair of sine waves (AS1 and AS2 in my code). The data point locations will be distorted by the waves, so that a straight line will come out curvy, etc. I am including a diagram showing what I want. How do I do this?     iP = [0, 88]; iB = [30, 74]; npi = 200; % SHOULD BE EQUAL TO LENGTH OF RANDOM PATTERN BELOW aa1 = iP(1); % MIN OF RANGE aa2 = iP(2); % MAX OF RANGE ab1 = iB(1); % MIN OF RANGE ab2 = iB(2); % MAX OF RANGE nz1 = 0:pi/npi:4*pi; nz2 = pi + (0:pi/npi:4*pi); nr1 = 3/2; % NUMBER OF REPEATS /2 nr2 = 5/2; % NUMBER OF REPEATS /2 AS1 = (1 + cos(pi + nz1*nr1))/2; % 0-1 AS1 = aa1 + (ab1 * AS1); % aa1-ab1 AS2 = (1 + cos((pi*nr2)-(nz2*nr2)))/2; % 0-1 AS2 = ab2 + ((aa2-ab2) * AS2); % ab1-ab2 plot(AS1) hold on plot(AS2) hold off % NOW TEST WITH A RANDOM PATTERN rnpi = round(88 * rand(npi,1)); % THE REST GOES HERE.....................  

Expert Answer

Profile picture of Prashant Kumar Prashant Kumar answered . 2025-11-20

A difficult question to answer, since so much is left to guess. And the vaguesness of your question suggests all you want is a result that looks qualitatively as you have drawn. Mathematics is not good at subjective things. Sorry.
 
But is is not difficult to do something that looks vaguely as you have drawn, as simply an interpolation between two curves.
 
 
ULim = [74 88];
LLim = [0 30];
XLim = [0 2*pi];

x = linspace(XLim(1),XLim(2));

UpperFcn = @(x) (cos(x)+1)/2*diff(ULim) + ULim(1);
LowerFcn = @(x) (1-(cos(x))/2)*diff(LLim) + LLim(1);

fplot(UpperFcn,XLim)
hold on
fplot(LowerFcn,XLim)

Now just create an interpolated function that trades off the two boundaries.

TFcn = @(x) (x-XLim(1))./diff(XLim);
MidFcn = @(x) (1-TFcn(x)).*UpperFcn(x) + TFcn(x).*LowerFcn(x);
fplot(MidFcn,XLim)
 
 
 
Again, totally subjective. Just a picture that looks vaguely like what you asked about.
 


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!