如何从 MATLAB 中的循环中获取值?

计算科学 matlab 蒙特卡洛
2021-12-20 07:29:30

您能告诉我如何根据 N 的值(下面的代码)获得“pi”的单独值吗?例如,如果我写“pi1”,我将得到 N(1) 的“pi”值,其中 N(1)=100。如果我写“pi2”,我将得到 N(2)=1000 等的“pi”。我需要它来比较计算时间和准确性。

我的代码是:

R=1; 
N=[100,1000,10000,100000]; 

for k=1:1:4 
  toc
   x = 2*rand(N(k), 1)-1; 
   y = 2*rand(N(k), 1)-1; 
   in_circle = find((x.^2+y.^2)<R.^2); 
   N2 = size(in_circle, 1); 

   pi=4*N2/(N(k)*R.^2) 
  t=toc
end 

实际输出为:

pi = 
3.120000000000000 
t = 
1.088773407512715e-004 

pi = 
3.208000000000000 
t = 
5.176135871781760e-005 

pi = 
3.145600000000000 
t = 
6.113194952018113e-005 

pi = 
3.143360000000000 
t = 
1.124470896283624e-004 

输出我想得到:

pi1 = 
3.120000000000000 
t1 = 
1.088773407512715e-004 

pi2 = 
3.208000000000000 
t2 = 
5.176135871781760e-005 

pi3 = 
3.145600000000000 
t3 = 
6.113194952018113e-005 

pi4 = 
3.143360000000000 
t4 = 
1.124470896283624e-004 
1个回答

如果您确实希望调用变量pi1, pi2, ...,可以使用以下方法构建变量名称eval

for k=1:1:4
  ...
  eval(['pi' num2str(k) ' = 4*N2/(N(k)*R.^2)'])
  ...
end

但更典型的做法是使用数组:

for k=1:1:4
  ...
  pi(k) = 4*N2/(N(k)*R.^2)
  ...
end

如果您不打算pi稍后在代码中使用变量的名称,您可能只是disp用来编写您真正想要的语句:

for k=1:1:4
  ...
  pi = 4*N2/(N(k)*R.^2)
  disp([num2str(k) ': ' num2str(4*N2/(N(k)*R.^2))])
  ...
end

等等。