【问题标题】:Iteration and subplot迭代和子图
【发布时间】:2014-06-29 14:06:25
【问题描述】:

我想每次绘制 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

【问题讨论】:

  • 这有点难以回答,因为这里有很多错误。我最初认为这是一个 Matlab 问题,但是 uf t(x)、u(x) 和 p(x) 的定义与 Matlab 没有太大关系,所以我不确定了。如果只是循环绘图是问题,那么您需要做的第一件事就是将“图形”放在 for 循环之外。

标签: matlab for-loop iteration subplot


【解决方案1】:

好的,您的代码有几个错误。这是一个有效的方法:

% 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. 您需要遍历 x 的所有元素,因此 for 循环需要为 for i=x
  3. figure 语句需要在 for 循环之外,否则每次迭代都会有一个新的数字。
  4. title() 不解析字符串中的变量。

希望有所帮助。

【讨论】:

  • 非常感谢,这正是我的目标。 (我是 Matlab 新手,因此对基本错误表示歉意)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 2021-08-24
  • 2010-11-25
相关资源
最近更新 更多