[Matlab] Numerical Code for the NLS equation

  • Context: MATLAB 
  • Thread starter Thread starter queenstudy
  • Start date Start date
  • Tags Tags
    Code Matlab Numerical
Click For Summary

Discussion Overview

The discussion revolves around troubleshooting a MATLAB code for the Nonlinear Schrödinger (NLS) equation. Participants are addressing errors encountered when running the code, examining potential issues related to syntax and MATLAB versions.

Discussion Character

  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant reports an error related to the 'input' function in their MATLAB code, suggesting a possible issue with the environment or version.
  • Another participant indicates that they do not experience the same error, but they encounter other issues, such as an undefined variable 'dtau' and a potential syntax error in the frequency grid definition.
  • There is a suggestion that the error message may not originate from MATLAB, with a query about whether the code is being run in Python instead.
  • A participant clarifies that they are using MATLAB 2010 and questions whether different versions of MATLAB could affect the execution of the code.
  • Further clarification is provided regarding the error message, indicating that the problem may stem from a naming conflict with a user-defined script named 'input'.

Areas of Agreement / Disagreement

Participants do not reach a consensus on the source of the error. Some believe it may be related to version differences or naming conflicts, while others suggest syntax issues. The discussion remains unresolved regarding the exact cause of the errors.

Contextual Notes

Limitations include the absence of definitions for certain variables like 'dtau', and potential dependencies on specific MATLAB versions that are not fully explored in the discussion.

queenstudy
Messages
101
Reaction score
0
hello
i just copied the Numerical Code for the NLS equation which is the following:
%---specify input parameters
clear all;
distance=input('enter fiber length(in units of L_D)=');
beta2=input(' dispersion: 1 for normal, -1 for anomalous');
N=input('Nonlinear parameter N=');
mshape=input('m=0 for sech , m>0 for super-Gaussian =');
chirp0=0; % input pulse chirp
%--- set stimulation parameters
nt=1024; Tmax=32; % FFT points and window size
step_num=round(20*distance*N^2); % number of z steps
deltaz=distance/step_num; % step size in tau
%--- tau and omega arrays
tau=(-nt/2:nt/2-1)*dtau; % temporal grid
omega=(pi/Tmax)*[(0:nt/2-1)*(-nt/2 :-1)];% frequency grid
%--- input field profile
if mshape==0
uu= sech(tau)*exxp(-0.5i*chirp0*tau.^2); %soliton
else %super Gaussian
uu=exp((-0.5*(1+1i*chirp0)*tau.^(2*mshape)));
end
%-- plot input pulse shape and spectrum
temp=fftshift(ifft(uu)).*(nt*dtau)/sqrt(2*pi);%spectrum
figure; subplot(2,1,1);
plot(tau,abs(uu).^2,'--k');hold on;
axis([-5 5 0 inf]);
xlabel('normalized time');
yalebl('normalized power');
title('input and output pulse shape and spectrum');
subplot(2,1,2);
plot(fftshift(omega)/(2*pi),abs(temp).^2,'--k');hold on;
axis([-.5 .5 0 inf]);
xlabel('normalized frequency');
ylabel('spectral power');
%---store dispersive phase shifts to speedup code
dispersion=exp(1i*0.5*beta2*omega.^2 *deltaz);%phase factor
hhz=1i*N^2*deltaz; % nonlinear phase factor
%******[beginning of main loop]****
%scheme:1/2N -> D-> 1/2N; first half step nonlinear
temp=uu.*exp(abs(uu).^2.*hhz/2); %note hhz/2
for n=1:step_num
f_temp=ifft(temp).*dispersion;
u=fft(f_temp);
temp=uu.*exp(abs(uu).^2.*hhz);
end
uu=temp.*exp(-abs(uu).^2.*hhz/2); % final field
temp=fftshift(ifft(uu)).*(nt*dtau)/sqrt(2*pi);%final spectrum
%*****[end of main loop]********

%----- plot output pulse shape and spectrum
subplot(2,1,1)
plot(tau,abs(uu).^2,'-k')
subplot(2,1,2)
plot(fftshift(omega)/(2*pi),abs(temp).^2,'-k')


and as syntax there no mistake but when i wanted to run it they told me the following error:

Error in ==> Untitlednls at 3
distance= input('enter fiber length(in units of L_D)=');
what should i do even though i just copied it
 
Physics news on Phys.org
I just copied and pasted the code in your post, and I don't get the same error as you, line 3 works fine.

However, I do get other errors; dtau is not defined, the line where the frequency grid is defined (line 14) is not working because the (I assume) there is a dot missing in front of the "*"

Hence, the code as is does not work.

I am using Matlab 2012b

Edit: Btw, I just realized that the error message you posted does not look like Matlab. Are you trying to run this in Python using scipy?
If so I don't think it will work without some modifications.
 
no i am trying to run it in matlab2010 does it make any difference between different editons
 
thats the exact error that is given to me

? Attempt to execute SCRIPT input as a function:
C:\Users\Abd Lebnen\Documents\MATLAB\input.m

Error in ==> leboz at 3
distance= input('enter fiber length (in units of L_D)= ');
 
queenstudy said:
? Attempt to execute SCRIPT input as a function:
C:\Users\Abd Lebnen\Documents\MATLAB\input.m

Error in ==> leboz at 3
distance= input('enter fiber length (in units of L_D)= ');
If only you'd given the full error message before!

It looks like the problem is that instead of using the built-in "input" function, it's trying to use the contents of "C:\Users\Abd Lebnen\Documents\MATLAB\input.m" instead. You need to rename that file or move it somewhere else where MATLAB won't find it.
 

Similar threads

  • · Replies 14 ·
Replies
14
Views
7K
  • · Replies 10 ·
Replies
10
Views
3K
Replies
5
Views
8K
  • · Replies 1 ·
Replies
1
Views
6K