MATLAB: Inveresely evaluate a sFit Object

curve fittingCurve Fitting Toolboxfevalsfit

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.

Best Answer

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)