【问题标题】:Plot of two variables varied simultaneously, on x-axis在 x 轴上同时变化的两个变量的图
【发布时间】:2015-04-01 03:36:21
【问题描述】:

我的以下代码生成了一个带有 x 轴循环变量的图形。具体来说,eta_22 从 0 变化到 1,循环迭代大小为 0.01。

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

我的问题是:如何生成一个 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

【问题讨论】:

  • 加持;在你的 for-loop 情节之后
  • 好的,为 eta_1 创建一个循环怎么样?
  • 将每个 eta_1 和 eta_2 存储在二维数组中,然后 plot(x,eta_total(:,1),x,eta_total(:,2))

标签: matlab for-loop plot differential-equations


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    相关资源
    最近更新 更多