Drexel dragonThe Math ForumDonate to the Math Forum



Search All of the Math Forum:

Views expressed in these public forums are not endorsed by Drexel University or The Math Forum.


Math Forum » Discussions » Software » comp.soft-sys.matlab

Topic: optimization of fiber bragg grating using nelder-mead simplex algoritm
Replies: 4   Last Post: Apr 5, 2013 6:22 PM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View   Messages: [ Previous | Next ]
kuffal al

Posts: 2
Registered: 4/4/10
optimization of fiber bragg grating using nelder-mead simplex algoritm
Posted: Apr 4, 2010 10:54 AM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

can someone help me to optimize the fiber bragg grating(fbg) using nelder mead simplex algoritm. i have both codes (both codes working well) the fbg n nelder mead but i fail to integrate them. the parameter that i want to optimize are the length (L), period (A) and the induced index change (dn). so here are the codes

(1)the fbg code
%==========================================================================
% matlab script for solving the coupled-mode equation using
% the transfer matrix method
%==========================================================================

clear all
close all
clc

%==========================================================================
% fibre simulation parameters
%==========================================================================

L = 0.0100; % Grating Length

dn = 1.0e-4; % Induced index change

design_lambda = 1550e-9; % design wavelength

%==========================================================================
% finding neff(effective reflective index) for the designed fibre
%==========================================================================

format long
n=40;
a=0.5;
increment=2;
tolerance=1e-4;

nco=1.447; % nco-core index
ncl=1.444; % ncl-cladding index
xstart=((ncl-0.0112)+nco)/2;
x=xstart;
dx=increment;

%==========================================================================
% to find the root of neff(effective reflective index)
%==========================================================================


for m=1:n
neff= sqrt((ncl^2)+(a*x)*(nco^2-ncl^2));
while dx/x>tolerance
if neff~=sqrt((ncl^2)+(a*(x+dx))*(nco^2-ncl^2));
dx=dx/2;
else
x=x+dx;
end
end
route(m)=x;
dx=increment;
x=1.0001*x;
end

neff=route(40:end);

V =(2*pi/design_lambda)*a*sqrt(nco^2-ncl^2); % normalize frequency

A=design_lambda/(2*neff); % Grating period 5.36e-7;

lambda=(1549.50e-9:0.005e-9:1550.50e-9); % Spectra range


%==========================================================================
% Coupled-mode Theory
%==========================================================================

v=1; % visibility, v assumed to be 1

k=(pi./lambda)*v*dn; % AC coupling coefficient

% DC(period averaged) coupling coefficient

% for stronger grating, sigma_dc assumed to be 0

sigma_dc =0; %(2*pi./lambda).*dn;

% general DC coupling coefficient

sigma = 2*pi*neff.*(1./lambda - 1/(2*neff*A)) + sigma_dc;


%==========================================================================
% Power Reflection coefficients(R)
%==========================================================================

K2 = k.*k;

sigma2 = sigma.*sigma;

difference = K2-sigma2;

up = sinh(L*sqrt(difference)).^2;

down = cosh(L*sqrt(difference)).^2 - sigma2./K2;

R = up./down;

Rt = transpose(R);

%==========================================================================
% saving the points
%==========================================================================

save 'fileToRead1.txt' Rt -ascii

%==========================================================================
% plots for reflection spectra for Bragg reflector
%==========================================================================

figure(1)

plot(lambda,R,'b');

axis( [1549.50e-9, 1550.50e-9, 0, 1]);

title('Reflection Spectra of Bragg grating');

xlabel('Wavelength(m)');

ylabel('Reflectivity(p.u)');

figure(2)
stairs(lambda,R,'r');figure(gcf)
axis( [1549.50e-9, 1550.50e-9, 0, 1]);

--------------------------------------------------------------------------------------------------------------------

(2) the nelder-mead code

%*******************************************
%* Nelder and Mead Technique *
%* Siamak Faridani *
%* University of Oklahoma *
%* 16 Oct 2005 *
%* www.PitchUp.com *
%*******************************************


clc;
clear all;
close all;
N=2;
alpha=2;
beta=.25;
gamma=2.5;
Precision=.00001

