迭代和子图

时间:2014-05-12 09:15:18

标签: matlab for-loop iteration subplot

我想绘制5个子图,每次使用不同的x值(1到5)。而不是重复代码5次(每次更改x)我认为使用for循环绘制每个子图更优雅。但是,我无法让代码工作。

另外请注意,当我手动绘制五个图时,由于某种原因,轴标签仅出现在Y轴上。如何让它们出现在所有轴上?

% constants
a=30;
b=0.5;

% parameters
x=1:1:5 ;
e1 = 0:10:10000; 
e2 = 0:10:10000; 

[e1,e2]=meshgrid(e1,e2);

% plots

t(x)=(a.^(6.*x)/factorial(6.*x))*...
    (exp(-b*x.*e2));

u(x)=((a.^(a-(6.*x)))/factorial(a-(6.*x)))*...
    exp(-b*(a-(6.*x)).*e1);

p(x)=t(x)./(t(x)+u(x));

%FIGURES:

for i=length(x)

    figure
    subplot(3,2,i);
    mesh(e1,e2,p(i));
    title('X=i');
    axis([1 10000 1 1000 10^-300 1])
    xlabel('e1');
    ylabel('e2');
    zlabel('p');

end

1 个答案:

答案 0 :(得分:0)

好的,你的代码有几个bug。这是一个有效的方法:

% constants
a=30;
b=0.5;

% parameters
x=1:1:5 ;
e1 = 0:10:10000; 
e2 = 0:10:10000; 

[e1,e2]=meshgrid(e1,e2);

% plots

t=@(x)(a.^(6.*x)./factorial(6.*x))*...
    (exp(-b*x.*e2));

u=@(x)((a.^(a-(6.*x)))/factorial(a-(6.*x)))*...
    exp(-b*(a-(6.*x)).*e1);

p=@(x)t(x)./(t(x)+u(x));

%FIGURES:
figure
for i=x


    subplot(3,2,i);
    mesh(e1,e2,p(i));
    title(['X=',int2str(i)]);
    axis([1 10000 1 1000 10^-300 1])
    xlabel('e1');
    ylabel('e2');
    zlabel('p');

end

问题是:

  1. 匿名函数由t=@(x)([function here])而非t(x)=[function here]
  2. 定义
  3. 您需要遍历x的所有元素,因此for循环必须为for i=x
  4. figure语句需要在for循环之外,否则每次迭代都会有一个新的数字。
  5. title()不解析变量的字符串。
  6. 希望有所帮助。