Effacer les filtres
Effacer les filtres

how define a conditional handle function?

30 vues (au cours des 30 derniers jours)
xosro
xosro le 4 Mai 2017
Commenté : Jan le 8 Mai 2017
As you know, for
f=@(x) sin(x)/x;
we get f(0)=NaN
if we would like get f(0)=0
again with
f=@(x) (x==0)*0+(x~=0)*sin(x)/x;
we will receive f(0)=NaN.
how can i dominate this problem?
  1 commentaire
Adam
Adam le 4 Mai 2017
Modifié(e) : Adam le 4 Mai 2017
Please try to ensure you format your question in a readable way. The
if true
end
lines should not keep appearing around every bit of code. I don't really know why the '{} Code' button is setup to do this as so many people end up with it included in their code. Also don't include the lines of your question in the middle of one large code block - it is very confusing to read and separate out what is actually code and what is part of the question information.
I did the editing for you this time.

Connectez-vous pour commenter.

Réponses (2)

Torsten
Torsten le 4 Mai 2017
Modifié(e) : Torsten le 4 Mai 2017
function main
x = [3 7.5 0 -0.03];
y = f(x)
function y = f(x)
i = find(x==0);
x(i) = 1;
y = sin(x)./x;
y(i) = 0;
end
Best wishes
Torsten.
  3 commentaires
Jan
Jan le 4 Mai 2017
Modifié(e) : Jan le 4 Mai 2017
Or a little bit simpler:
function y = f(x)
y = sin(x) ./ x;
y(x==0) = 0;
end
@xosro: Do not confuse a "handle function" with an "anonymous function", which is accessed by a "function handle".
Torsten
Torsten le 4 Mai 2017
Modifié(e) : Torsten le 4 Mai 2017
My guess is that this function cannot be defined as a "one-liner" as
f=@(x)....
Best wishes
Torsten.

Connectez-vous pour commenter.


Jan
Jan le 4 Mai 2017
Modifié(e) : Jan le 4 Mai 2017
A function (see Torsten's answer) will be nicer and more efficient than an anonymous function. But if you realy have any good reasons:
f = @(x) sin(x) / [Inf(x==0), x(x~=0)];
This works for scalar x only. This would be better, because it is immediately clear, what it does:
function y = f(x)
y = sin(x) ./ x;
y(x==0) = 0;
end
  7 commentaires
xosro
xosro le 5 Mai 2017
@Jan Simon: Ok, "nested function" is a good idea, but for using variables as inputs, i had some limitation so i have used "global variables" for using variables between scripts.
Thank you and other dears
Jan
Jan le 8 Mai 2017
Avoid global variables. They cause more troubles than they solve. If you do not want to provide too many arguments, store them in a struct.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Performance and Memory dans Help Center et File Exchange

Tags

Aucun tag saisi pour le moment.

Community Treasure Hunt

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

Start Hunting!

Translated by