Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多回路变量Matlab_Matlab_Variables_Loops_For Loop - Fatal编程技术网

多回路变量Matlab

多回路变量Matlab,matlab,variables,loops,for-loop,Matlab,Variables,Loops,For Loop,在C++/C中,我们在一个循环中有多个循环变量,比如for(int i=0;int j=0;iMATLAB没有处理多个循环变量的能力,您必须使用嵌套for循环。也就是说,MATLAB最大的优势之一是在数组中高效地应用函数 例如: a = zeros(1,5); for i=1:5 a(i) = sin(i); end b = sin(1:5); 在上面的示例中,a和b是相同的,但计算b不需要显式for循环。有时需要显式for循环(包括嵌套循环)(如通过sim命令运行模拟),但由于您关

在C++/C中,我们在一个循环中有多个循环变量,比如
for(int i=0;int j=0;iMATLAB没有处理多个循环变量的能力,您必须使用嵌套for循环。也就是说,MATLAB最大的优势之一是在数组中高效地应用函数

例如:

a = zeros(1,5);
for i=1:5
    a(i) = sin(i);
end

b = sin(1:5);
在上面的示例中,a和b是相同的,但计算b不需要显式for循环。有时需要显式for循环(包括嵌套循环)(如通过sim命令运行模拟),但由于您关心计算循环迭代的时间,我猜您并没有像大规模模拟那样运行时间密集型任务

因此,我不会使用嵌套for循环,而是考虑将函数设置为使用数组并输入“循环变量”作为数组。查看命令meshgrid和griddata以帮助创建这些数组。

MATLAB sort支持多个循环变量,因为它支持一个矩阵作为循环表达式。这是如何工作的?矩阵的各个列在每次迭代开始时被分配给循环变量。

示例代码:

V = [1:1:5; 2:2:10]
for iv = V,
    fprintf('iv = [%d %d];\n',iv);
end 
输出:

V =
     1     2     3     4     5
     2     4     6     8    10

iv = [1 2];
iv = [2 4];
iv = [3 6];
iv = [4 8];
iv = [5 10];
我们在这里实现了两个循环变量,
iv(1)
iv(2)
,它们由用作循环表达式的矩阵行指定。请注意,数组可以是任何类型(例如字符串、单元格、结构等)

摘要

for loop_variable = loop_expression, statement, ..., statement end
预先定义循环变量的每次迭代,并将它们存储为矩阵的行。在循环中,循环变量将包含矩阵的一列


旁注

我猜想,这种惯例是由水平连接而不是垂直产生一个数组的结果。

for ii = (1:3).', numel(ii), end
您可能期望三次迭代,每次都指示
numel(ii)=1
,但您只得到一次迭代和循环报告:

ans =
     3
如果您希望
ii
是标量,那么问题很明显


术语

for loop_variable = loop_expression, statement, ..., statement end

正如chappjc所指出的,正如MathWorks在文档中所述,
for
循环的每次迭代都会占用迭代器的下一列。因此,要迭代一个列向量,例如,必须对它进行转置(即对于ii=[1;1;2;3;5]”
),否则,
ii
一次等于列向量

仅仅为了扩展chappjc的优秀答案,您可以利用单元格的这种行为,除了需要一个数字迭代器之外,您可能还有一些大小不同的字符串,然后您可以将它们处理为变量,这样您就不必做太多的索引。下面是一个粗略的示例:

图(1)
imageList={};
对于ii=[{somePath;someDirListing;1},{anotherPath;anotherDirListing;2}]%,每次迭代取一列
[pathname,images,ipo]=deal(ii{:});
对于iImage=图像
img=imread(完整文件(路径名,iImage));
imagesc(img)
轴图像
如果首次公开募股=1
标题(['这是一张左边的图片,标题为'iImage])
其他的
标题(['这是一幅右侧图像,标题为'iImage])
结束
暂停(1)
结束
结束

<代码> > <代码> >代码> j>代码>遵循相同的起始值和结束值,为什么不使用循环来<代码> i <代码> >代码> > i> 0:4/COD>,然后声明<代码> j= i>代码>?我认为继续循环的条件必须是一个而不是多个- <代码>,而且命令需要用C++中的逗号分隔。您有三个部分,用两个分号分隔:
for(INITIALIZATION;CONDITION;INCREMENT)command;
。您的示例可以是这样的:
for(int i=0,j=0;i@AhsanAli将MATLAB
中的循环表达式看作临时(常量)变量通常是有益的,以避免类似于中的问题(链接到我的答案,因为它与要点相关)。哇..+1。我刚刚注意到了这一点。这非常类似于Python中的
zip
,当你有两个数字列表时。真的很酷!