% 作者:ZQJ % 日期:2021.1.7 星期四 %***********************模拟单缝衍射图样************************** % 注:单缝为竖直长条状 该仿真可以理解为:基于夫琅禾费衍射 clear,clc; % 基本参数输入及处理********************************* % 本例输入:Lambda = 632.8; a = 0.2; L = 1; Lambda = input('输入单色光的波长(单位为nm):'); Lambda = Lambda * 1e-9; %波长单位转为:m a = input('输入单缝的宽度(单位为mm):'); a = a * 1e-3; %缝间隙单位转为:m L = input('输入缝到屏的距离(单位为m):'); Xmax = 2*Lambda*L/a; %Xmax位置(边界)--单位为:m x = linspace(-Xmax,Xmax,61); %坐标取样61份 light_x = linspace(-a/2,a/2,61); %单缝宽度上取61份点光源 y = zeros(1,61); for num =1:61 r = sqrt((x(num)-light_x).^2 + L^2); %各波列到点的距离 phi = 2*pi.*(r-L)./Lambda; %相位差 sumcos = sum(cos(phi)); sumsin = sum(sin(phi)); y(num) = (sumsin^ 2 + sumcos^2)./61^2; end % 衍射光强灰度分布图************************* I = y * 255; %光强归一化 并转为255灰度值 subplot(2,1,1); image(x,Xmax,I); %设置x和y的像素,显示数值 colormap(gray(255)); %妆点灰度色彩 xlabel('空间坐标x'); title('衍射光强空间分布'); % 衍射光强函数分布图************************* subplot(2,1,2); plot(x,y,'*',x,y); axis([-Xmax,Xmax,0,1]); xlabel('空间坐标x'), ylabel('衍射光强度'); title('单缝衍射光强空间分布函数'); grid on;
时间: 2023-07-23 14:02:33 浏览: 142
这段代码是用来模拟单缝衍射图样的。首先,用户需要输入单色光的波长(单位为nm),单缝的宽度(单位为mm),以及缝到屏的距离(单位为m)。然后,根据输入的参数计算出一些基本参数,如Xmax位置(边界)和坐标取样。接下来,利用循环计算各个波列到点的距离和相位差,并将计算结果进行累加。最后,将计算得到的光强归一化并转为255灰度值,绘制衍射光强灰度分布图和衍射光强函数分布图。
请问你有什么问题吗?
相关问题
def qmnh(x,y,z): #读取行数 h =len(x) A = [[sum(x ** 4), sum((x ** 3) *y), sum((x ** 2)*y**2), sum(x ** 3), sum(x ** 2 * y), sum(x ** 2)], [sum(x ** 3 * y), sum(x ** 2 *y ** 2), sum(x * y ** 3), sum(x ** 2 * y), sum(x * y ** 2),sum(x * y)], [sum(x ** 2 * y ** 2), sum(x *y ** 3), sum(y ** 4), sum(x * y ** 2), sum(y ** 3), sum(y ** 2)], [sum(x ** 3), sum(x ** 2 * y), sum(x * y ** 2), sum(x ** 2), sum(x * y), sum(x)], [sum(x ** 2 * y), sum(x * y** 2), sum(y ** 3), sum(x * y), sum(y ** 2), sum(y)], [sum(x ** 2), sum(x * y), sum(y ** 2), sum(x), sum(y), h]] B = [[sum(z * x ** 2)], [sum(z*x* y)], [sum(z * y ** 2)], [sum(z * x)], [sum(z * y)], [sum(z)]] Xd=np.linalg.solve(A,B) X=[float(Xd[0]),float(Xd[1]),float(Xd[2]),float(Xd[3]),float(Xd[4]),float(Xd[5])] Dz=0 for i in range(len(x)): zqj=Xd[0]*x[i]*x[i] +Xd[1]*x[i]*y[i]+Xd[2]*y[i]*y[i]+Xd[3]*x[i]+Xd[4]*y[i]+Xd[5] dz=pow(abs(zqj)-abs(z[i]),2) Dz=Dz+dz rmse=m.sqrt(Dz/len(x)) #print("z = {0}*x*x +{1}*x*y+{2}*y*y+{3}*x+{4}*y+{5}".format(X[0],X[1],X[2],X[3],X[4],X[5])) return X,rmse
这是一个使用最小二乘法拟合二元二次函数的函数。给定一组数据点(x, y, z),函数会返回拟合函数的系数和均方根误差(RMSE)。
函数的输入参数是x、y、z,分别表示数据点的x坐标、y坐标和z值。
函数内部首先计算出系数矩阵A和结果矩阵B。然后使用numpy库中的线性方程组求解函数(np.linalg.solve)解出系数矩阵X。
接下来,函数计算拟合函数在每个数据点上的预测值,并计算预测值与真实值之间的差的平方。将所有差的平方累加,得到总的差的平方和Dz。最后,计算均方根误差RMSE,即将Dz除以数据点个数再开根号。
函数返回拟合函数的系数X和均方根误差RMSE。
请注意,此处使用了numpy库中的求解线性方程组的函数np.linalg.solve。如果未安装numpy库,请先安装。
Error: getaddrinfo ENOTFOUND 96f0e031-f37a-48ef-84c7-2023f6360c0a.bspapp.com
Error: getaddrinfo ENOTFOUND 96f0e031-f37a-48ef-84c7-2023f6360c0a.bspapp.com 是一个网络错误,它表示无法解析域名 96f0e031-f37a-48ef-84c7-2023f6360c0a.bspapp.com。这个错误通常发生在客户端试图与指定的域名建立连接时,但无法找到该域名的IP地址。可能的原因包括域名输入错误、网络连接问题或目标服务器无法访问。要解决这个问题,可以尝试检查域名输入是否正确,并确保网络连接正常。如果问题仍然存在,可能需要联系服务器管理员或网络服务提供商以获取进一步的帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [uniapp 命令行编译及运行调试中出现xx.bspapp.com 连接不上问题解决方法](https://blog.csdn.net/ZQJ/article/details/131303526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [VUE Error: getaddrinfo ENOTFOUND localhost](https://download.csdn.net/download/weixin_38715831/12760488)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文