我只有两周的编程/ Matlab经验,所以我只是一个初学者。在我的代码中,我想将mu绘制为alpha的函数。当我显示mu时,它显示每个alpha值的10个mu值。但是,当我绘制图形时,它将mu的值作为单独的点。但我希望这些点只与一条线相连。我该如何解决这个问题?
n=40; %number of months
p=0.23; %probability of success
num_of_simulations=100;
s=rng; x = rand(1,n)<p;
rng(s);
hold on;
for alpha=0.01:0.01:0.1;
for i=1:num_of_simulations
x = rand(1,n)<p;
S0=5000; %initial value
Y(1)=S0*alpha; %deposit
for k=1
if x(1,1)==1;
S(1, i)=S0+2*Y(1);
else
S(1, i)=S0-Y(1);
end
end
for k=2:n
Y(k)=S(k-1, i)*alpha;
if x(1,k)==1;
S(k, i)=S(k-1, i)+2*Y(k);
else
S(k, i)=S(k-1, i)-Y(k);
end
end
Sn(i)=S(n,i); %end value for each simulations
end
mu=mean(Sn);
disp(mu);
plot(alpha,mu);
end
答案 0 :(得分:2)
您的点未连接的原因是您分别绘制每个点。如果我们采用不同的方法并从alpha = 0.01:0.01:0.1;
循环定义中取出for
,然后将for
循环定义更改为for j=1:numel(alpha)
,我们仍然可以遍历alpha
的每个元素1}}。现在我们需要将循环中alpha
的每次使用更改为alpha(j)
,以便我们引用alpha
的当前元素而不是每个元素。接下来我们需要将mu
更改为mu(j)
。这意味着当整个循环结束时,我们存储了alpha
和mu
的所有值,并且对plot(alpha, mu)
的1次调用将绘制连接点的数据,如< / p>
这也使我们也可以删除hold on;
,因为我们只绘制一次。
我在这里已经包含了完整的编辑代码供您查看。这些变化是微不足道的,应该是有道理的。
clear all
close all
n = 40; %number of months
p = 0.23; %probability of success
num_of_simulations = 100;
s = rng;
x = rand(1, n) < p;
rng(s);
alpha = 0.01:0.01:0.1;
for j = 1:numel(alpha)
for i = 1:num_of_simulations
x = rand(1, n) < p;
S0 = 5000; %initial value
Y(1) = S0*alpha(j); %deposit
for k = 1
if x(1, 1) == 1;
S(1, i) = S0 + 2*Y(1);
else
S(1, i) = S0 - Y(1);
end
end
for k = 2:n
Y(k) = S(k-1, i)*alpha(j);
if x(1, k) == 1;
S(k, i) = S(k-1, i) + 2*Y(k);
else
S(k, i) = S(k-1, i) - Y(k);
end
end
Sn(i) = S(n, i); %end value for each simulations
end
mu(j) = mean(Sn);
disp(mu(j));
end
plot(alpha, mu);