matlab案例 光学,利用Matlab 仿真光学实验
干涉与衍射是光学的主要内容,也是计算机仿真的热点。与单色光相比,白光干涉与衍射的计算机仿真是个难点。本文依据七色光可合成为白光的原理,基于Matlab 仿真白光干涉与衍射实验。首先基于Matlab 编写白光光栅衍射仿真程序,然后通过改变输入参数而达到利用一个程序同时仿真白光干涉与衍射实验的目的,仿真结果与实际的白光干涉与衍射实验一致。最后编写操作性很强的人机交互界面,可以实现脱离matlab环境单独运行的效果,具有很强的实践性。
基于Matlab 的七色光仿真白光干涉与衍射实验, 其算法主要包括以下几个步骤:
①设置固定参数并赋值,设置可调参数并赋默认值;
②设置仿真光屏参数(即仿真结果RGB 值图像矩阵大小);
③计算各色光干涉或衍射的光强及其对应的RGB值矩阵数据;
④依据红绿蓝三基色加性混合法则,把各色光的RGB 值矩阵数据计入仿真结果RGB 值图像矩阵中;
⑤显示仿真结果(即显示仿真结果RGB 值图像矩阵)。
%基于matlab仿真白光光栅衍射实验程序
clear
clf
%设置固定参数
lamda=[600 610 570 550 460 440 410]*1e-9;%七色光的波长,单位m
RGB=[1,0,0;1,0.5,0;1,1,0;0,1,0;0,1,1;0,0,1;0.67,0,1];%七色光的RGB值
d=4e-5;%设置光栅常数
%设置可调参数
%%%白光光栅衍射参数
% b=8e-6;
% N=18;%透光缝宽及光栅单元数
% Bright=80; %亮度调节系
%%%白光单缝衍射参数
% b=8e-6;
% N=1;%透光缝宽及光栅单元数
% Bright=20; %亮度调节系数
%白光双光束干涉
b=8e-6;
N=2;%透光缝宽及光栅单元数
Bright=1; %亮度调节系数
%设置仿真光屏参数
Irgb=zeros(150,1048,3);%仿真光屏矩阵
Iw=zeros(150,1048,3);%用于记录各色光衍射结果的RGB值的矩阵
%计算白光光栅衍射的光强及对应的RGB值矩阵数据
%计算割舍光光栅衍射光强分布
for k=1:7
theta=(-0.015*pi+.03*pi/1048:.03*pi/1048:0.015*pi);%衍射角度的变化范围
phi=2*pi*d*sin(theta)/lamda(k);
alpha=pi*b*sin(theta)/lamda(k);
Idf=(sinc(alpha)).^2;%单缝衍射的相对光强
Idgs=(sin(N*phi/2)./sin(phi/2)).^2;%多光束干涉的相对光强
I=Idf.*Idgs;%光栅衍射的相对光强
%计算与各色光衍射光强对应的RGB值矩阵数据
for i=1:150
Iw(i,:,1)=I*RGB(k,1); %把红基色代码计入Iw矩阵红维度
Iw(i,:,2)=I*RGB(k,2); %把红基色代码计入Iw矩阵绿维度
Iw(i,:,3)=I*RGB(k,3); %把红基色代码计入Iw矩阵蓝维度
end
%计算白光光栅衍射RGB值图形矩阵数据
Irgb=Irgb+Iw; %把各色光衍射的RGB值矩阵计入仿真结果RGB值图形矩阵中
Iw=[];
end
%显示白光光栅衍射实验仿真结果
Br=1/max(max(max(Irgb))); %调整Irgb矩阵元素的最大值为1的系数
II=Irgb*Br*Bright; %调节仿真图像亮度
imshow(II) %显示仿真结果
% title('白光光栅衍射仿真结果')
% title('白光单缝衍射仿真结果')
title('白光双光束干涉仿真结果')
%%%%%%%%%%%GUI制作
参数设置栏 有用户根据自己的需要设置
function varargout = guanglabcopy(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @guanglabcopy_OpeningFcn, ...
'gui_OutputFcn', @guanglabcopy_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
handles.output = hObject;
set(handles.b_edit,'string',8e-6); %初始化各个参数
set(handles.N_edit,'string',18);
set(handles.Bright_edit,'string',80);
guidata(hObject, handles);
function varargout = guanglabcopy_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function N_edit_Callback(hObject, eventdata, handles)
function N_edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function Bright_edit_Callback(hObject, eventdata, handles)
function Bright_edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function b_edit_Callback(hObject, eventdata, handles)
function b_edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function OK_button_Callback(hObject, eventdata, handles)
b=str2num(get(handles.b_edit,'string')); %更新参数,取用户输入的数值
N=str2num(get(handles.N_edit,'string'));
Bright=str2num(get(handles.Bright_edit,'string'));
switch N %选择相应的标头
case 1
set(handles.title_text,'string','白光单缝衍射仿真结果')
case 2
set(handles.title_text,'string','白光双光束干涉仿真结果')
otherwise
set(handles.title_text,'string','白光光栅衍射仿真结果')
end
lamda=[600 610 570 550 460 440 410]*1e-9;
RGB=[1,0,0;1,0.5,0;1,1,0;0,1,0;0,1,1;0,0,1;0.67,0,1];
d=4e-5;
Irgb=zeros(150,1048,3);
Iw=zeros(150,1048,3);
for k=1:7
theta=(-0.015*pi+.03*pi/1048:.03*pi/1048:0.015*pi);
phi=2*pi*d*sin(theta)/lamda(k);
alpha=pi*b*sin(theta)/lamda(k);
Idf=(sinc(alpha)).^2;
Idgs=(sin(N*phi/2)./sin(phi/2)).^2;
I=Idf.*Idgs;
for i=1:150
Iw(i,:,1)=I*RGB(k,1);
Iw(i,:,2)=I*RGB(k,2);
Iw(i,:,3)=I*RGB(k,3);
end
Irgb=Irgb+Iw;
Iw=[];
end
Br=1/max(max(max(Irgb)));
II=Irgb*Br*Bright;
imshow(II)
function close_button_Callback(hObject, eventdata, handles)
selection = questdlg(['Close ' get(handles.figure1,'Name') '?'],...
['Close ' get(handles.figure1,'Name') '...'],...
'Yes','No','Yes');
if strcmp(selection,'No')
return;
end
delete(handles.figure1)
function file_menu_Callback(hObject, eventdata, handles)
function update_menu_Callback(hObject, eventdata, handles) %菜单项目“更新”
OK_button_Callback(hObject, eventdata, handles)
function close_menu_Callback(hObject, eventdata, handles) %菜单项目“关闭”
close_button_Callback(hObject, eventdata, handles)
光栅衍射的特例还有夫琅和费多缝衍射及多光束干涉等,利用本文的程序,在GUI中通过改变可调参数也可对它们进行仿真。在实际的干涉实验中,透光缝宽不可能做到无限窄,而利用Matlab进行仿真,则不受此条件的限制,可观察到不受衍射因子影响的干涉现象。因此,利用Matlab 仿真光学实验,可以弥补实际实验的不足。
matlab案例 光学,利用Matlab 仿真光学实验相关推荐
- 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...
matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析 课程设计任务书 学生姓名: 专业班级: 指导教师: 刘 新 华 工作单位:信息工程学院 题 目: 利用MATLAB对线性电路正弦稳态 ...
- 基于matlab的绘图设计,matlab课程设计---利用MATLAB仿真软件进行绘图
matlab课程设计---利用MATLAB仿真软件进行绘图 课程设计任务书课程设计任务书 题题 目目 利用利用 MATLABMATLAB 仿真软件进行绘图仿真软件进行绘图 初始条件初始条件 仿真软件 ...
- matlab节点连通率,利用matlab仿真最小发射功率下wsn的连通性和覆盖率.docx
利用matlab仿真最小发射功率下wsn的连通性和覆盖率.docx 江南大学物联网ZK1/5一题目利用MATLAB仿真最小发射功率下WSN的连通性和覆盖率.二目的(1)在固定节点个数的前提下,仿真求得 ...
- 星敏感器 matlab,星敏感器姿态确定仿真综合实验.docx
北京航空航天大学 专业综合实验报告 学 院 宇航学院 班 级 111514 学 号 姓 名 高荣荣 指导老师 王海涌 2015年1月3日 星敏感器姿态确定仿真综合实验 摘要:通过对电子星图模拟器和星敏 ...
- matlab 输入普朗克常量,利用matlab和excel进行光电效应测普朗克常量实验中的数据处理...
利用matlab和excel进行光电效应测普朗克常量实验中的数据处理 利用MATLAB和EXCEL 进行光电效应测普朗克常量实验中的数据处理 (东南大学 学院 南京211189) 摘要:本文回顾了光电 ...
- matlab 多普勒效应,《利用MATLAB仿真多普勒效应.doc
<利用MATLAB仿真多普勒效应 利用MATLAB仿真多普勒效应 某某某 摘 要:分析多普勒效应特性,建立数学模型,利用MATLAB软件对其进行仿真试验,进行定量分析,根据仿真试验结果绘制出听者 ...
- matlab 张德风,利用MATLAB仿真多普勒效应
用MATLAB模拟多普勒效应 某 选择:多普勒效应特性分析.建立数学模型.使用MATLAB软件进行模拟测试.定量分析.根据模拟测试结果绘制听众收到的信号的频率变化曲线.用信号处理工具箱函数spectr ...
- matlab磁场计算公式,利用MATLAB计算电磁场有关分布.doc
利用MATLAB计算电磁场有关分布 电磁场实验报告 实验一 模拟电偶极子的电场和等位线 学院:电气工程及其自动化 班级: 学号: 姓名: 实验目的:了解并掌握MATLAB软件,熟练运用MATLAB语言 ...
- 用matlab实现循环卷积,利用matlab实现循环卷积.doc
利用matlab实现循环卷积.doc 1.实验目的1利用MATLAB实现循环卷积.2比较循环卷积与线性卷积的区别.二.实验条件PC机,MATLAB703.实验内容1)循环卷积的定义两个序列的N点循环卷 ...
- matlab体电荷电场线,利用Matlab模拟点电荷系的电场线和等势面.docx
利用Matlab模拟点电荷系的电场线和等势面 文章编号:1007-2934(2014)03-0094-03利用 Matlab 模拟点电荷系的电场线和等势面陈伟,易志俊,丁益民( 湖北大学,湖北 武汉 ...
最新文章
- 无需u盘和光盘安装linux
- linux内核dentry结构学习
- 阿里云中间件技术 促进互联网高速发展
- xml教程之约束schema
- MySQL(八)MySQL性能优化
- cgi python windows_python cgi windows怎么办
- Climbing Stairs - Print Path
- LINQ :最终统治了​所有的语言!
- 阿里云rds for mysql平台介绍_阿里云RDS for MySQL 快速入门——笔记
- 你好,了解一下Java 14带来的一系列新功能
- MyBatis框架笔记05:MyBatis条件查询
- 织梦dede:channelartlist调用排除指定typeid栏目
- MySQL安装图解 地址
- 网络驱动器映射成功但无法更新文件_FTP映射网络驱动器-ExpanDrive for mac
- mysql查询交叉连接_MySQL表连接(内连接、交叉连接、外连接、联合查询)-阿里云开发者社区...
- 重点 (四) : 超级全面的iOS资源
- 重塑企业协同价值链,致远互联将“组织精神”进行到底
- 最全面的测试用例--web测试
- sql中字符串转换成日期
- 车牌识别 php,智能车牌识别系统