Matlab 保存来自多个循环的输出

Matlab 保存来自多个循环的输出,matlab,Matlab,你好,我有3个变量I,j和k。我想在它们中的每一个上运行一个循环,这样对于I的每一个值,考虑j的一个值并迭代k的所有值。然后对于相同的I,取j的第二个值并迭代k的所有值,依此类推。。。然后对i的所有值重复此过程并保存输出。例如,对于i=1,j=1迭代k的所有值。然后对于i=1,j=2迭代k的所有值,依此类推。然后保存k次迭代中i和j的所有值的输出m for i=1:30 for j=1:5 for k=1:100 m=i*0.5*j*sin(k); end end end 可能是我的代

你好,我有3个变量I,j和k。我想在它们中的每一个上运行一个循环,这样对于I的每一个值,考虑j的一个值并迭代k的所有值。然后对于相同的I,取j的第二个值并迭代k的所有值,依此类推。。。然后对i的所有值重复此过程并保存输出。例如,对于i=1,j=1迭代k的所有值。然后对于i=1,j=2迭代k的所有值,依此类推。然后保存k次迭代中i和j的所有值的输出m

for i=1:30
for j=1:5
for k=1:100
    m=i*0.5*j*sin(k);
end
end
end

可能是我的代码也不对吧?

你能做的最简单的事情就是将
m
定义为一个3D
数组
;此外,由于您事先知道
数组的最终大小,因此可以在循环之前对其进行初始化,以避免MatLab在每次迭代时分配内存:

% Initialize the array
m=zeros(30,5,100);
for i=1:30
   for j=1:5
      for k=1:100
         % Set the values in the array "m"
         m(i,j,k)=i*0.5*j*sin(k);
      end
  end
end
编辑

如果需要,对于每个
i
j
k
迭代中计算
m
的值,变量
m
也应出现在
=
符号的右侧

例如,它应该是这样的:

m=m+i+j+k
您可以尝试上面代码的以下修改版本

% Initialize the array
m=zeros(30,5);
for i=1:30
   for j=1:5
      % Initialize the temporary varaible at each iteration
      tmp_var=0;
      for k=1:100
         % Compute the value of "tmp_var" over "k" iteration
         tmp_var=tmp_var+i*0.5*j*sin(k);
      end
      % Assign the value of "tmp_var" computed for a given (i,j) couple
      m(i,j)=tmp_var;
  end
end
在本例中,您需要定义一个临时变量以在
k
循环中使用;在
k
循环结束时,临时变量的值将存储在
m
矩阵中

在脚本末尾,您将有一个大小为(30 x 5)的矩阵
m


希望这能有所帮助。

最简单的方法是将
m
定义为一个3D
数组
;此外,由于您事先知道
数组的最终大小,因此可以在循环之前对其进行初始化,以避免MatLab在每次迭代时分配内存:

% Initialize the array
m=zeros(30,5,100);
for i=1:30
   for j=1:5
      for k=1:100
         % Set the values in the array "m"
         m(i,j,k)=i*0.5*j*sin(k);
      end
  end
end
编辑

如果需要,对于每个
i
j
k
迭代中计算
m
的值,变量
m
也应出现在
=
符号的右侧

例如,它应该是这样的:

m=m+i+j+k
您可以尝试上面代码的以下修改版本

% Initialize the array
m=zeros(30,5);
for i=1:30
   for j=1:5
      % Initialize the temporary varaible at each iteration
      tmp_var=0;
      for k=1:100
         % Compute the value of "tmp_var" over "k" iteration
         tmp_var=tmp_var+i*0.5*j*sin(k);
      end
      % Assign the value of "tmp_var" computed for a given (i,j) couple
      m(i,j)=tmp_var;
  end
end
在本例中,您需要定义一个临时变量以在
k
循环中使用;在
k
循环结束时,临时变量的值将存储在
m
矩阵中

在脚本末尾,您将有一个大小为(30 x 5)的矩阵
m

希望这有帮助。

使用您可以在不使用任何显式
for
循环的情况下完成此操作:

[i,j,k] = ndgrid(1:30,1:5,1:100);
m = 0.5*i.*j.*sin(k);
或者,如果您翻转前两个输入:

[j,i,k] = meshgrid(1:5,1:30,1:100);
m = 0.5*i.*j.*sin(k);
使用,您可以在不使用任何显式
for
循环的情况下完成此操作:

[i,j,k] = ndgrid(1:30,1:5,1:100);
m = 0.5*i.*j.*sin(k);
或者,如果您翻转前两个输入:

[j,i,k] = meshgrid(1:5,1:30,1:100);
m = 0.5*i.*j.*sin(k);

如果循环中的计算仅取决于循环索引,则可以编写:

[j,i,k]=meshgrid(1:5,1:30,1:100);
m=.5*i.*j.*sin(k);

当使用元素乘法(.*而不是*)时,meshgrid将创建索引i、j、k和m的适当3D数组,这些数组的维数将相同。

如果循环中的计算仅取决于循环索引,您可以编写:

[j,i,k]=meshgrid(1:5,1:30,1:100);
m=.5*i.*j.*sin(k);


meshgrid将创建索引i、j、k和m的适当3D数组,当使用元素乘法(.*而不是*)时,这些索引将具有相同的维度。

非常感谢您的时间,但这不是我想要的。我对我的问题进行了更详细的编辑。你能检查一下你是否有时间吗。非常感谢你抽出时间,但那不是我想要的。我对我的问题进行了更详细的编辑。你能检查一下你是否有时间吗。非常感谢你抽出时间,但那不是我想要的。我对我的问题进行了更详细的编辑。你能检查一下你是否有时间吗。幸运的是,您添加的许多附加信息并不清楚:对于给定的
i
j
值,在
k
迭代中
m
的值是否在某种程度上取决于
m
(k-1)
迭代中的值?也许我的代码不对。我想在k次迭代中求出I=1,j=1的m,然后求出I=1,j=2和k的所有值,依此类推。这有什么意义吗?我已经更新了我的答案,希望我没有理解你的需要。谢谢你的更新。但tmp var值在k的每次迭代中都会被加上?我想得到k的所有值。这有什么意义吗?非常感谢您的时间,但这不是我想要的。我对我的问题进行了更详细的编辑。你能检查一下你是否有时间吗。幸运的是,您添加的许多附加信息并不清楚:对于给定的
i
j
值,在
k
迭代中
m
的值是否在某种程度上取决于
m
(k-1)
迭代中的值?也许我的代码不对。我想在k次迭代中求出I=1,j=1的m,然后求出I=1,j=2和k的所有值,依此类推。这有什么意义吗?我已经更新了我的答案,希望我没有理解你的需要。谢谢你的更新。但tmp var值在k的每次迭代中都会被加上?我想得到k的所有值。这有什么意义吗?非常感谢您的时间,但这不是我想要的。我对我的问题进行了更详细的编辑。你能检查一下你是否有时间吗。许多的Thanks@bilal:此代码完全复制问题中代码的输出(除了它在三维数组中存储
i
j
k
的每个组合的所有值)。你也需要更新。你问题中的更新文本一点也不清楚。也许我的代码不对。我想在k次迭代中求出I=1,j=1的m,然后求出I=1,j=2和k的所有值,依此类推。这有意义吗?
[i,j,k]=ndgrid(1:30,1:5,1:100)
m=0.5*i.*j.*sin(k)m(1,1,:)
是i=1、j=1和所有va的向量