⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snyder.m

📁 implementation of a formula
💻 M
字号:
function snyder(action);

%==========================================================================
% Program de reprezentare grafica a amplitudinii modului de dispersie LP01
% viteza de faza si viteza de grup
% nume fisier:         c:\matlab65\work\snyder.m
% autor:               cristiana crisan, mm1
% data/versiunea:      23.05.08, v. 1.0
%==========================================================================

if nargin < 1
    action = 'start';
end;

% declar variabilele programului
%==========================================================================
global V_val V_text
global a_text a_val a_slider
global n1_text n1_val n1_slider
global n2_text n2_val n2_slider
global NA_val NA_text
global ro_val ro_text
global vf_text vf_val vg_text vg_val
global lambda_text lambda_list lambda_val l_val
global r % vector de pozitie, se folos in combinatia r/a
%==========================================================================

if strcmp(action,'start')

%initializez pagina grafica
%==========================================================================
figNumber = figure;
set(gcf,'color','w','NumberTitle','off','Name',...
    'Dispersia modala cu aproximare Snyder','Backingstore','off','Units',...
    'normalized');
%==========================================================================

% informatii de pozitionare/marime pentru toate butoanele
%==========================================================================
bottom = 0.375;
left = 0.001;
btnWid = 0.1;
btnHt = 0.03;
btnSpacing = 0.075;
%==========================================================================

% creare butoane
%==========================================================================
% creez caseta text pentru raza miezului, a
labelPos = [left bottom+4*btnHt+3.9*btnSpacing btnWid btnHt];
a_text = uicontrol('Style','text','Units','normalized','Position',labelPos,...
    'Backgroundcolor','w','Foregroundcolor','r','String','a[um]= 1');
%==========================================================================

% creez caseta de introducere numar pentru raza miezului, a
labelPos = [left+btnWid bottom+4*btnHt+4*btnSpacing btnWid*1.5 btnHt];
a_slider = uicontrol('Style','slider','Units','normalized','Position',labelPos,...
   'Callback','snyder(''value'')','value',1,...
  'min',1,'max',50,'sliderstep',[1/(50-1) 0.1]);
%==========================================================================

% creez caseta text pentru lungimea de unda, lambda
labelPos = [left bottom+4*btnHt+3*btnSpacing btnWid btnHt];
lambda_text = uicontrol('Style','text','Units','normalized','Position',labelPos,...
    'Backgroundcolor','w','Foregroundcolor','r','String','l[nm]= 850');
%==========================================================================

% creez caseta de alegere numar pentru lungime de unda, lambda
labelPos = [left+btnWid bottom+4*btnHt+3*btnSpacing btnWid btnHt*1.4];
lambda_list = uicontrol('Style','list','Units','normalized','Position',labelPos,...
    'Backgroundcolor','w','Foregroundcolor','r','String','850|1300|1550',...
    'Callback','snyder(''value'')');
%==========================================================================

% creez caseta text pentru indicele de refractie al miezului, n1
labelPos = [left bottom+4*btnHt+2*btnSpacing btnWid btnHt];
n1_text = uicontrol('Style','text','Units','normalized','Position',labelPos,...
    'Backgroundcolor','w','Foregroundcolor','r','String','n1= 1');

%==========================================================================

% creez caseta de introducere numar pentru indicele de refractie al miezului, n1
% conform legii RTI(reflexiei totale interne) n1>n2
labelPos = [left+btnWid bottom+4*btnHt+2*btnSpacing btnWid*1.5 btnHt];
n1_slider = uicontrol('Style','slider','Units','normalized','Position',labelPos,...
    'callback','snyder(''value'')','value',...
   1,'min',0.11,'max',8,'sliderstep',[0.1/(8-0.1) 0.1]);
n1_val=get(n1_slider,'value');
%==========================================================================

% creez caseta text pentru indicele de refractie al invelisului, n2
labelPos = [left bottom+4*btnHt+btnSpacing btnWid btnHt];
n2_text = uicontrol('Style','text','Units','normalized','Position',labelPos,...
    'Backgroundcolor','w','Foregroundcolor','r','String','n2= ');
%==========================================================================

% creez caseta de introducere numar pentru indicele de refractie al
% invelisului, n2
labelPos = [left+btnWid bottom+4*btnHt+btnSpacing btnWid*1.5 btnHt];
n2_slider = uicontrol('Style','slider','Units','normalized','Position',labelPos,...
    'callback','snyder(''value'')','value',...
     0.9,'min',0.1,'max',n1_val-0.1,'sliderstep',[0.1/(n1_val-0.10) 0.1]);
n2_val=get(n2_slider,'value');
txt = strcat('n2= ', num2str(n2_val));
set(n2_text,'String',txt);
%==========================================================================

% calculez valori pe baza celor introduse
%==========================================================================

% creez caseta text pentru apertura numerica, NA
labelPos = [left bottom+4*btnHt 2*btnWid btnHt];
NA_text = uicontrol('Style','text','Units','normalized','Position',labelPos,...
    'Backgroundcolor','w','Foregroundcolor','r','String','NA= ');
%==========================================================================

