news 2026/4/25 19:45:47

Ansys Zemax|如何自定义优化操作数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ansys Zemax|如何自定义优化操作数

附件下载

联系工作人员获取附件

概要

虽然Zemax OpticStudio有300多个内建优化操作数,但是还是会有一些特殊情况是这300多个操作数无法涵盖的。这就要求使用者根据要求计算出某些特定的数值,将这些数值返回到某个操作数,再对此操作数进行优化。

Zemax OpticStudio支持用户编程,计算出特定的数据,再通过Merit Function Editor(MFE)中的操作数来定义该数据。这些数据可以是独立于Zemax OpticStudio计算的,也可以是由Zemax OpticStudio计算的但是没有具体的优化操作数表达的。当然,不管是上述哪种情况,使用者都可以用以下两种方法计算此数值:

  • 使用ZPL宏语言

  • 使用外部定义和汇编程序

ZPL宏具有容易编写、执行快速、以及和Zemax OpticStudio集成较好的特点。只要使用者具备一点点的编程经验就可以编程计算。

另外ZPLM优化操作数可以用于从评价函数中调用ZPL宏,这样使用者就可以直接使用宏计算出结果并返回到评价函数编辑器中从而实现优化。

本文我们将介绍如何使用宏计算并通过操作数ZPLM将数值返回给评价函数。

使用操作数ZPLM返回宏计算的数值

如果您不熟悉如何创建、编辑、保存和执行宏,推荐阅读“编程语言 (ZPL) 简介”,然后再继续本练习。

现在,假设我们需要计算并优化Working F/#。当然Zemax OpticStudio中操作数WFNO已经可以解决此问题,本文只是举一个例子。所以我们可以先假设操作数WFNO不存在,我们需要用宏计算该数值并返回到评价函数中进行优化。Working F/#的定义如下:

其中n为像方空间的折射率, θ为实际边缘光线(Real Marginal Ray)在像空间的角度。根据这些定义,我们需要用宏追迹一条实际光线并计算Working F/#:

注意OPTRETURN关键字的使用,此关键字记录了全局阵列位置0处“X”的结果值。我们在MFE的ZPLM操作数“Dat#”列中填入的就是这个全局阵列的位置数。

上图中“Mac#”对应着宏数。

注意每个被ZPLM操作数调用的宏必须命名为:“ZPLxx.ZPL”的格式,宏数可以是0到99的任何数,因此ZPL17.ZPL是一个有效的文件名,可以通过在MFE中的“Mac#”填入17来调用执行。

本例中,命名该宏为ZPL10.ZPL并保存在合适的文件夹中。在MFE中,插入ZPLM操作数,分别在“Mac#”和“Dat#”中填入10和0。

更新该MFE,执行宏并返回计算得到的数值。

计算返回的Working F/#是4.9782。在MFE中插入操作数WFNO验证宏的正确性。由下图可以看出,两者计算得到的数值相同。

这种方法也可以用于单个宏调用并返回多个数值(如果想了解更多,请参考前文所说的使用者手册),这些值可以用于优化或者仅仅提供一个值给MFE做进一步分析。ZPLM可以提供惊人的速度以及弹性,使用者可以用该操作数计算并优化一些特殊数值。

用户自定义操作数是否会使评价函数计算缓慢?

也许您会好奇,在评价函数中使用自定义的操作数时,是否会使得评价函数计算缓慢?其实,这很大程度依赖于您宏计算的复杂程度,一般情况下宏计算是非常快的。

作为演示,我们现在对Cooke Triplet执行两次优化:一次使用ZPLM操作数加上宏,一次使用内建操作数WFNO。

第一种情况,我们将ZPLM的目标值设置为5,权重设置为1。第二种情况,我们将WFNO的目标值设置为5,权重设置为1。按下图设置评价函数:

我们使用DLS优化,可以看到执行的时间大约4.4s:

点击F3撤销优化,将ZPLM操作数权重设置为0,WFNO目标值设置为5,权重设置为1,再次优化。

可以看出两者计算的时间相差并不大。

因此,即使我们使用了自定义的宏,Zemax OpticStudio依旧可以高效的执行计算。

总结

在使用Zemax OpticStudio的过程中,我们有时会遇到内建的优化操作数不能满足我们要计算/返回的数值情况。这时我们需要利用ZPLM和宏结合或使用外部定义和汇编程序对这些数值进行计算和优化。两种方法,ZPLM和宏结合更为简单,与Zemax OpticStudio集成的更好,需要更少的编程技巧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:19:07

LangFlow OSSEC主机入侵防御配置

LangFlow 与 OSSEC:构建安全高效的 AI 工作流开发环境 在当前大模型技术快速落地的背景下,越来越多团队开始尝试通过可视化工具快速搭建 LLM 应用。LangFlow 正是这一趋势下的明星产品——它让非专业开发者也能像搭积木一样构建复杂的 AI 流程。但随之而…

作者头像 李华
网站建设 2026/4/23 13:17:41

Flutter 数据存储之 SharedPreferences 键值对存储

目录 一、简介 二、核心概念 三、使用步骤 1. 添加依赖 2. 导入包 3. 获取实例 4. 数据操作方法 四、工程化封装 4.1 为什么要封装? 4.2 统一键值管理:SPKeys 4.3 工具类实现:SPUtils 4.4 在项目中使用 4.5 小结 五、总结 一、…

作者头像 李华
网站建设 2026/4/23 14:52:29

25、Exchange Server 2007灾难恢复全攻略

Exchange Server 2007灾难恢复全攻略 在企业的日常运营中,Exchange Server 2007扮演着至关重要的角色,它负责着邮件的收发、存储等核心任务。然而,硬件故障、数据库损坏等问题随时可能导致服务器出现故障,影响企业的正常运转。因此,掌握Exchange Server 2007的灾难恢复方…

作者头像 李华
网站建设 2026/4/25 2:37:29

WinDbg内存转储分析:一文说清蓝屏排查流程

WinDbg内存转储分析实战:从蓝屏崩溃到根因定位的完整路径 你有没有遇到过这样的场景? 一台关键业务服务器突然黑屏重启,事件日志里只留下一句冷冰冰的“ The computer has rebooted from a bugcheck. ”——系统因严重错误重启。没有明确…

作者头像 李华
网站建设 2026/4/23 13:17:46

时序逻辑电路功耗优化:低功耗设计实践指南

时序逻辑电路功耗优化:从原理到实战的低功耗设计之道你有没有遇到过这样的问题?芯片明明功能跑通了,时序也收敛了,可一测功耗——待机电流高得离谱,电池撑不过半天。尤其在智能手表、无线传感器这类靠纽扣电池“续命”…

作者头像 李华
网站建设 2026/4/22 22:23:39

多电源域硬件电路设计图解说明

多电源域设计实战:从原理到避坑,一文讲透嵌入式系统供电架构你有没有遇到过这样的场景?一个看似简单的MCU系统,上电后ADC读数跳动剧烈;传感器偶尔失联,重启又恢复正常;低功耗模式下电流不降反升…

作者头像 李华