Substituting a number for NaN in anonymous function
8 views (last 30 days)
I'm trying unsuccessfully to substitute a number for NaN in anonymous function. Here it's an example of the problem. Bear with it's silliness please:
g=@(x) (~isnan(f(x))).*f(x) + (isnan(f(x))).*1;
I'd expect that g(0)=1, but it's still NaN. What is wrong in the way that I defined g?
Alfonso Nieto-Castanon on 13 Jan 2015
Edited: Alfonso Nieto-Castanon on 13 Jan 2015
There may be "cleaner" ways to do this but one possibility would be:
g = @(x) [f(x) 1]*sparse(1+isnan(f(x)),1,1,2,1);
EDIT: and as others have pointed out the problem with your original g function is that, when f(x) is NaN, you get 0*NaN + 1*1 which still evaluates to NaN...
More Answers (2)
Star Strider on 13 Jan 2015
If you want to define L’Hospital’s rule, you have to define it specifically. In the IEEE standard that MATLAB implements, 0/0 is NaN.
See if this works in your application:
n = @(x) 2.*x; % Numerator Function
d = @(x) x; % Denominator Function
Lh = @(n,d,x) (n(x+1E-12)-n(x)) ./ (d((x+1E-12)-d(x))); % L’Hospital’s RUle
Lh0 = Lh(n,d,0) % Evaluating AT 0
Lh2 = Lh(n,d,2) % Evalutaing At 2