How can I write this exponential function in matlab?
74 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
rohail khan
le 28 Mar 2018
Commenté : Walter Roberson
le 23 Nov 2021
hi, please can anyone help me write the following functions in matlab?
0 commentaires
Réponse acceptée
Walter Roberson
le 28 Mar 2018
f = @(x) exp(-x.^2/4) .* cos(2*pi*x);
g = @(x) exp(x) .* (x <= 0) + sin(2*pi*x)./max(x,realmin) .* (x>0);
3 commentaires
Walter Roberson
le 31 Mar 2018
Suppose x is 0 exactly. Then sin(2*pi*x)/x would be 0/0 which would be NaN. The (x>0) after that would multiply the NaN by 0, but NaN times anything is NaN, so you cannot use logical computations like this to mask out a NaN result.
Instead you need to avoid the NaN result. One way of doing that is to detect that you are dividing by 0 and to substitute a different value that is not 0.
The expression max(x,realmin) is equivalent to a vectorized version of
if x <= realmin
temp = realmin;
else
temp = x;
end
realmin is about 1E-308 -- a very small value but not 0. So max(x,realmin) substitutes the positive value realmin for all negative and 0 values, which is enough to prevent division by 0.
Another way of coding it would have been
sin(2*pi*x)./(x + (x == 0)) .* (x>0);
x == 0 would be 0 for all non-zero x and so would not change any x that was not 0. x == 0 would be 1 for x of 0, so for the case of any non-zero value (x+(x==0)) would be the same as the value and for zero exactly it would be 1, thereby preventing division by 0.
Plus de réponses (1)
Rajulapati Naveen
le 23 Nov 2021
f = @(x) exp(-x.^2/4) .* cos(2*pi*x); g = @(x) exp(x) .* (x <= 0) + sin(2*pi*x)./max(x,realmin) .* (x>0);
1 commentaire
Walter Roberson
le 23 Nov 2021
What difference is there between that and what I posted https://www.mathworks.com/matlabcentral/answers/391290-how-can-i-write-this-exponential-function-in-matlab#answer_312468
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!