乐于分享
好东西不私藏

AI辅助程序开发纪实

AI辅助程序开发纪实
最近在尝试优化一个MATLAB程序,在连续位置拆入任意多个掩膜元件,通过不同的算法计算不同光场的传输并且写一个程序。尝试着在之前的代码上重构。
首先用Python写了一个后端,通过添加不同的元件,可以输出XZ,YZ以及XY图。
最后尝试使用Qt写了一个界面,但是感觉这里面的可视化的部分总是有一些问题。想要添加不同位置的XY切片,并且在运算后能够缓存三维的光场数据,可视化的时候不用重复运行。或者可以采用不同的探测器,比如XY探测器,YZ探测器,一维曲线探测器。
于是又开始借助MATLAB另起炉灶。
一开始我想,如果我可以写一个函数,输入一个场,和方法然后给出结果的场。
采用角谱法、瑞利索末菲积分、菲涅尔衍射、夫朗禾费衍射。
U = ["RS","AS","Fresnel","Fraunhofer"];for i =1:length(U)    subplot(1,length(U),i)    U_out = propagate_light(U_in.*A,20,lambda,dx,dy,U(i));    I = U_out.*conj(U_out);    imagesc(x,y,I);    axis equal;    title(["Method: ",U(i)])    axis([-L/2,L/2,-L/2,L/2])end
之后又想,如果能够有一个函数可以查看任意投影(YZ,XZ)在x和y的切片就好了,于是:
z_vec = 0.1:0.05:20;  % 0.1 mm 步进到 20 mmmethod = 'Fresnel';% 获取 XZ 切片 (固定 y=0)[E_xz, x_axis, z_axis] = propagate_slice(U_in.*A, z_vec, ...    lambda, dx, dy, method, 'xz', 0);figure; imagesc(z_axis,x_axis, abs(E_xz)');xlabel('x (mm)'); ylabel('z (mm)'); title('XZ slice amplitude');
然后突然想到如果有很多mask列表,也可以直接可视化。于是写了一个新的函数。
%% 多掩膜传播演示(掩膜以矩阵形式输入)clc;clear; close all;% 系统参数N = 512;                % 网格点数L = 4;                  % 窗口边长 (mm)lambda = 632.8e-6;      % 波长 (mm)% 创建坐标网格(用于构造掩膜矩阵)x = linspace(-L/2, L/2, N);dx = x(2)-x(1); dy = dx;[X, Y] = meshgrid(xx);[theta,r] = cart2pol(X,Y);mask1 = exp(-1i*2*pi/lambda*(X.^2+Y.^2)/2/40);mask2 = exp(-1i*2*pi/lambda*sqrt(X.^2+Y.^2)*0.01);mask3 = triangle_hole(0.2,0,N,L);% 构造两个圆形掩膜矩阵(透过率为 1 或 0%mask1 = double(sqrt(X.^2 + Y.^2) <= 0.2);   % 半径 0.2 mm%mask2 = double(sqrt(X.^2 + Y.^2) <= 0.4);   % 半径 0.4 mm% 掩膜元胞数组masks = {mask1, mask1,mask3};z_masks = [050,70];      % 掩膜位置 (mm)z_det = 100;             % 探测器位置 (mm)% 初始高斯光束(束腰 0.3 mm,平面波前)w0 = 0.3;U0 = LG_beam(r,theta,0,w0,lambda,dx,dy,0,2);% ----- 1. XY 探测面 -----multi_mask_propagation(N, L, lambda, masks, z_masks, 'XY', z_det, ...    'method''AS''U0', U0);title('XY Detector at z = 30 mm');% ----- 2. XZ 切片(y=0,z 轴水平)-----multi_mask_propagation(N, L, lambda, masks, z_masks, 'XZ', z_det, ...    'method''AS''U0', U0, 'slice_pos'0'z_step'0.2);title('XZ Slice at y = 0 mm');% ----- 3. YZ 切片(x=0,z 轴水平)-----multi_mask_propagation(N, L, lambda, masks, z_masks, 'YZ', z_det, ...    'method''AS''U0', U0, 'slice_pos'0'z_step'0.2);title('YZ Slice at x = 0 mm');% ----- 4. 一维横向探测器(z=30 mm,y=0 处沿 x 的强度)-----multi_mask_propagation(N, L, lambda, masks, z_masks, '1D', z_det, ...    'method''AS''U0', U0, 'slice_pos'0);title('1D Profile at z = 30 mm, y = 0');% ----- 5. 轴向一维探测器(轴上点 x=0,y=0)-----multi_mask_propagation(N, L, lambda, masks, z_masks, 'axial_XZ', z_det, ...    'method''AS''U0', U0, 'slice_pos'0'z_step'0.1);title('Axial intensity (x=0, y=0)');% ----- 6. 轴向一维探测器(离轴点 x=0,y=0.2 mm)-----multi_mask_propagation(N, L, lambda, masks, z_masks, 'axial_YZ', z_det, ...    'method''AS''U0', U0, 'slice_pos'0.2'z_step'0.1);title('Axial intensity (x=0, y=0.2 mm)');
最后利用这一套函数写了一个基于MATLAB uicontrol的界面
但是MATLAB的界面十分不美观,简直没招了。于是我把和DEEPSEEK的对话分享给了TRAE,让它给我根据这个对话写一个Python后端并且写一个基于PyQt5的界面。
以下为对话链接:
https://chat.deepseek.com/share/h6ebwpqgnk7srzrnsj
明天起来看看TRAE返回的结果怎么样。
PS:一个小细节:由于最近用Python比较对,MATLAB语法生疏了,在想如何写For循环的时候我还在For i in range(xx),hh, 所以只能问DeepSeek MATLAB中的for语句如何写。
本期只是记录AI辅助软件开发的一点经历,如果感觉有用可以点个赞,代码随便取用。专业的事情要交给专业的事情做。突然觉得在AI的时代人真正变成产品经理,人是提需求和改Bug的,AI是做牛马打工的。
后续的细节可能还要调整,包括如何优化流程,如何保证结果是正确有效的。