Inveresely evaluate a sFit Object

3 views (last 30 days)
I have the following for-loop
for i=0:0.001:4000;
if feval(sFit,2,i) <= 0.9
currentY = i;
break;
end
end
returnValue = feval(sFit,2,currentY+20);
I'm evaluating an sFit-Object inversely for a z = 0.9 and x = 2 to get the y-value. (The sFit is monotonically decreasing with x and y). After the Loop, I evaluate the sFit-object "conventially" with X and Y to get Z as a result.
Unfortunately this takes forever to compute, as the feval-function is called many times.
Is there any way to inversely evaluate a sfit-object quicker? I want to get the y-value for given z and x-values immediately, without any loop.
  2 Comments
José-Luis
José-Luis on 6 Jul 2016
What is it you are trying to achieve?
Andreas Harter
Andreas Harter on 6 Jul 2016
The z-values range from 0 to 1 and describe a degeneration process. Depending on the input values of x and y the degeneration is stronger or weaker. The sFit-Object is a surface-Fit of Lab-Data that I use as a look-up-table for my real-time-inputs of x and y.

Sign in to comment.

Accepted Answer

Steven Lord
Steven Lord on 6 Jul 2016
Use fzero. In this example, when fzero finds a zero of myfun that value of y will satisfy sf(0.5, y) - 1 = 0 or sf(0.5, y) = 1.
% Sample data
[x, y, z] = peaks;
% Perturb the Z data slightly
z = z + rand(size(z));
% Create a surface fit object
sf = fit([x(:) y(:)], z(:), 'poly22');
% Create the function on which fzero will operate
myfun = @(y) sf(0.5, y)-1;
% Call fzero with an initial guess of y = 2.
desiredY = fzero(myfun, 2);
% Check by evaluating the fit
shouldBeEqualTo1 = sf(0.5, desiredY)

More Answers (0)

Categories

Find more on Interpolation in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!