24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2760  |  回复: 9

匿名

用户注销 (小有名气)

本帖仅楼主可见

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   同方向广播   申请物理EPI   回复此楼   编辑   查看我的主页
回帖置顶 ( 共有1个 )

zhfeng

木虫 (小有名气)

glddoyss: 回帖置顶 2012-04-06 19:28:32
对于quad函数,积分限应该是常数,a必须赋值。可以看一下帮助文件
7楼2012-04-04 23:20:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

匿名

用户注销 (小有名气)

本帖仅楼主可见
2楼2012-04-04 00:35:55
已阅   申请物理EPI   回复此楼   编辑   查看我的主页

匿名

用户注销 (小有名气)

本帖仅楼主可见
3楼2012-04-04 00:37:31
已阅   申请物理EPI   回复此楼   编辑   查看我的主页

smy1982

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
glddoyss: 金币+5, 有帮助, 虽然没指出我的错误,不过提供的程序也有用啦 2012-04-04 15:24:08
利用光波衍射的菲涅尔近似-菲涅尔衍射公式来计算双缝的衍射:


下面的这个程序你明白了的话,你这个问题就解决了,其他物体的衍射模拟你也就会了。
(1)实验参数设定:
    Lamda=0.6328; % um, Wavelength of the input light
DDist=200.0e+3; % um, Diffraction distance to the output plane
M=512; N=512; % Number of the sample array
dx=10.0; dy=10.0; % um, Sampling space
SWidth=4; % pixels, Width of the Slits
SDist=30; % pixels, Distance between two slits
(2)建立衍射屏函数(Slit)的抽样点阵
  DScreen=zeros(M,N); % define a M*N matrix with zero elements;
DScreen(:,(N-SDist-SWidth)/2N-SDist+SWidth)/2)=1.0; % Slit one
DScreen(:,(N+SDist-SWidth)/2N+SDist+SWidth)/2)=1.0; % Slit two
%也可用下列语句调入实现设计好的衍射屏图样(bmp格式512×512)。
DScreen=double(imread('DScreen1.bmp'));
(3)衍射屏函数的图形显示:
figure(1); % 激活1号显示窗口为当前窗口
colormap(gray);  %设置灰度图形显示格式
imshow(Slit); %在当前图形窗口显示衍射屏函数
  (4)建立高斯球面波函数 的抽样点阵:
    % Set coordinate of the sample array
[x,y]=meshgrid(-M*dx/2:dxM-1)*dx/2,-N*dy/2:dyN-1)*dy/2);
SphFunct=exp(i*pi*(x.^2+y.^2)/(Lamda*DDist)); % The spherical wave function
  (5) 通过计算菲涅尔衍射积分求衍射光场:
    % Simulate the Fresnel diffraction
DScreen_F=fftshift(fft2(fftshift(DScreen))); %Fourier transform of the slit function.
SphFunct_F=fftshift(fft2(fftshift(SphFunct))); %Fourier transform of the spherical function.
FrDiffract=fftshift(ifft2(fftshift(DScreen_F.*SphFunct_F))); % Inverse Fourier transform
  (6)显示输出平面上的光强度分布:
    % Display the diffraction pattern
FrDiffract_I=FrDiffract.*conj(FrDiffract); % Intensity distribution
FrDiffract_I=FrDiffract_I/max(max(FrDiffract_I));
imshow(FrDiffract_I/max(max(FrDiffract_I)));
  (7)保存衍射图样
如果你曾歌颂黎明,那么也请你拥抱黑夜。
4楼2012-04-04 09:53:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (小有名气)

本帖仅楼主可见
5楼2012-04-04 12:52:11
已阅   申请物理EPI   回复此楼   编辑   查看我的主页

smy1982

木虫 (正式写手)

引用回帖:
5楼: Originally posted by glddoyss at 2012-04-04 12:52:11:
这个不很懂啊。学matlab不久。。  能帮忙看看我函数定义哪里出了问题吗?
M文件这个
function CS=fresnelC(a)
CS=quad(@fun1,0,a);
function fun=fun1(u)
fun=cos(0.5.*pi.*u.^2)+i.*sin(0.5.*pi.*u.^2);
...

你这个程序不是用run来运行的,你的是个函数。得用函数命令。
在matlab命令行里直接输入比如:CS=fresnelC(200e-3);
但是你这个程序里面,“l(n)=abs(F(x1(n))+sqrt(0.5)*exp(i.*pi./4));%表示的是菲涅尔积分,f(n)=F(x1(n));%得到菲涅尔积分的列阵
” 这个F()是什么函数啊?没有给出来啊?
如果你曾歌颂黎明,那么也请你拥抱黑夜。
6楼2012-04-04 20:07:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
送鲜花一朵
8楼2012-04-05 20:47:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (小有名气)

本帖仅楼主可见
9楼2012-04-06 19:28:49
已阅   申请物理EPI   回复此楼   编辑   查看我的主页

卡洛比

新虫 (初入文坛)

??? Error using ==> times
Matrix dimensions must agree.

Error in ==> Fresnelyanshe at 25
FrDiffract=fftshift(ifft2(fftshift(DScreen_F.*SphFunct_F))); % Inverse Fourier transform傅里叶逆变换(球面函数及狭缝函数的乘积)

??? Error using ==> times
Matrix dimensions must agree.

Error in ==> Fresnelyanshe at 25
FrDiffract=fftshift(ifft2(fftshift(DScreen_F.*SphFunct_F))); % Inverse Fourier transform傅里叶逆变换(球面函数及狭缝函数的乘积)
同学 你这个程序运行下去出现了如上错误,是不是你球面函数和狭缝函数的取样尺寸不同导致此上错误呢?
10楼2012-04-25 10:36:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 glddoyss 的主题更新
信息提示
请填处理意见