我试图使用以下公式绘制反射系数:
代码:
E1=1;
E2=2.32*E1;
for tetai=1:90
numerator=cos(tetai)-(sqrt(E2/E1).*sqrt(1-(E1/E2).*sin(tetai)^2));
denominator=cos(tetai)+(sqrt(E2/E1).*sqrt(1-(E1/E2).*sin(tetai)^2));
eta=numerator/denominator;
plot(tetai,eta,'r');
hold on
end
title('Plots')
xlabel('\Theta')
ylabel('\Gamma')
在用2.56,4,9,16,25和81重复E2值之后,我应该得到以下结果(在第一步我只想获得E2 = 2.32的单个值):
但不幸的是,情节结果屏幕上没有图形。那么,错误是什么?
注意:我使用MATLAB R2015a
答案 0 :(得分:10)
<强>错误:强>
您在输出中看不到任何内容,因为您正在逐点绘制。为此,应该指定一些marker。但无论如何,你想要绘制的不是这个。您想要绘制一条线。
使用plot
的另一个问题是,您没有绘制您认为应该绘制的内容。您在问题中显示的图像是 |Γᵇ⊥| 和θᵢ之间的图,而不是Γᵇ⊥和θᵢ强>
固定代码:
E1=1;
E2i=[2.32, 2.56, 4, 9, 16, 25, 81];
gamma = zeros(1,91); %Pre-allocation
for k=1:7
E2 = E2i(k);
for theta_i=0:90
numerator=cosd(theta_i)- sqrt((E2/E1)*(1-(E1/E2)*sind(theta_i)^2));
denominator=cosd(theta_i)+ sqrt((E2/E1)*(1-(E1/E2)*sind(theta_i)^2));
gamma(theta_i+1)=numerator/denominator;
end
plot(0:90,abs(gamma));
hold on;
text(45,abs(gamma(45)),['\epsilon_2/\epsilon_1 = ',num2str(E2/E1)]);
end
title('Plots'); xlabel('\theta_i (degrees)'); ylabel('|\Gamma^b_\perp|');
<强>输出:强>
答案 1 :(得分:2)
您可以尝试在循环外创建一个nan矢量,在迭代中填充矢量,并在循环外部绘制。
E1=1;
E2=2.32*E1;
Data=nan(90);
for tetai=1:90
numerator=cos(tetai)-(sqrt(E2/E1).*sqrt(1-(E1/E2).*sin(tetai)^2));
denominator=cos(tetai)+(sqrt(E2/E1).*sqrt(1-(E1/E2).*sin(tetai)^2));
eta=numerator/denominator;
Data(tetai)=eta;
end
plot(Data, 'r');
title('Plots')
xlabel('\Theta')
ylabel('\Gamma')
手机编辑,未经测试。