%Insert your starting point and the function here
x01=1.5505*1e-6;
x02=1.550e-6;
func=@Modified_fbg


%do not modify the following lines
%==============================

x=[[x01,x02]];



delta1=(((N+1)^.5+N-1)/(N*sqrt(2)))*alpha;

delta2=(((N+1)^.5-1)/(N*sqrt(2)))*alpha
x=[x;[x(1,1)+delta1,x(1,2)+delta2];[x(1,1)+delta2,x(1,2)+delta1]];
x_archive=[x [func(x(1,1),x(1,2));func(x(2,1),x(2,2));func(x(3,1),x(3,2))]];
l=0
x
disp('start================');
Precision_inverse=Precision^-1;
while ~(isequal(round(x(1,:)*Precision_inverse),round(x(2,:)*Precision_inverse),round(x(3,:)*Precision_inverse)))
l=l+1;
values=[func(x(1,1),x(1,2));func(x(2,1),x(2,2));func(x(3,1),x(3,2))];

sorted=[find(values==max(values)),6-find(values==max(values))-find(values==min(values)),find(values==min(values))];
xc=(1/N)*(x(sorted(1,2),:)+x(sorted(1,3),:));
disp('trying Normal Reflection');
xnew=x(sorted(1,1),:)+(1+alpha)*(xc-x(sorted(1,1),:))
isitok=0;
func(xnew(1,1),xnew(1,2))
while isitok==0

if ((func(xnew(1,1),xnew(1,2))>values(sorted(1,3),:)) && (func(xnew(1,1),xnew(1,2))<values(sorted(1,2),:)))
disp('f(l)<f(x_new)<f(g)')
isitok=1;
elseif (func(xnew(1,1),xnew(1,2))<values(sorted(1,3),:))
disp('lets Expand...');
xnew1=x(sorted(1,1),:)+(1+gamma)*(xc-x(sorted(1,1),:))
func(xnew1(1,1),xnew1(1,2))
if (func(xnew1(1,1),xnew1(1,2))<func(xnew(1,1),xnew(1,2)))
xnew=xnew1
end
isitok=1;
elseif (func(xnew(1,1),xnew(1,2))>values(sorted(1,2),:)) && (func(xnew(1,1),xnew(1,2))>values(sorted(1,1),:))
disp('lets Contract with teta=-beta...');
xnew1=x(sorted(1,1),:)+(1-beta)*(xc-x(sorted(1,1),:))
func(xnew1(1,1),xnew1(1,2))
if (func(xnew1(1,1),xnew1(1,2))<func(xnew(1,1),xnew(1,2)))
xnew=xnew1
end
isitok=1;
elseif (func(xnew(1,1),xnew(1,2))>values(sorted(1,2),:)) && (func(xnew(1,1),xnew(1,2))<values(sorted(1,1),:))
disp('lets Contract with teta=beta...');
xnew1=x(sorted(1,1),:)+(1+beta)*(xc-x(sorted(1,1),:))
func(xnew1(1,1),xnew1(1,2))
if (func(xnew1(1,1),xnew1(1,2))<func(xnew(1,1),xnew(1,2)))
xnew=xnew1
end
isitok=1;
end
end
x(sorted(1,1),:)=xnew;
x
disp('Finished================');
x_archive=[x_archive;[x [func(x(1,1),x(1,2));func(x(2,1),x(2,2));func(x(3,1),x(3,2))]]];
end

subplot(1,2,1)
plot(x_archive(:,1),x_archive(:,2),'o-r')
subplot(1,2,2)
patch(x_archive(:,1),x_archive(:,2),x_archive(:,3),'r')
view(3)

values=[func(x(1,1),x(1,2));func(x(2,1),x(2,2));func(x(3,1),x(3,2))];

sorted=[find(values==max(values)),6-find(values==max(values))-find(values==min(values)),find(values==min(values))];
disp(sprintf('Number of iteration= %10d\n',l))
disp(sprintf('minimum of f(x) is %10.5f that occurs at x=[%10.5f,%10.5f]\n',min(values),x(find(values==min(values)),1),x(find(values==min(values)),2)))



Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© Drexel University 1994-2014. All Rights Reserved.
The Math Forum is a research and educational enterprise of the Drexel University School of Education.