Inveresely evaluate a sFit Object
3 views (last 30 days)
Show older comments
Andreas Harter
on 6 Jul 2016
Commented: Andreas Harter
on 6 Jul 2016
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
Accepted Answer
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)
See Also
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!