2016-12-17 8 views
0

Я пытаюсь построить коэффициент отражения, используя следующую формулу:Пустой участок в MATLAB

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

Повторив E2 значения с 2,56, 4, 9, 16, 25 и 81, я должен получить следующий результат (на первом этапе я просто хотел получить одно значение с E2 = 2.32):

Но, к сожалению, на экране результатов графика нет графики. Итак, в чем ошибка?

Примечание: Я использую MATLAB R2015a

+1

Вы рисуете * пункты * здесь вместо строки. Чтобы визуализировать точки, измените команду сюжета на что-то вроде этого сюжета (tetai, eta, 'o'); 'Также обратите внимание, что' sin' предполагает, что вы вводите угол в * radians *. Также прочитайте документацию 'sind'. Однако было бы лучше, если бы вы сохранили все значения в цикле и построили их в одной команде за пределами цикла, как предложено lyang –

+0

@Sardar_Usama Salam Serdar, почему бы не опубликовать свой код в качестве ответа и не прокомментировать ваши объяснения по коду как lyang ? Благодаря... –

ответ

8

Ошибки:

  1. Вы с помощью sin и cos и угол ввода в градусах. Либо преобразуйте угол, либо еще лучше используйте функции, предназначенные для этой цели. i.e sind и cosd соответственно.

  2. Вы ничего не видите на выходе, потому что вы начертите точку за точкой. Для этого необходимо указать marker. Но так или иначе, то, что вы хотите построить, это не так. Вместо этого вы хотите построить линию.

  3. Другая проблема при использовании 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|'); 

Выход:

Output

+0

Ты рок !!! Большое спасибо за ваш идеальный ответ :) Проголосовали ... –

+0

Я также попытался добавить текст как на графике, используя ** текст (E2i (k), 0, '\ leftarrow E2i (k)') **, но теперь работает. Как я могу это сделать? –

+0

Прочитайте документацию по [** 'text' **] (https://www.mathworks.com/help/matlab/ref/text.html) –

2

Вы можете попробовать создать вектор нан вне цикла, заполнить вектор в итерации, и участок вне цикла.

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

Отредактировано по телефону, не проверено.

+0

Кажется хорошей идеей, но поскольку я действительно новичок в MATLAB, не могли бы вы привести пример? Спасибо заранее ... –

+0

Спасибо, но результат участка не кажется таким, как указано выше. Вы протестировали его? –

+0

В любом случае, также благодаря вам за хороший подход и проголосуйте :) –

Смежные вопросы