How to save a output matrix in each iteration?

1 次查看(过去 30 天)
I have a matlab code with output of 2x2 matrix
I need a data contains with 2x2 matrix with total number of iteration(corresponding to frequency)
How to do in matlab and that matrix data i have to use another matlab code
clc
clear
close all
tic
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n0 = 1; % Refractive index of air
ns = 1.46; % Refractive index of subtrate
% Parameters
lambda0=5e-6; % Wavelength of light in micrometers
%%% frequency Range
stsz = 0.01; %%% step size for frequency
frequency = 58:stsz:67; %% frequency in THz
c=3e8;n=25;M_total_P = zeros(1, length(frequency));
nA=1.685;dA = lambda0/(4*nA); %% Thickness of First Layer in meters
nB=1.501;dB = lambda0/(4*nB); %% Thickness of Second Layer in meters
for i = 1:length(frequency)
f = frequency(i);
w=2*pi*f*1e12; %%% Angular frequency by frequency
DAA=dA * nA * (w/c);DBB=dB * nB * (w/c);
%%% Transfer Matrix elements of first layer
ma11=cos(DAA); ma12=-1i*sin(DAA)/nA; ma21=-1i*nA*sin(DAA); ma22=cos(DAA);
MA=[ma11 ma12; ma21 ma22];
maa11=cos(DAA/2); maa12=-1i*sin(DAA/2)/nA; maa21=-1i*nA*sin(DAA/2); maa22=cos(DAA/2);
Ma=[maa11 maa12; maa21 maa22];
%%% Transfer MAtrix elements of Second layer
lb11=cos(DBB); lb12=-1i*sin(DBB)/nB; lb21=-1i*nB*sin(DBB); lb22=cos(DBB);
MB=[lb11 lb12; lb21 lb22];
lbb11=cos(DBB/2); lbb12=-1i*sin(DBB/2)/nB; lbb21=-1i*nB*sin(DBB/2); lbb22=cos(DBB/2);
Mb=[lbb11 lbb12; lbb21 lbb22];
M_total_P = (Mb*MA*Mb)^n*(Ma*MB*Ma)^n;
end
toc
Elapsed time is 0.042159 seconds.

回答(1 个)

Aquatris
Aquatris 2024-6-13
Here is one way, where M_total_P is a 2x2x901 matrix, where 901 is the number of frequencies you have in the code.
clc
clear
close all
tic
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n0 = 1; % Refractive index of air
ns = 1.46; % Refractive index of subtrate
% Parameters
lambda0=5e-6; % Wavelength of light in micrometers
%%% frequency Range
stsz = 0.01; %%% step size for frequency
frequency = 58:stsz:67; %% frequency in THz
c=3e8;n=25;
%%============= CHANGE HERE TO INITIALIZE M_total_P to size 2x2xlength(freq)
M_total_P = zeros(2,2,length(frequency));
%%=============
nA=1.685;dA = lambda0/(4*nA); %% Thickness of First Layer in meters
nB=1.501;dB = lambda0/(4*nB); %% Thickness of Second Layer in meters
for i = 1:length(frequency)
f = frequency(i);
w=2*pi*f*1e12; %%% Angular frequency by frequency
DAA=dA * nA * (w/c);DBB=dB * nB * (w/c);
%%% Transfer Matrix elements of first layer
ma11=cos(DAA); ma12=-1i*sin(DAA)/nA; ma21=-1i*nA*sin(DAA); ma22=cos(DAA);
MA=[ma11 ma12; ma21 ma22];
maa11=cos(DAA/2); maa12=-1i*sin(DAA/2)/nA; maa21=-1i*nA*sin(DAA/2); maa22=cos(DAA/2);
Ma=[maa11 maa12; maa21 maa22];
%%% Transfer MAtrix elements of Second layer
lb11=cos(DBB); lb12=-1i*sin(DBB)/nB; lb21=-1i*nB*sin(DBB); lb22=cos(DBB);
MB=[lb11 lb12; lb21 lb22];
lbb11=cos(DBB/2); lbb12=-1i*sin(DBB/2)/nB; lbb21=-1i*nB*sin(DBB/2); lbb22=cos(DBB/2);
Mb=[lbb11 lbb12; lbb21 lbb22];
%%============= CHANGE HERE TO STORE THE CORRECT VALUE IN CORRECT INDEX
M_total_P(:,:,i) = (Mb*MA*Mb)^n*(Ma*MB*Ma)^n;
%%=============
end
toc
Elapsed time is 0.056707 seconds.
size(M_total_P)
ans = 1x3
2 2 901
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

类别

Help CenterFile Exchange 中查找有关 General Physics 的更多信息

产品


版本

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by