2015-04-01 82 views
0

我的下面的代码生成一个带有x轴循环变量的图形。具体而言,eta_22从0到1变化,循环迭代大小为0.01。两个变量的图形在x轴上同时变化

该行下面的代码是源函数文件。

我的问题是:我该如何生成一个图表,其中eta_1从0到1变化,循环迭代大小为0.01? (我想在y轴上绘制AA图,并且eta_1,eta_2从0到1变化)。

我尝试了:我试图创建嵌套的“for”循环,但绘图本身循环。我试图将情节线放在“for”循环之外,但那不起作用。

感谢您的任何帮助。

global Lambda mu mu_A mu_T beta tau eta_1 eta_2 lambda_T rho_1 rho_2 gamma 

    alpha = 100; 
    TIME = 365; 
    eta_22 = zeros(1,alpha); 
    AA = zeros(1,alpha); 

    for m = 1:1:alpha 
    eta_2 = m./alpha; 
    eta_22(m) = m./alpha; 
    Lambda = 531062; 
    mu = (1/70)/365; 
    mu_A = 0.25/365; 
    mu_T = 0.2/365; 
    beta = 0.187/365; 
    tau = 4/365; 
    lambda_T = 0.1; 
    rho_1 = 1/60; 
    rho_2 = (rho_1)./(270.*rho_1-1); 
    gamma = 1e-3; 
    eta_1 = 0; 

    S0 = 191564208; 
    T0 = 131533276; 
    H0 = 2405659; 
    C0 = 1805024; 
    C10 = 1000000; 
    C20 = 1000000; 
    CT10 = 500000; 
    CT20 = 500000; 
    y0 = [S0, T0, H0, C0, C10, C20, CT10, CT20]; 

    [t,y] = ode45('SimplifiedEqns',[0:1:TIME],y0); 
    S = y(:,1); 
    T = y(:,2); 
    H = y(:,3); 
    C = y(:,4); 
    C1 = y(:,5); 
    C2 = y(:,6); 
    CT1 = y(:,7); 
    CT2 = y(:,8); 
    N = S + T + H + C + C1 + C2 + CT1 + CT2; 

    HIVinf1=[0:1:TIME]; 
    HIVinf2=[beta.*(S+T).*(C1+C2)./N]; 
    HIVinf=trapz(HIVinf1,HIVinf2); 
    AA(m) = HIVinf; 
    end 

    plot(100.*eta_22,AA./1000) 

_____________________________________________________________________________________________________ 

    function ydot = SimplifiedEqns(t,y) 

    global Lambda mu mu_A mu_T beta tau eta_1 eta_2 lambda_T rho_1 rho_2 gamma 

    S = y(1); 
    T = y(2); 
    H = y(3); 
    C = y(4); 
    C1 = y(5); 
    C2 = y(6); 
    CT1 = y(7); 
    CT2 = y(8); 

    N = S + T + H + C + C1 + C2 + CT1 + CT2; 
    ydot = zeros(8,1); 

    ydot(1)=Lambda-mu.*S-beta.*(H+C+C1+C2).*(S./N)-tau.*(T+C).*(S./N); 
    ydot(2)=tau.*(T+C).*(S./N)-beta.*(H+C+C1+C2).*(T./N)-(mu+mu_T).*T; 
    ydot(3)=beta.*(H+C+C1+C2).*(S./N)-tau.*(T+C).*(H./N)-(mu+mu_A).*H; 
    ydot(4)=beta.*(H+C+C1+C2).*(T./N)+tau.*(T+C).*(H./N)-(mu+mu_A+mu_T+lambda_T).*C; 
    ydot(5)=lambda_T.*C-(mu+mu_A+rho_1+eta_1).*C1; 
    ydot(6)=rho_1.*C1-(mu+mu_A+rho_2+eta_2).*C2; 
    ydot(7)=eta_1.*C1-(mu+rho_1+gamma).*CT1; 
    ydot(8)=eta_2.*C2-(mu+rho_2+gamma.*(rho_1)./(rho_1+rho_2)).*CT2+(rho_1).*CT1; 
    end 
+0

上增持;在for循环中绘图后 – madbitloman 2015-04-01 03:53:51

+0

好的,那么为eta_1创建一个循环呢? – 2015-04-01 03:56:01

+1

将每个eta_1和eta_2存储在二维数组中,然后绘制(x,eta_total(:,1),x,eta_total(:,2)) – madbitloman 2015-04-01 03:57:40

回答

1

最简单的方法:

eta_1=0:1/alpha:1; 
eta_2=0:1/alpha:1; 
lsize=length(eta_1) % I assume eta_1 and eta_2 are of the same size 

for i=1:lsize 
%Update your AA(i) here 
end 
plot(eta_1,AA,eta_2,AA)