Other alternative to sym for compiler

1 view (last 30 days)
Hi everyone.
I am creating a GUI program. I chose a vector lambda and found 2 vector wich variable is lambda.
To to this I use sym. I creat an equation and matlab derive it analytically twice.
But when I want to creat an exe. with the compiler, sym can't be use....Do you know an alternative?
The first I know is to do numerical derivation, but their is a loose of precision.
Regards
function Simu
close all
% f=figure('units','normalized','outerposition',[0 0 1 1]);
% f=figure('WindowState','fullscreen');
f=figure,
set(gcf,'position',[100 100 500 500])
%%%%%%%%%%%%%%%%%%%Laser param
dim = [.2 .5 .3 .3];
Lx=0.5
Ly=1/12
str = 'Thickness[nm]';
annotation('textbox','String',str,'FitBoxToText','on','Position',[0.0 0.95-2*Ly Lx 2*Ly]);
edit1= uicontrol( 'Style', 'edit','Units', 'normal','Position',[0.0 0.95-2*Ly Lx Ly],'FontSize', 15,'BackgroundColor', 'white',...
'String','680');
str2 = 'Radius[µm]';
annotation('textbox',dim,'String',str2,'FitBoxToText','on','Position',[0.0+Lx 0.95-2*Ly Lx 2*Ly]);
edit2= uicontrol( 'Style', 'edit','Units', 'normal','Position',[0.0+Lx 0.95-2*Ly Lx Ly],'FontSize', 15,'BackgroundColor', 'white',...
'String','28');
str3 = 'Lambda_{ini}[nm]';
annotation('textbox',dim,'String',str3,'FitBoxToText','on','Position',[0.0 0.95-4*Ly Lx 2*Ly]);
edit3= uicontrol( 'Style', 'edit','Units', 'normal','Position',[0.0 0.95-4*Ly Lx Ly],'FontSize', 15,'BackgroundColor', 'white',...
'String','800');
str4 = 'Lambda_{end}[nm]';
annotation('textbox',dim,'String',str4,'FitBoxToText','on','Position',[0.0+Lx 0.95-4*Ly Lx 2*Ly]);
edit4= uicontrol( 'Style', 'edit','Units', 'normal','Position',[0.0+Lx 0.95-4*Ly Lx Ly],'FontSize', 15,'BackgroundColor', 'white',...
'String','1200');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
str9 = 'Gas';
annotation('textbox',dim,'String',str9,'FitBoxToText','on','Position',[0.0 0.95-6*Ly Lx 2*Ly]);
edit9= uicontrol( 'Style', 'edit','Units', 'normal','Position',[0.0 0.95-6*Ly Lx Ly],'FontSize', 15,'BackgroundColor', 'white',...
'String','0');
listbox1 = uicontrol('Style','listbox','Units', 'normal','Position',[0.0 0.95-6*Ly Lx Ly],'Max',6,'String',{'Air';'Argon';'Xenon'}) ;
str10 = 'P(bar)';
annotation('textbox',dim,'String',str10,'FitBoxToText','on','Position',[0.0+Lx 0.95-6*Ly Lx 2*Ly]);
edit10= uicontrol( 'Style', 'edit','Units', 'normal','Position',[0.0+Lx 0.95-6*Ly Lx Ly],'FontSize', 15,'BackgroundColor', 'white',...
'String','1');
str11 = 'Number of point ';
annotation('textbox',dim,'String',str11,'FitBoxToText','on','Position',[0.0 0.95-8*Ly Lx 2*Ly]);
edit11= uicontrol( 'Style', 'edit','Units', 'normal','Position',[0.0 0.95-8*Ly Lx Ly],'FontSize', 15,'BackgroundColor', 'white',...
'String','200');
PushButton = uicontrol(gcf,'Style', 'push', 'String', 'Run','Units', 'normal','Position',[0.0 0.95-10*Ly Lx 2*Ly],'CallBack', @PushB);
PushButton2 = uicontrol(gcf,'Style', 'push', 'String', 'Stop','Units', 'normal','Position',[0.0 0.95-12*Ly Lx 2*Ly],'CallBack', @endLoop);
function endLoop(hObject,eventdata,handles)
handles.endLoop=true;
guidata(hObject, handles);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [] = PushB(hObject,eventdata,handles)
% val = str2num(char(get(edit11,'String')));
edi1 = str2num(char(get(edit1,'String')));
edi2 = str2num(char(get(edit2,'string')));
edi3= str2num(char(get(edit3,'string')));
edi4 =str2num(char(get(edit4,'string')));
edi9 =str2num(char(get(edit9,'string')));
edi10 = str2num(char(get(edit10,'string')));
edi11 = str2num(char(get(edit11,'string')));
index_selected = get(listbox1,'Value');
list = get(listbox1,'String');
gas = list{index_selected};
gas;
%%
a=2.405*2.405;
c=3e8;
rc=edi2.*1e-6; %en m
t=edi1.*1e-9;% en m
n_g=1.45;
Pression_bar=edi10;
Pression_Pa=Pression_bar*1e5; %%%%% (Pa) %%%%%%%
Pression_atm=101325;
pgas=Pression_bar *1e5;
nbr=edi11;
L_start=edi3 ;
L_stop= edi4 ;
A1=0.05792105;
A2=238.0185;
B1=0.00167917;
B2=57.362;
C1=0;
C2=0;
lamb = sym('lamb') ;
ngas= 1 + pgas/101325.* ( (A1 ./ (A2-(lamb.*1e6).^-2) ) + (B1 ./ (B2-(lamb.*1e6).^-2) ) + (C1 ./ (C2-(lamb.*1e6).^-2) )); %ARGON
epsi= n_g.^2 ./ ngas.^2;
k_0= 2*pi./(lamb);
phi = k_0*t* sqrt(n_g.^2-ngas.^2) ;
A=a./( 2.*ngas .*(k_0.*rc).^2);
B=a./ ( ngas.^2 .*(k_0.*rc).^3 );
C = epsi;
D = 0.5 .* (C+1) ./ sqrt(C-1);
nef= ngas - A - B.*D.*cot(phi);
dn = diff(nef,lamb);
dn2 = diff(dn,lamb);
dn3 = diff(dn2,lamb);
beta2=lamb.^3.*dn2./(2*pi*c.^2);
beta3=-lamb.^4./(2*pi*c).^2 .*(3.*dn2./c + lamb.*dn3./c);
lambb=linspace(800,1200,nbr).*1e-9;
tic
h=waitbar(0, ['Number of point computed :' num2str(0) '/' num2str(nbr)]);
for i=1:length(lambb)
% close (h)
GVD(i)=double(subs(beta2,lambb(i)));
TOD(i)=double(subs(beta3,lambb(i)));
NEFF(i)=double(subs(nef,lambb(i)));
waitbar(i./length(lambb),h,['Number of point computed :' num2str(i) '/' num2str(nbr)])
hold on
end
figure
plot(lambb.*1e9,GVD.*1e30)
title('GVD [fs²/m]')
xlabel('Wavelength (nm)')
ylabel('GVD (fs²/m)')
figure, plot(lambb.*1e9,TOD.*1e45)
title('TOD [fs^{3}/m]')
xlabel('Wavelength (nm)')
ylabel('TOD (fs^{3}/m)')
toc
ALLDATA(:,1)=lambb.*1e9;
ALLDATA(:,2)=NEFF;
ALLDATA(:,3)=GVD.*1e30;
ALLDATA(:,4)=TOD.*1e45;
text= {'Lambda (nm)','Neff','GVD (fs²/m)','TOD (fs^{3}/m'};
ALLDATA2=[text ; num2cell(ALLDATA)];
Filename=datestr(now,'mmmm-dd-yyyy HH-MM');
Filename= ['R=' num2str(edi2) 'µm-t=' num2str(edi1) 'nm-' num2str(edi10) 'bar-' gas ];
writecell(ALLDATA2, [Filename '.txt'])
end
end

Accepted Answer

Walter Roberson
Walter Roberson on 17 Dec 2019
You do not need to compile the symbolic toolbox for your purpose, as the form of your computation never changes, just the values to be used. See

More Answers (0)

Community Treasure Hunt

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

Start Hunting!