MATLAB-偶次非球面曲线拟合

本文介绍了偶次非球面的特性,重点讲解了如何通过矢高公式获取离散点数据后进行曲线拟合,以求解k、c和偶次非球面系数。给出了非线性拟合的代码示例,展示了使用lsqcurvefit函数进行参数估计的过程和结果图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

偶次非球面曲线拟合



前言

偶次非球面为旋转对称面,所以只需要得到一个截面上的离散点进行矢高公式的曲线拟合即可,然后将曲线旋转对称得到面型,或者将参数导入光学软件中得到透镜面。


一、矢高公式

以下公式为偶次非球面的矢高公式,z为矢高,r为截面到轴的距离,c为非球面的曲率,k为圆锥系数,ai为偶次非球面的 i 阶系数。
矢高公式以下为某偶次非球面截面矢高图。
在这里插入图片描述在已知离散点的情况下,我们相当于已知z和r的对应关系,需要得到的是k、c、ai的值。

二、曲线拟合

以下为参考代码:

% 非线性拟合P
% 实际曲线绘图
subplot(1,2,1);
plot(P(:,2),P(:,1));hold on;
% 拟合方程
digits(8)
Py = P(:,1);Pz = P(:,2);
% 系数矩阵a,a1设定为k,其余对应,a7设定为c,就是曲率
fun = @(a,Py)(a(7)*Py.^2./(1+sqrt(1-(1+a(1))*a(7)^2*Py.^2))+a(2)*Py.^4+a(3)*Py.^6+a(4)*Py.^8+ ...
    a(5)*Py.^10+a(6)*Py.^12)% 偶次非球面矢高
a0 = [0,0,0,0,0,0,0];
a = lsqcurvefit(fun,a0,Py,Pz)
z = fun(a,Py);
plot(z,Py);   
  • P为离散点坐标矩阵,一共有n行2列。第一列为离散点坐标的y(可视为r),第二列为离散点坐标的z(即矢高)。
  • 分别用Py和Pz来存储坐标数据,同时在写矢高方程“fun”时,通过@()来定义参数数组a和自变量Py,a为需要通过拟合得到的方程参数(可以参看代码中的注释),然后@()后的式子为非球面矢高方程,如果你要拟合其他方程,一样也是改。
  • a0为参数数组a的初始值,即在非线性拟合迭代过程中,默认从a0设定的值开始计算。
  • 然后使用 lsqcurvefit()函数进行拟合,可以得到参数矩阵a的值,然后将已知的参数矩阵a和Py带入矢高方程中,得到拟合的坐标点进行绘图。(还有其他拟合函数,可以参看help文档)

结果如下图:
拟合

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值