How can I write this exponential function in matlab?
73 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
rohail khan
am 28 Mär. 2018
Kommentiert: Walter Roberson
am 23 Nov. 2021
hi, please can anyone help me write the following functions in matlab?
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 28 Mär. 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 Kommentare
Walter Roberson
am 31 Mär. 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.
Weitere Antworten (1)
Rajulapati Naveen
am 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 Kommentar
Walter Roberson
am 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
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!