這是我的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和HY值返回複數值。
那麼我應該如何在MATLAB代碼中定義像i,j這樣的「mycomplex」。 我還發現一些屁股像std::complex<double> complex;
但我想這不會工作。我認爲我必須得到hx和hy值作爲複數。但我找不到合適的解決方案。
如果有人幫忙,我會很高興。
所以有什麼問題? hy是複雜的還是不是? – 4pie0
是的,它必須採取複雜的數字,如5 + 3i等。右邊的公式給出了複數,但是當我嘗試顯示結果時,給出了1#INF,我不想得到。 – Mertcan
你的聲明在哪裏?貼吧貼吧 – 4pie0