Exponential approximation for vector input

I was double checking the behaviour of a sigmoid function used in my Simulink model and I noticed that I was getting incorrect approximations when I made the computation for a vector of values
vect = [-5.0000 -5.0000 -5.0000 1.0000 0.9000 0.8000 0.7000 -5.0000 -5.0000];
y_vect = 1/(1+exp(-2*(vect'-1)));
% Value calculated using the vector
y_vect(4)
ans = 0
% Value calculated alone
y_val = 1/(1+exp(-2*(vect(4)-1)))
y_val = 0.5000
This approximation in my case causes great confussion due to the magnitude of the quantity expected.
Is there any way to solve this?

 Réponse acceptée

You have overlooked one dot. Here is the corrected commands:
vect = [-5.0000 -5.0000 -5.0000 1.0000 0.9000 0.8000 0.7000 -5.0000 -5.0000];
y_vect = 1./(1+exp(-2*(vect-1)));
% Value calculated using the vector
y_vect(4)
ans = 0.5000
% Value calculated alone
y_val = 1/(1+exp(-2*(vect(4)-1)))
y_val = 0.5000

1 commentaire

Eduardo
Eduardo le 1 Fév 2023
Oh nice to know!
I wrongly thought the broadcasting would be done automatically since we just had a scalar in the numerator

Connectez-vous pour commenter.

Plus de réponses (1)

vect = [-5.0000 -5.0000 -5.0000 1.0000 0.9000 0.8000 0.7000 -5.0000 -5.0000];
Using / (matrix right division), as you have it now:
y_vect = 1/(1+exp(-2*(vect'-1)));
disp(y_vect)
1.0e-05 * 0.6144 0 0 0 0 0 0 0 0
Using ./ (element-wise right division):
y_vect = 1./(1+exp(-2*(vect'-1)));
disp(y_vect)
0.0000 0.0000 0.0000 0.5000 0.4502 0.4013 0.3543 0.0000 0.0000

Produits

Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by