Hi Matlab Users,
I cannot understand what is wrong with my code. I would appreciate if anyone could help me.
I got this error:
Index in position 1 is invalid. Array indices must be positive integers or logical values.
% Define model parameters: d, Lambda, DeltaE, V, Om, kappa
clear; clc;DeltaE = 0;Lambda = 1e-1;d = 12;kappa = 1;Ksi = 5e-5; % damping parameter
Om = 1e-2; % driving frequency
%V = 9.2e-3; % driving amplitude
V = 9e-4;tspan=[0:1e5];% Define the function with integration variables
fun_ode = @(t, y) shapiro(t,y,d,DeltaE,Lambda,V,Om,kappa);% fun_shapiro is a function which contains th coupled differential equations of the driven undamped soliton-surface plasmon Josephson junction with asymmetric coupling. You need to code this.
% Integrator options
options = odeset('RelTol',1e-7,'AbsTol',[1e-8 1e-8]);%Define time array in integer multiples of 2*pi/Om
t = 2*pi/Om*(1:200);%Define a set of initial points Phi0,Z0. A coarse example is the following:
[Phi0,Z0] = meshgrid(-1:0.4:1,-1:0.4:1);% initialize the phase space figure
figure(1),clf;axis([-1.5 1 -0.3 0.3]);grid on;hold on; % Integrate the system from each initial point and plot the results
[T, Y]=ode45(fun_ode,tspan,[Phi0(i,j) Z0(i,j)],options);% Collapse the Phi values into the [-1,1] range.
Y(:,1) = wrapToPi(Y(:,1)*pi)./pi;plot(Y(:,1),Y(:,2),'.k','MarkerSize',3);% plot the same values displaced by 2*pi. This is just for a better looking figure:
hold on;plot(Y(:,1)-2,Y(:,2),'.k','MarkerSize',3);
and this is shapiro function
function dydt = shapiro(t,y,DeltaE,Lambda,d,kappa,Ksi,Om,V)dydt = zeros(2,1);qc = fun_q(Lambda,d,y(2));a = sqrt((1-y(2))./(1+y(2)));dydt(1) = (DeltaE + Lambda.*y(2) - 0.5*(a.*kappa - 1./a)... *qc.*cos(pi*y(1)) + V*cos(t))/(Om*pi);dydt(2) = -.5*sqrt((1-y(2))*(1+y(2)))*qc*(1+kappa)... *sin(pi*y(1))/Om - Ksi*pi*dydt(1);end
in addition to that
function q = fun_q(Lambda,d,Z)q = sqrt(.5*(1+Z))*exp(-d*sqrt(2*Lambda*(1+Z)));%q = 1.d-5; % Constant q for BEC-Josephson model
end
With my regards,
Best Answer