How can I write this exponential function in matlab?

73 Ansichten (letzte 30 Tage)
rohail khan
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?

Akzeptierte Antwort

Walter Roberson
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
rohail khan
rohail khan am 31 Mär. 2018
please can you explain the meaning of : max(x,realmin) in your code
Walter Roberson
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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Rajulapati Naveen
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);

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!

Translated by