help-octave
[Top][All Lists]

## Re: Plotting an ELU function with GNU Octave

 From: Brett Green Subject: Re: Plotting an ELU function with GNU Octave Date: Thu, 4 Feb 2021 14:43:00 -0500

On Thu, Feb 4, 2021 at 2:27 PM Alexandru Munteanu <alexandru.munteanu@e-uvt.ro> wrote:
Hello,

I am trying to create plots for an ELU (Exponential Liniear Unit)
funciton. The function is defined as follows:

function e = elu(z, alpha)
if z >= 0
e = z
else
e = alpha * ((exp(z)) - 1)
endif
endfunction

So this is pretty simple so far (alpha is a constant of values 0.01),
and I can test to evaluate it in the interpreter and everything is
working as expected.

However, I want to plot the values of elu(x), where x belongs to the
interval (-5, 5).

function plot_elu
x = -5:0.01:5
y = elu(x, 0.01)

plot(x, y, "linewidth", 5)
set(gca,"fontsize", 25)
axis([-6, 6, -1.2, 1.2])
grid on;
endfunction

This is where the plot goes wrong: it creates the plot as if the values
for elu are all going on the second branch of the if-then-else
statement.

I have attached what the plot looks like. Any help in this direction is appreciated.

--
Alexandru Munteanu

The if statement does not operate elementwise, which is the cause of your problem. The _expression_

y = (x>=0).*x + (x<0).*alpha.*(exp(x)-1)

is essentially an elementwise if-else statement.

Try something more like this.

x = -5:0.01:5
alpha = 0.01
y = (x>=0).*x + (x<0).*alpha.*(exp(x)-1)
plot(x, y, "linewidth", 5)
set(gca,"fontsize", 25)
axis([-6, 6, -1.2, 1.2])
grid on

- Brett Green