Вот мой код MATLAB, который вычисляет дифракцию френеля. И я хочу реализовать тот же код на C++.Сложное присвоение номера
clc;clear all;close all;
N=512;
M=512;
lambda=632e-9;
X = 12.1e-6;
k=2*pi/lambda;
z0 = (N*X^2)/lambda;
a = (exp(j*k*z0)/(j*lambda))
hX=(exp(j*k*z0)/(j*lambda))*exp(j*pi/(z0*lambda)*X^2*[0:N-1].^2);
hY=(exp(j*k*z0)/(j*lambda))*exp(j*pi/(z0*lambda)*X^2*[0:M-1].^2);
h = hX.'*hY;
figure; imshow(real(h), []);
И в то время как им пытается реализовать один и тот же код на C++ я попытался это:
int main(){
std::complex<double> com_two(0,1);
double mycomplex = 1;
double pi = 3.1415926535897;
double N = 512;
double M = 512;
double lambda = 632e-9;
double X = 12.1e-6;
double k = (2*pi)/lambda;
double z0=(N*pow(X,2))/lambda;
//std::complex<double> hx; // Both definitions don't work
//double hy;
/*for (int j=0; j < N; j++){
hy = (exp(mycomplex*k*z0)/(mycomplex*lambda))*exp(mycomplex*pi/(z0*lambda)*pow(X,2)*pow(j,2));
cout << hy <<endl;
}*/
system("pause");
return 0;
}
Но дело в том, что при расчете выполнения HX и хе значения возвращают комплексные значения.
Так как я должен определить «mycomplex» как i, j, как в коде MATLAB. Также я нашел несколько осей, таких как std::complex<double> complex;
Но я думаю, что это не сработает. По-моему, мне нужно получить значения hx и hy как сложные числа. Но я не смог найти правильное решение.
Я буду очень рад, если кто-то поможет в этом.
так в чем проблема? hy сложна или нет? – 4pie0
Да, он должен принимать комплексные числа, такие как 5 + 3i и т. Д. Правая часть уравнения дает комплексные числа, но когда я пытаюсь отобразить результат, он дает мне 1 INF, который я не хочу получать. – Mertcan
где ваше заявление? plese paste – 4pie0