% creez caseta text pentru frecventa normalizata, V
labelPos = [left bottom+3*btnHt 2*btnWid btnHt];
V_text = uicontrol('Style','text','Units','normalized','Position',labelPos,...
    'Backgroundcolor','w','Foregroundcolor','r','String','V= ');
%==========================================================================

% creez caseta text pentru extensia modala, ro
labelPos = [left bottom+2*btnHt 2*btnWid btnHt];
ro_text = uicontrol('Style','text','Units','normalized','Position',labelPos,...
    'Backgroundcolor','w','Foregroundcolor','r','String','ro= ');
%==========================================================================

% creez caseta text pentru viteza de faza, vf
labelPos = [left bottom+btnHt 2*btnWid btnHt];
vf_text = uicontrol('Style','text','Units','normalized','Position',labelPos,...
    'Backgroundcolor','w','Foregroundcolor','r','String','vf= ');
%==========================================================================

% creez caseta text pentru viteza de grup, vg
labelPos = [left bottom 2*btnWid btnHt];
vg_text = uicontrol('Style','text','Units','normalized','Position',labelPos,...
    'Backgroundcolor','w','Foregroundcolor','r','String','vg= ');
%==========================================================================


%push button pt graficul aproximarii gaussiene a campului modal
labelPos = [left+btnWid/2 3*btnSpacing btnWid*2.2 btnHt*1.4];
h = uicontrol('style','pushbutton','units','normalized','position',...
        labelPos, 'string','Camp modal gaussian','foregroundcolor','black','callback',...
        'snyder(''grafic1'')');
%==========================================================================

%push button pt graficul amplitudinii campului E
labelPos = [left+btnWid/2 2*btnSpacing btnWid*2.2 btnHt*1.4];
h = uicontrol('style','pushbutton','units','normalized','position',...
        labelPos, 'string','Amplitudinea |E|','foregroundcolor','black','callback',...
        'snyder(''grafic2'')');
%==========================================================================

%push button help
labelPos = [left+btnWid/2 btnSpacing btnWid btnHt*1.4];
h = uicontrol('style','pushbutton','units','normalized','position',...
        labelPos, 'string','Help','foregroundcolor','black','callback',...
        'helpwin(''help'')');
%==========================================================================

%push button exit
labelPos = [left+1.7*btnWid btnSpacing btnWid btnHt*1.4];
h = uicontrol('style','pushbutton','units','normalized','position',...
        labelPos, 'string','Exit','foregroundcolor','black','callback',...
        'snyder(''exit'')');
%==========================================================================


elseif strcmp(action,'value')
    a_val=get(a_slider,'value');
    n1_val=get(n1_slider,'value');
    n2_val=get(n2_slider,'value');
    lambda_val=get(lambda_list,'value');
    if lambda_val==1
            l_val=850 ;
        elseif lambda_val==2
            l_val=1300;
        elseif lambda_val==3
            l_val=1550; 
        end;
    
    NA_val=sqrt(abs(n1_val^2-n2_val^2));
    V_val=a_val*2*pi*10^3*NA_val/l_val;
    ro_val=a_val/sqrt(log(V_val));
    vf_val=2*pi*3*10^8/(n1_val*l_val);
    vg_val=n1_val^2/(3*10^8);
    
    txt = strcat('V= ', num2str(V_val));
    set(V_text,'String',txt);
    
    txt = strcat('ro= ', num2str(ro_val));    
    set(ro_text,'String',txt);

    txt = strcat('NA= ', num2str(NA_val));
    set(NA_text,'String',txt);
    
    txt = strcat('a[um]= ', num2str(a_val));
    set(a_text,'String',txt);
    
    txt = strcat('l[nm]= ', num2str(l_val));
    set(lambda_text,'String',txt);
    
    txt = strcat('n1= ', num2str(n1_val));
    set(n1_text,'String',txt);
    set(n2_slider,'max',n1_val-0.01);
    if n1_val<=n2_val
        set(n2_slider,'value',n1_val-0.1);
        set(n2_slider,'sliderstep',[0.1/(n1_val-0.1) 0.1]);
    end;
        
    txt = strcat('n2= ', num2str(n2_val));
    set(n2_text,'String',txt);
    
    txt = strcat('vf= ', num2str(vf_val));
    set(vf_text,'String',txt);
    
    txt = strcat('vg= ', num2str(vg_val));
    set(vg_text,'String',txt);

    
    
elseif strcmp(action,'grafic1')
    r=0:0.001:3*a_val;
    set(gca,'units','normalized','position',[0.4 0.2 0.6 0.6]);
    p1 = plot(r/a_val,exp(-r.^2/abs(ro_val.^2)));
    xlabel('r/a');
    ylabel('psi_0 gaussian');   
    title('Aproximarea gaussiana a campului modal');
 
elseif strcmp(action,'grafic2')
    x=-10*pi:0.01:10*pi;
    set(gca,'units','normalized','position',[0.4 0.2 0.6 0.6]);
    p2=plot(x,sin(x)./x);
    xlabel('x=(t-beta^|*z)delta-omega/2');
    ylabel('Re|E|'); 
    axis([-35 35 -1 1]);
    title('Amplitudinea |E| a campului modal');
   
elseif strcmp(action,'exit')
    close all
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -