ZEMAX优化设计要点---【Zemax学习】

四. zemax 设计练习实例 与优化 基于zemax光学设计实例 单透镜设计 设计焦距100mm,相对孔径1/5,全市场2w=10°的单透镜系统,物距无限远,在可见光下工作,使用K5玻璃,光阑设置在贡献遇到的透镜的第一个光学表面 输入系统参数(入瞳直径,视场,波长范围) 透镜输入编辑(Lens Data Editor) 查看外形轮廓图 快捷键:ctrl+L 查看像差情况(Ray) 快捷键:ctrl+R 打开FFT MTF 图形窗口 ,查看像差情况 快捷键:ctrl+M 优化:设置像质评价函数 快捷键:F6 阅读详情

前言与目录

在光学设计领域,ZEMAX是一款被广泛使用的软件,它提供了一套完整的工具来优化光学系统的性能。本文将深入分析ZEMAX优化设计的关键步骤,从初步设计到最终优化,提供详细的操作指南。优化函数可以由多种不同形式的像差构成,具体取决于设计者的经验和偏好。将讨论几个在使用ZEMAX软件进行优化时的要点。


目录

一、常规优化方法

1、视场点平衡与光线追迹

2、求解功能的应用

3、缺省优化函数的使用

4、变量变化的监控

5、初始结构的选择

二、像差的选择和控制

1、一级像差的重要性

2、 横向像差与波像差

3、不可校正的像差

4、像质评价

三、边界条件限制

1、透镜的边界限制

2、玻璃材料的边界限制


在光学设计领域,ZEMAX是一款被广泛使用的软件,它提供了一套完整的工具来优化光学系统的性能。本文将深入分析ZEMAX优化设计的关键步骤,从初步设计到最终优化,提供详细的操作指南。

一、常规优化方法

1、视场点平衡与光线追迹

在设计的初期,ZEMAX优化时不需要追迹所有具有不同视场和波长的光线,这可以节省计算时间。对权重设置为0的视场或波长不进行追迹。以下是具体的操作建议:

-视场点平衡:选择适当的视场点数目,使视场划分为等面积的圆环。对于小视场,使用0、1两个视场;中等视场(小于20°)使用0、0.7和1三个视场;大视场使用0、0.577、0.816和1四个视场。

2、求解功能的应用

- 边界条件控制:尽量使用求解功能代替变量。例如,控制F数及有效焦距时,可以在曲率半径上使用边缘光线角或F数(F*)求解功能;在厚度上使用边缘光线高度求解功能控制焦点位置;使用拾取求解功能使不同面的对应量之间保持联系;使用位置求解功能控制长度。

3、缺省优化函数的使用

- 优化函数选择:对于入瞳为圆形(或考虑渐晕因子的椭圆形)的系统,使用高斯求积法。如果光学系统接近衍射极限,则使用RMS波前优化法;否则使用RMS光斑半径优化法。质心作为参考点通常比主光线更优。

4、变量变化的监控

- 像差与系统联系:要了解像差与系统的联系及其对系统的影响,需要查看RayF

zemax优化功能 在优化向导中,我们可以使用系统自带的评价函数,此时只需要描述我们想要的效果,就会自动生成评价函数。对于评价函数单调或者局部最小值就是全局最小值的情况,使用局部优化和全局优化的结果是类似的。zemax的三种优化方法中,局部优化会找到局部的极小值点,全局优化会找到整体的最小值点。以优化光线的光程差为目标,根据等光程原理,平行光在像空间聚焦在一点时,光程相等。X和Y方向的光斑:适用于有特定光斑要求的系统,或者X、Y轴分别汇聚在不同的位置。综合光斑:物点所有光束成像到像面上像点的大小,包含了所有像差的影响。 阅读详情

相关推荐

从零学光学设计 zemax中的三种优化

Zemax的学习记录 参考自zemax超级学习手册 1优化函数 ZEMAX中的函数优化分为三种,局部优化、全局优化、锥形优化。Local、Gloal、Hammer Optimization。 1.1局部优化 这种优化方法强烈依赖初始结构,系统初始结构通常也被称为系统的起点,在这一起点处优化驱使评价函数逐渐降低,直至到最低点。 1.2全局优化 使用多起点同时优化的算法,目的是找到系统所有的结构组合形式并判断哪个结构使评价函数值最小。 我的理解:如上图所示,算法设置为切分全局为n块,比较.

lqlq1996的博客 8526

Zemax操作35--双高斯镜头优化

双高斯

lzy750750的博客 1万+

ZEMAX优化方法---【Zemax学习】

在光学系统自动设计中,优化设计是光学设计中的重要阶段,也是ZEMAX软件的核心功能,涉及评价函数、权因子、阻尼因子等重要概念。在常用的阻尼最小二乘法优化设计的基础上,ZEMAX给我们提供了三种优化选择:Optimization(局部优化)、Global Search(全局优化)和 Hammer Optimization(锤形优化)。

yh的博客 4436

Zemax、Code V、LightTools对比:光学仿真软件选型与工程实践指南

光学仿真作为现代光学设计与产品研发的核心技术,其原理在于通过计算机建模与光线追迹算法,精确模拟光在介质中的传播、折射、反射及散射等物理行为。这项技术的核心价值在于能够大幅降低物理原型制作成本,缩短研发周期,并实现对复杂光学系统性能的预测与优化。在成像镜头设计、照明系统开发、激光雷达以及AR/VR光学等广泛的应用场景中,选择合适的仿真工具是确保项目成功的关键。本文聚焦于业界广泛使用的Zemax OpticStudio、Code V和LightTools三款软件,深入解析其各自在序列成像设计、高端光学系统优化以

weixin_33960567的博客 438

光学镜头设计系统路径:从像差理论到Zemax优化与公差分析

光学设计是通过控制透镜结构实现光线精准汇聚的工程学科,其核心原理涉及像差理论、孔径与视场约束。像差直接影响成像质量,而MTF和点列图是评价镜头性能的关键指标。借助Zemax等光学设计软件,工程师能进行初始结构搭建、评价函数配置与优化迭代,并通过公差分析确保量产可行性。该技术广泛应用于手机镜头、车载镜头、投影系统等精密光学领域。本文以光学镜头设计训练营的授课逻辑为线索,系统梳理从高斯光学、像差分类到软件实操、案例验证的完整学习路径,帮助从业者建立从像差现象反推结构问题的工程直觉,并掌握双胶合透镜等最小可复现案

weixin_30000735的博客 291

ZEMAX牛顿望远物镜的优化设计

zemax牛顿望远镜系统

VJCP_90909Bu0的博客 4758

ZEMAX光学设计入门:从正版获取到准直透镜优化全流程

专业光学仿真依赖光线追迹算法,ZEMAX(OpticStudio)作为行业标准工具,能将设计想法转化为可制造方案。然而新手搜索时易被破解版安装教程误导,陷入版本过旧、安全风险等困境。正确的学习路径应从官方试用或教育授权开始,掌握序列模式与非序列模式的核心原理,通过评价函数驱动优化完成准直透镜设计。本文覆盖软件环境准备、透镜建模、优化调试、公差分析及黑盒文件导出等环节,为光学设计初学者提供一条合规、高效的ZEMAX实践指南。

weixin_28523493的博客 306

Zemax光学设计与优化实战教程

在Zemax中进行光学设计,首先需要定义系统中的光学元件。光学元件包括透镜、反射镜、棱镜、光阑等基本光学部件。每一种光学元件都有其特定的属性和参数,用户需要根据实际设计需求进行添加和编辑。添加光学元件的操作通常按照以下步骤进行:在视图区中,通过菜单栏“操作”(Operate)下的“添加”(Add)选项来选择添加所需的光学元件。在添加光学元件后,需要通过编辑栏(Edit Bar)对元件的具体参数进行详细设置。这些参数可能包括折射率、曲率半径、元件厚度、材料类型等。

weixin_32389853的博客 2637

ZEMAX光学设计材料库详解

ZEMAX光学设计软件是广泛应用于光学工程领域的专业软件,它集成了光路分析、系统优化和光线追踪等多功能于一体,为设计师提供了一个从概念设计到最终产品制造的完整解决方案。ZEMAX以其直观的用户界面、强大的计算能力及丰富的数据库,被公认为光学设计领域的行业标准之一。本章将介绍ZEMAX的功能特色和在现代光学设计中的应用价值,帮助读者建立起对软件的整体认识。我们将探讨ZEMAX如何简化设计流程,提高设计精度,以及它在不同光学系统设计中的关键作用。

weixin_33256096的博客 2302

Zemax光学设计软件中的LED设计实务

Zemax是一款由美国Zemax Development Corporation开发的光学设计软件,广泛应用于光学设计、照明系统设计、激光系统设计等领域。它通过提供精确的光线追踪技术、优化算法和丰富的光学元件库,帮助设计师快速构建、模拟和优化光学系统。设计流程是将初步设计方案转换为最终产品的过程,涉及到方案的制定、迭代和改进等多个环节。在进行LED光学设计之前,了解光源的类型及其特性参数是至关重要的。光源可以按照多种方式分类,其中最常见的是按照发光原理分类。

weixin_42599908的博客 1660

Qt 5.15.2静态编译避坑实录:MinGW 32位版从源码到Creator配置的全流程踩坑总结

本文详细介绍了Qt 5.15.2 MinGW 32位版本的静态编译全流程,包括环境准备、配置参数优化、编译过程监控及安装后配置。重点解决了静态编译中的常见问题,如参数顺序敏感、路径引号问题等,并提供了性能对比实测数据,帮助开发者高效完成静态编译。

weixin_26749245的博客 267

刚入职,软件测试岗,有点迷茫不知道下一步怎么提升自己

软件测试前景和发展都是不错,已经入了软件测试这行业就坚挺下去

大白的博客 2210

从零上手HiAgent:构建能听懂指令的智能体框架实战指南

智能体(Agent)作为人工智能领域的重要范式,正从传统的预设流程自动化转向以目标驱动的自主规划与执行。其核心原理在于利用大语言模型(LLM)作为决策大脑,通过任务规划、工具调用与记忆机制,将模糊的自然语言指令转化为可执行的工作流。这一技术显著提升了人机协作的效率和自然度,其价值在自动化办公、数据分析与智能流程编排等场景中尤为突出。本文聚焦于HiAgent这一具体框架,深入解析其作为智能体开发平台的核心架构,涵盖规划器、执行器、工具集等关键组件,并提供从环境配置、自定义工具开发到复杂任务链构建的完整工程实践

weixin_29266007的博客 866

西门子828D/840DSL数控机床产量数据采集实战:手把手教你绕过授权限制(附Demo源码)

本文详细介绍了西门子828D/840DSL数控机床产量数据采集的实战技术,包括绕过授权限制的替代方案和实现方法。通过分析通信协议、配置参数和数据处理,提供了一套高效且合规的数据采集解决方案,并附有Demo源码,帮助技术人员快速上手。

weixin_28278377的博客 758

微信小程序使用TCP通信

最终目的:在微信小程序内实现对局域网发起TCP通信实现步骤:建立TCP服务 + 小程序发起通信。

Big_YiFeng的博客 5608

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

融合方式技术路径优点局限或注意事项UI 嵌入iframe 表单嵌入快速集成、用户体验一致无法自定义交互逻辑明道云调用 DifyAPI 请求节点工作流自动化、逻辑灵活有 timeout 限制、需优化 promptDify 调用明道云插件或 API 调用节点可查询实际业务数据、增强 AI 智能需理解明道云 API 结构、权限设置复杂明道云与 Dify 的结合为低代码平台注入了智能动力。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1179

CDMamba安装配置Windows(50系列的显卡)

本人家里的显卡是RTX3050的,运行起来非常缓慢,大家可以参考上一篇文章,以下是用RTX5080配置的CDMamba,里面有一些库没有更新,因此会比较坑爹。就是pytorch已经更新了,搭配的是cuda12.8,但是cdmamba里的mmcv只更新到cuda12.1的版本,当然很多人会说那就向下兼容,但是笔者已经尝试了,会一直提示mmcv的问题。因此,索性直接不用mmcv。

hanfeng5268的博客 682

某验SVG图标验证码识别思路(非训练)

本文提出了一种无需训练的某验SVG图标验证码识别方法。通过分析SVG文件结构,使用正则表达式提取静态图标数据,并借助CairoSVG库转换为PNG格式。随后采用坐标定位方式裁剪出12个固定位置的图标,最后利用ResNet50提取特征,通过余弦相似度匹配目标图标。该方法避免了训练目标检测模型,实现了高效准确的验证码识别。关键步骤包括SVG文件预处理、图标定位裁剪和基于预训练模型的相似度比对。

九月镇灵将的博客 409

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: ZEMAX优化方法---【Zemax学习】
下一篇: ZEMAX优化步骤简介---【Zemax学习】
万叶叶
博客等级 码龄4年 2456粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值