A problem with function handle
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Mohammad Shojaei Arani
el 6 de Nov. de 2022
Comentada: Mohammad Shojaei Arani
el 6 de Nov. de 2022
Hello,
I have a simple problem but I do not understand why function handle behaves like this!!! I explain by a simple example in bellow:
>> x1=linspace(-pi,pi,20);y1=sin(x1);f=@(x)interp1(x1,y1,x);f(5)
ans =
NaN
which makes sense. But, when I type
>> x1=linspace(-pi,pi,20);y1=sin(x1);f=@(x)interp1(x1,y1,x).*(x>=-pi & x<=pi)+0.*(x<-pi | x>pi);f(5)
ans =
NaN
and this does not make sense to me.
Any idea?
Thanks in advance,
Babak
0 comentarios
Respuesta aceptada
John D'Errico
el 6 de Nov. de 2022
Editada: John D'Errico
el 6 de Nov. de 2022
NaNs are like wire coathangars, they multiply. Or perhaps evil zombies is a better description. They slime everything they touch, turning everything into new NaNs, propagating NaNs almost everywhere. Evil indeed. ;-)
For example, NaN plus ANYTHING = NaN.
NaN + 2
NaN times ANYTHING = NaN. Even zero.
NaN*0
So what did you do? You were hoping the trick of putting a test inline, that a multiply by zero would kill off the NaNs? Yeah, right. The zombies still survived.
Instead, you do have an option. Read the help for interp1!
x1=linspace(-pi,pi,20);
y1=sin(x1);
extrapval = 42;
f=@(x)interp1(x1,y1,x,[],extrapval);
f(5)
I cannot understand why interp1 uses NaN as the default for extrapolation, as 42 has been proven to be the answer to all questions. But if you really want zero to be returned, you can tell interp1 to do that too.
2 comentarios
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!