I have a problem with this ode45
이전 댓글 표시
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,
댓글 수: 4
madhan ravi
2019년 1월 31일
편집: madhan ravi
2019년 1월 31일
upload ode functions (fun_ode)
fartash2020
2019년 1월 31일
fartash2020
2019년 1월 31일
madhan ravi
2019년 1월 31일
respond to James answer below
채택된 답변
추가 답변 (1개)
James Tursa
2019년 1월 31일
0 개 추천
I don't see anywhere in your code where you define i and j before using them as indexes into Phi0 and Z0, so they default to the imaginary numbers, hence the error. Perhaps you intended to wrap all of this in for loops?
댓글 수: 2
fartash2020
2019년 1월 31일
James Tursa
2019년 1월 31일
Are you saying that if you set i=1 and j=1 just prior to the line in question, that you get the exact same error? Or do you get a different error?
카테고리
도움말 센터 및 File Exchange에서 Programming에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!