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的所有值的输出mMatlab 保存来自多个循环的输出,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 可能是我的代
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的向量