2016-06-23 7 views
0

Добрый день, Мне было интересно, можно ли в любом случае выполнить работу, выполненную мной в MATLAB, вместо повторения тех же уравнений, чтобы изменить одну и ту же переменную?Можно ли сделать всю работу в одном цикле?

r=1:0.1:20; 
A=(r+1./r)./4; 
%%%%%%%%%%%%%%%%%%%%%%%%% 
x1=0; 
R1=((r+1./r)-2)./((r+1./r)+x1); 
B1=(1-(x1/2)^2)^-0.5; 
NUM1= 2 + (0.5.*x1.*(r+1./r)); 
DUM1=(r- 1./r).*(1-(x1/2)^2)^0.5; 
C1=EA(NUM1./DUM1); 
G1=A.*B1.*C1; 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
x2=-0.1; 
R2=((r+1./r)-2)./((r+1./r)+x2); 
B2=(1-(x2/2)^2)^-0.5; 
NUM2= 2 + (0.5.*x2.*(r+1./r)); 
DUM2=(r- 1./r).*(1-(x2/2)^2)^0.5; 
C2=EA(NUM2./DUM2); 
G2=A.*B2.*C2; 

figure 
plot(r,G1,'b',r,G2,'r',r,G3,'g',r,G4,'k',r,G5,'c',r,G6,'y','Linewidth',3) 
xlabel('$r$','Interpreter','latex','FontSize',18) 
ylabel('$G=\gamma P_P L$','Interpreter','latex','FontSize',18) 
title('Gain vs r for different values of D/sqrt(M)') 
legend('0','-0.1','-1','-1.5','0.5','1.5','1') 
%% The function G for different values of x(or equivalent R) are plotted below sigma 0 %is a notation i am using for different R 
figure 
plot(R1,G1,'b--',R2,G2,'r',R3,G3,'g',R4,G4,'k',R5,G5,'b--',R6,G6,'r','Linewidth',3) 
xlabel('$\sigma_0$','Interpreter','latex','FontSize',18) 
ylabel('$G=\gamma P_P L$','Interpreter','latex','FontSize',18) 
title('Gain vs r for different values of D/sqrt(M)') 
legend('0','-0.5','0.1','1') 

Так что мой вопрос вместо того, чтобы повторять то же уравнение R и G просто изменить одну переменную, мы можем сделать то же работу в 10 раз и сделать код короче, с помощью петли и все еще получить те же участки? Спасибо

+0

Если я правильно вас понимаю, то вы хотите, чтобы повторялось «plot (R, G)» в for-loop. я предполагаю, что вы обнаружили, что новый сюжет будет переопределять старый, но есть синтаксис 'hold on' для защиты этих старых рисунков. – Gnimuc

+0

И не забудьте «удержать» в конце! – buzjwa

+0

Что такое переменная 'EA'? – BillBokeey

ответ

0

Вы должны деформировать все в функции как:

function rxPlot(r,x) 
A = (r+1./r)./4; 
G = zeros(length(A),length(x)); 
R = zeros(length(A),length(x)); 

for k=1:length(x) 
    R(:,k) = ((r+1./r)-2)./((r+1./r)+x(k)); 
    B = (1-(x(k)/2)^2)^-0.5; 
    NUM = 2 + (0.5.*x(k).*(r+1./r)); 
    DUM = (r- 1./r).*(1-(x(k)/2)^2)^0.5; 
    C = EA(NUM./DUM); 
    G(:,k) = A.*B.*C; 
end 
plot(r,G,'Linewidth',3) 
xlabel('$r$','Interpreter','latex','FontSize',18) 
ylabel('$G=\gamma P_P L$','Interpreter','latex','FontSize',18) 
title('Gain vs r for different values of D/sqrt(M)') 
legend('0','-0.1','-1','-1.5','0.5','1.5','1') 

figure; 
plot(R,G,'Linewidth',3) 
xlabel('$\sigma_0$','Interpreter','latex','FontSize',18) 
ylabel('$G=\gamma P_P L$','Interpreter','latex','FontSize',18) 
title('Gain vs r for different values of D/sqrt(M)') 
legend('0','-0.1','-1','-1.5','0.5','1.5','1') 
end 

А потом просто вызвать его с входом:

r = 1:0.1:20; 
x = [0 -0.1 -1 -1.5 0.5 1.5 1]; 
rxPlot(r,x) 

Является ли это работает в случае необходимости?

+0

Большое спасибо –