ZEMAX | 在MATLAB中使用ZOS-API的技巧
好酷屋教程网小编为您收集和整理了ZEMAX | 在MATLAB中使用ZOS-API的技巧的相关教程:本文将介绍一些在MATLAB中使用ZOS-API的技巧,以提高您的工作效率并充分利用ZOS-API的功能。简介OpticStudio开发了应用程序接口 (API) ,用户可以使用API与不同的
本文将介绍一些在MATLAB中使用 ZOS-API 的技巧,以提高您的工作效率并充分利用 ZOS-API 的功能。
简介
OpticStudio开发了应用程序接口 (API) ,用户可以使用API与不同的脚本环境进行连接和交互。使用API,用户可以与已打开的OpticStudio例程进行通信(
交互扩展
(
Interactive Extension
)
)或在后台运行OpticStudio(
独立应用程序
(
Standalone Application
)
)。这对于进行重复计算或用户处理OpticStudio生成的数据非常实用。本文只讨论ZOS-API与MATLAB相连接,并重点介绍一些技巧。
(联系我们获取文章附件)
语法提示
在MATLAB中,可以使用
语法提示
完成代码(如左图所示)或列出成员(如右图所示):这对于通过减少拼写错误和其他常见错误来提高编码的速度特别实用。但是,当MATLAB脚本完成时,不能访问变量内部的内容。可以运行示例文件的一部分——示例01:
创建新文件并使用快速聚焦
(
New File and QuickFocus
)
,以及安装OpticStudio并进行检查。如果想要在MATLAB脚本已经终止时访问TheLDE,就会得到一条消息——“没有找到已完成文件”。为了避免这个问题,必须运行MATLAB脚本并插入断点来阻止脚本运行结束。这适用于
独立应用程序
或将代码放在用于交互扩展
的MATLABZOSConnection脚本中。通过在MATLAB中点击:编辑器
(
Editor
)
>
断点
(
Breakpoints
)
>
设置/清除
(
Set/Clear
)
插入断点:
在MATLAB中,断点由行号旁边的红色圆圈表示。本例中,在第44行输入断点:
现在可以通过在MATLAB的 (.) 语句后按TAB键,并在
脚本编辑器
(
Script Editor
)
或
命令窗口
(
Command Window
)
使用
语法提示
:另外,将代码放在单独的脚本中进行
交互扩展
,将路径添加到MATLABZOSConnection脚本中,并将TheApplication定义为相同的MATLABZOSConnection,而不是将代码放在OpticStudio中生成的交互扩展的MATLABZOSConnection脚本中。本例中,连接号是21。如下为可以使用的代码示例:addpath('\\zmefs01\redirectedfolders\alastair.humphrey\Documents\Zemax\ZOS-API Projects\MATLABZOSConnection21\')
TheApplication = MATLABZOSConnection21;
使用上述的任何一种方法。可以通过OpticStudio进行API命令测试,实时观察命令的运行结果。另外,命令窗口可用作实用的调试工具。因为这两种情况下主函数并没有运行结束,仍然可以通过点击工作空间中的任何对象来研究已声明的对象:
使用带有’out’参数的 .NET方法
以下是使用带有 ‘ out ‘ 参数和GetIndex的 .NET方法的示例:
当在MATLAB中使用带有 ‘ out ‘ 参数的 .NET 方法时,必须确保将方法提供给的对象是正确的类型。在这种情况下,需要长度等于波长数量的双数组。下面的代码是返回表面 2在三个波长下的折射率的示例:
surf_num = 2;
num_waves = 3; % probably shouldn't hard code this
index = NET.createArray(‘System.Double’, 3);
TheApplication.PrimarySystem.LDE.GetIndex(surf_num, num_waves, index);
index_data = index.double;
MATLAB 函数 methods 和 methodsview
MATLAB函数methods和methodsview可以用来查看类方法名称。例如,代码可以写为:
MySag=TheApplication.PrimarySystem.Analyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM.SurfaceSag);
methods(MySag)
运行得到的结果为:
在MATLAB中读取枚举
有时在OpticStudio中,可能需要在MATLAB中循环枚举来读取数据。例如,要将
偶次非球面
(
Even Asphere
)
的系数读入MATLAB。偶数非球面
的表面矢高为:可以使用
偶次非球面
示例文件 “{Zemax}\Samples\Sequential\Objectives\Even Asphere.zmx” 读取系数:可以使用eval函数并循环枚举将数据读入MATLAB:
TheSystem = TheApplication.PrimarySystem;
TheLDE = TheSystem.LDE;
for no_coeff=1:8
EA_coeff(no_coeff) = eval(['TheLDE.GetSurfaceAt(2).GetSurfaceCell(ZOSAPI.Editors.LDE.SurfaceColumn.Par' num2str(no_coeff) ').DoubleValue']);
end
MATLAB中的时间性能函数
MATLAB中有一些实用的有关时间的函数,能够估计代码或部分代码运行所需的时间。在使用ZOS-API时,这些函数有助于检查优化或公差分析所需的时间。
方法一 :使用 timeit 函数,它将多次运行同一个函数并返回执行代码所需时间的中位数。
方法二:使用 profile 函数,它将返回特定函数执行时间的统计信息。
方法三: 使用秒表计时器功能。以下将讨论秒表计时器功能,使用 tic 函数启动秒表, toc 停止秒表:
如下代码摘录自示例代码: “{Zemax}\ZOS-API SampleCode\MATLAB\MATLABStandalone_15_Seq_Optimization.m”。
tic
TheMFE = TheSystem.MFE;
OptWizard = TheMFE.SEQOptimizationWizard;
%Optimize for smallest RMS Spot, which is "Data" = 1
OptWizard.Data = 1;
OptWizard.OverallWeight = 1;
%Gaussian Quadrature with 3 rings (refers to index number = 2)
OptWizard.Ring = 2;
%Set air & glass boundaries
OptWizard.IsGlassUsed = true;
OptWizard.GlassMin = 3.0;
OptWizard.GlassMax = 15.0;
OptWizard.GlassEdge = 3.0;
OptWizard.IsAirUsed = true;
OptWizard.AirMin = 0.5;
OptWizard.AirMax = 1000.0;
OptWizard.AirEdge = 0.5;
%And click OK!
OptWizard.Apply();
toc
tic;
LocalOpt = TheSystem.Tools.OpenLocalOptimization();
if ~isempty(LocalOpt)
LocalOpt.Algorithm = ZOSAPI.Tools.Optimization.OptimizationAlgorithm.DampedLeastSquares;
LocalOpt.Cycles = ZOSAPI.Tools.Optimization.OptimizationCycles.Automatic;
LocalOpt.NumberOfCores = 8;
fprintf('Local Optimization...\n');
fprintf('Initial Merit Function %6.3f\n', LocalOpt.InitialMeritFunction);
LocalOpt.RunAndWaitForCompletion();
fprintf('Final Merit Function %6.3f\n', LocalOpt.CurrentMeritFunction);
LocalOpt.Close();
end
% Get the elapsed time as a TimeSpan value.
toc;
进行
局部优化
(
Local Optimization
)
……初始评价函数值为:0.363
最终评价函数值为:0.170
运行时间为:1.765178秒。
MATLAB 实时编辑器 ( Live Editor )
MATLAB
实时编辑器
是很实用的工具,可以在其中创建实时脚本,该脚本可以与代码并行显示输出。此外,还可以添加文本、方程、图像和超链接。关于MATLAB实时编辑器
的更多信息可以点击此处查看。已经从OpticStudio中检索出如下示例中的库克三片式镜头的
波前图
(
Wavefront Map
)
和FFTMTF,并绘制成MATLAB图形。本例中使用的MLX文件(MATLAB实时脚本文件格式)在本文的附件中。MATLAB
实时编辑器
的实用功能是分节符,可以将代码分节并独立运行。例如,使用库克三片式镜头,可以选中计算每个表面主光线的AOI 的代码部分,然后单击“ 分节符
”图标。如果点击“查看每个表面上主光线的AOI”部分(此部分周围会出现蓝色的方框),然后点击“
运行
小节
(Run Section
) ”图标,可以分别计算该节的代码。以上就是好酷屋教程网小编为您收集和整理的ZEMAX | 在MATLAB中使用ZOS-API的技巧相关内容,如果对您有帮助,请帮忙分享这篇文章^_^
本文来源: https://www.haoku5.com/IT/63a7b2fa581e5e4a2907cb1f.html
相关推荐
热门专题
PS快捷键_PS快捷键大全
经典的Photoshop快捷键大全,如果你是入门阶段的水平,熟读此文并掌握,马上进阶为中级水平。matlab怎么换行?matlab换行教程
今天小编为大家带来的是matlab换行的教程,想知道怎么换行的小伙伴来看看接下来的这篇文章吧,相信一定会帮到你们的。matlab怎么换行?matlab换行教程1、首先在matlab主页面板中点击【Matlab求矩阵的乘积的操作方法
很多用户在使用Matlab的时候,不是很熟悉其中怎么求矩阵的乘积的?本期为你们带来的教程就描述了Matlab求矩阵的乘积的操作方法。Matlab求矩阵的乘积的操作方法打Matlab,在命令行窗口分区工具diskgenius强制删除文件的具体使用流程
很多人不知道分区工具diskgenius如何强制删除文件?今日为你们带来的文章是关于分区工具diskgenius强制删除文件的具体含义讲解,还有不清楚小伙伴和小编一起去学习一下吧。分区工具diskggoldwave怎么启用延迟录制计时器?goldwave启用延迟录制计时器教程
很多小伙伴在使用goldwave的时候,想知道怎么启用延迟录制计时器,下面小编就为大家分享教程,感兴趣的小伙伴不要错过哦!goldwave怎么启用延迟录制计时器?goldwave启用延迟录制计时器教pycharm使用技巧
今天小编给大家讲解pycharm使用技巧,有需要或者有兴趣的朋友们可以看一看下文,相信对大家会有所帮助的。pycharm使用技巧使用PyCharm软件需要python运行环境,这里我已经下载好。CAD看图软件哪个好用?如何使用CAD看图软件
在CAD中,大家都知道CAD图纸是使用CAD制图软件来绘制完成的,那保存的格式就是为dwg格式和dxf格式的。那需要对图纸内容进行查看的时候,就要适用到CAD看图软件。但看图软件有很多,那么CAD看图diskgenius怎么将分区中的文件复制到指定目录?diskgenius将分区中的文件复制到指定目录方法
使用diskgenius的时候,很多小伙伴不知道怎么将分区中的文件复制到指定目录,下面小编就给大家带来方法,有需要的小伙伴不要错过哦。diskgenius怎么将分区中的文件复制到指定目录?diskg分区工具diskgenius将硬盘合并分区的详细流程
说起分区工具diskgenius伙伴们都不陌生,那么使用怎么使用分区工具将硬盘合并分区呢?下面一起看看关于分区工具diskgenius将硬盘合并分区的详细流程吧。分区工具diskgenius将硬盘合MathType中公式与文字错位的处理方法
最近有很多朋友向我咨询关于MathType中公式与文字错位的问题,今天就为大家介绍MathType中公式与文字错位的处理方法,希望能够帮助到大家。MathType中公式与文字错位的处理方法方法一