Saving data in a 3d array in for loop

14 ビュー (過去 30 日間)
Lisa Goh
Lisa Goh 2017 年 6 月 29 日
回答済み: KSSV 2017 年 6 月 29 日
Hi! I am running a 6 equation ode solver which generates a 1001x6 matrix in a for loop. I am trying to generate a 3d matrix (1001x6xi) which stores the data after each iteration and plot the resultant values against i, but I end up getting all zeros as my values. Is there anything wrong with my code?
Here's my code:
for i=1:1:351
initial_f=[0 0 (i-51)*1e-6 0 0 0];
%ODE solver
t=(0:10:10000)*1e-15;
options=odeset('reltol',1e-15,'abstol',1e-20);
[t,f]=ode15s('lorentz_force',t,initial_f,options);
%preallocate F (3d matrix)
F=zeros(1001,6,i);
F(:,:,i)=f(i);
%extracting values
X=F(:,1,:);Y=F(:,2,:);Z=F(:,3,:);
PX=F(:,4,:);PY=F(:,5,:);PZ=F(:,6,:);
p_x=PX(1001,:);
p_y=PY(1001,:);
p_z=PZ(1001,:);
p_r= sqrt((p_x.^2)+(p_y.^2)+(p_z.^2));
Energy_total=sqrt(((p_r).^2).*(c^2)+((m^2)*(c^4)));
Energy_initial=m*c^2;
Energy_gain=Energy_total-Energy_initial;
%plotting against i
plot((i-51)*1e-6,Energy_gain./e)
xlabel ('z_0 (m)')
ylabel ('Energy Gain (eV)')
end
end
The six equations are stored in another function 'lorentz_force'. Thank you so much in advance!

回答 (1 件)

KSSV
KSSV 2017 年 6 月 29 日
F = rand(1001,6) ;
% conver F into 3D
% using loop
F3D = zeros(1001,1,6) ;
for i = 1:6
F3D(:,:,i) = F(:,i) ;
end
% reshaping
F1 = reshape(F,1001,1,6) ;

カテゴリ

Help Center および File ExchangeOrdinary Differential Equations についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by