MATLAB中的空图

时间:2016-12-17 10:32:26

标签: matlab plot matlab-figure

我试图使用以下公式绘制反射系数:

enter image description here

代码:

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的单个值):

enter image description here

但不幸的是,情节结果屏幕上没有图形。那么,错误是什么?

注意:我使用MATLAB R2015a

2 个答案:

答案 0 :(得分:10)

<强>错误:

  1. 您正在使用sincos并以度为单位输入角度。转换角度甚至更好地使用专用于此目的的功能。分别是sindcosd

  2. 您在输出中看不到任何内容,因为您正在逐点绘制。为此,应该指定一些marker。但无论如何,你想要绘制的不是这个。您想要绘制一条线。

  3. 使用plot的另一个问题是,您没有绘制您认为应该绘制的内容。您在问题中显示的图像是 |Γᵇ⊥| θᵢ之间的图,而不是Γᵇ⊥θᵢ

  4. 固定代码:

    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|');
    

    <强>输出:

    Output

答案 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')

手机编辑,未经测试。