偶次非球面曲线拟合

偶次非球面曲线拟合


文章目录

  • 偶次非球面曲线拟合
  • 前言
  • 一、矢高公式
  • 二、曲线拟合


前言

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


一、矢高公式

以下公式为偶次非球面的矢高公式,z为矢高,r为截面到轴的距离,c为非球面的曲率,k为圆锥系数,ai为偶次非球面的 i 阶系数。
偶次非球面曲线拟合_第1张图片以下为某偶次非球面截面矢高图。
偶次非球面曲线拟合_第2张图片在已知离散点的情况下,我们相当于已知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文档)

结果如下图:
偶次非球面曲线拟合_第3张图片

你可能感兴趣的:(MATLAB学习,matlab)