我想绘制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
答案 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
问题是:
t=@(x)([function here])
而非t(x)=[function here]
for i=x
figure
语句需要在for循环之外,否则每次迭代都会有一个新的数字。title()
不解析变量的字符串。希望有所帮助。