% Solving transcendental equations
%
% Carlos R. Paiva
%
% 13 September 2018

% https://en.wikipedia.org/wiki/Omega_constant
% Omega = 0.5671432904097838729999686622103555497538157871865125081351310792230457930866...
% Solving for: x * exp(x) = 1 or, equivalently, x = exp(-x)

format long
Omega = fzero('x*exp(x)-1',0.5)
Y = exp(-Omega);

n_max = 1000;
x_min = 0;  x_max = 1;
y_min = 0;  y_max = 1;

for n = 1:n_max
    aux = (x_max-x_min)*(n-1)/(n_max-1)+x_min;
    x(n) = aux;
    y(n) = exp(-aux);
end

plot(x,x,'b',x,y,'r','LineWidth',2)
axis([x_min x_max y_min y_max])
ax = gca;
ax.FontSize = 24;
ax.Color = [255 255 204]/255;
ax.FontName = 'Times New Roman';
grid on
hold on

plot([0 Omega],[Y Y],'--m','LineWidth',1)
plot([Omega Omega],[0 Y],'--m','LineWidth',1)

plot(Omega,0,'ok','MarkerFaceColor','m','MarkerSize',8)
plot(0,Omega,'ok','MarkerFaceColor','m','MarkerSize',8)
plot(Omega,Omega,'ok','MarkerFaceColor','m','MarkerSize',8)

figure

F = @(Omega) Omega.*exp(Omega)-1;
Omega = fzero(@(Omega) F(Omega),0)

y_min = -1;  y_max = 1.75;

x = linspace(x_min,x_max,n_max);
y = F(x);

plot(x,y,'b','LineWidth',2)
axis([x_min x_max y_min y_max])
ax = gca;
ax.FontSize = 24;
ax.Color = [255 255 204]/255;
ax.FontName = 'Times New Roman';
grid on
hold on

plot([x_min x_max],[0 0],'--m','LineWidth',1)
plot([Omega Omega],[y_min 0],'--m','LineWidth',1)

plot(Omega,y_min,'ok','MarkerFaceColor','m','MarkerSize',8)
plot(x_min,0,'ok','MarkerFaceColor','m','MarkerSize',8)
plot(Omega,0,'ok','MarkerFaceColor','m','MarkerSize',8)
