Lambda = input('输入光的波长(单位为nm):'); Lambda = Lambda * 1e-9; d = input('输入M1和M2’之间的距离(单位为mm):'); d = d * 1e-3 ; n = input('透镜的折射率(单位为m):'); h = 0.001; f = 0.1; %透镜的焦距:m I0 = 1; Screen_length = 0.015; %定义干涉仿真范围:m [Screen_x,Screen_y] = meshgrid(linspace(-Screen_length,Screen_length,800)); interference_r = abs(Screen_x + 1i*Screen_y); i=atan(interference_r./f); sin(theta * pi / 180)=sin(i)./n; theta = asin(sin(theta * pi / 180)); sigma=2*d*cos(i)+h*(1-cos(i-theta))/cos(theta); I_delta = 2*sigma*pi/Lambda; I = 2*I0*(cos(I_delta)).^2; I = I./max(max(I)); %光强分布归一化 I = I*64; %光强归一,扩大显示 image(Screen_x(1,:),Screen_y(:,1),I); %设置x和y的像素,显示数值 colormap hot ; %也可以采用grey colorbar; xlabel('空间坐标x'),ylabel('空间坐标y'); title('迈克尔逊等倾干涉光强空间分布');改错
时间: 2024-03-01 07:55:20 浏览: 150
光的干涉仿真
这段代码存在以下几个错误:
1. `sin(theta * pi / 180)=sin(i)./n;` 这行代码左边的等式中,`sin(theta * pi / 180)` 表示赋值给一个数值,而不是一个变量。因此应该将其改为 `sin_value = sin(i)./n;`。
2. `theta = asin(sin(theta * pi / 180));` 这行代码中的 `theta` 变量未定义,应该将其改为 `theta = asin(sin_value);`。
3. `I_delta = 2*sigma*pi/Lambda;` 这行代码中的 `Lambda` 变量未定义,应该将 `Lambda` 改为 `Lambda = input('输入光的波长(单位为nm):'); Lambda = Lambda * 1e-9;`,即获取用户输入的波长。
4. `I = 2*I0*(cos(I_delta)).^2;` 这行代码中的 `I_delta` 变量未定义,应该将其改为 `I_delta = 2*sigma*pi/Lambda;`。
下面是改正后的代码:
```
Lambda = input('输入光的波长(单位为nm):'); Lambda = Lambda * 1e-9;
d = input('输入M1和M2’之间的距离(单位为mm):'); d = d * 1e-3 ;
n = input('透镜的折射率(单位为m):');
h = 0.001;
f = 0.1; %透镜的焦距:m
I0 = 1;
Screen_length = 0.015; %定义干涉仿真范围:m
[Screen_x,Screen_y] = meshgrid(linspace(-Screen_length,Screen_length,800));
interference_r = abs(Screen_x + 1i*Screen_y);
i=atan(interference_r./f);
sin_value = sin(i)./n; %修正
theta = asin(sin_value); %修正
sigma=2*d*cos(i)+h*(1-cos(i-theta))/cos(theta);
I_delta = 2*sigma*pi/Lambda; %修正
I = 2*I0*(cos(I_delta)).^2;
I = I./max(max(I)); %光强分布归一化
I = I*64; %光强归一,扩大显示
image(Screen_x(1,:),Screen_y(:,1),I); %设置x和y的像素,显示数值
colormap hot ; %也可以采用grey
colorbar;
xlabel('空间坐标x'),ylabel('空间坐标y');
title('迈克尔逊等倾干涉光强空间分布');
```
阅读全文