Я работаю над проектом с электрическими полями, и мне нужно сделать несколько простых математических расчетов. Дано E_in (x, y) и E_m (x, y) , которые связаны
E_in = сумма (a_m. * E_m) ,
(где суммирование по индексу m ), мне нужно найти коэффициенты a_m . Для этого, интеграл
a_m = int (coni (E_m). * E_in dx dy) ,
следует оценить. Здесь coe (E_m) - комплексное сопряжение поля E_m. Теперь у меня есть E_m и E_in , заданные как 100x100 матрицами, и мой код выглядит следующим образом:
ПРИМЕЧАНИЕ: E_m.mat - это ячейка 1x312, которая включает в себя матрицу 100x100 в каждой ячейке. Вы можете просто создать несколько случайных комплексных матриц и попробовать это таким образом. Моя проблема не зависит от точных значений внутри этих матриц, как вы увидите ниже.
%% 1. INITIAL PARAMETERS
coreRadius = 100; pixel = 100; % load(E_m.mat,E_m)
%% 2. CREATE THE INPUT FIELD
% Gaussian input field
% taken from "Thomas Dideriksen - Custom 2D Gauss - Mathworks File Exchange", the link is:
% https://www.mathworks.com/matlabcentral/fileexchange/9556-custom-2d-gauss
inputField = MMFcreateGaussian([pixel,pixel], 100, 100, 0, 0, 6, [0,0]);
В этот момент график abs (inputField). ^ 2 дает ...
%% 3. FIND THE WEIGHT OF EACH FIELD IN THE INPUT GAUSSIAN PROFILE
% i.e. solve the overlap integral in the second formula
% normalize each field
% Here, I want to make the absolute square of any field E_m to be equal to "1"
for i = 1:length(E_m)
E_m{i} = E_m{i} ./ sqrt( sum( abs( E_m{i}(:) ).^2 ) );
end
% find the conjugate of each field
% This is necessary for finding a_m (check the first equation above)
for k = 1:length(E_m)
conjE_m{k} = conj(E_m{k});
end
% find all a_m's and try to re-create the original inputField above
for mode = 1:length(E_m)
a_m{mode} = sum(sum( conjE_m{mode} .* inputField )); % finding a_m's in the second equation
outputField{mode} = a_m{mode} .* E_m{mode}; % multiplying each a_m with the corresponding E_m
end
% sum every field to obtain the total field
totalOutField = sum(cat(3,outputField{:}),3);
То, что я делал в последних строках, можно выразить формулой
E_out = сумма (a_m. * E_m) ,
, которое должно быть равным моему начальному полю ввода, то есть E_out = E_in . Таким образом, когда я строю график abs (totalOutField). ^ 2 , я должен получить ту же картинку, что и выше. Но вместо этого я получаю ...
Итак, мой вопрос : В чем проблема в этом коде, так что мне не удается получить ту же картинку в обратном процессе? Спасибо за вашу помощь.