倔强青铜铜 发表于 2023-12-11 17:24:14

matlab用for循环和预想的不一样

a=;
k=zeros(3);
for i=a
    k(i,i)=k(i,i)+a(i);
    disp(k);
end
我以为结果是这样:
1 0 0
0 2 0
0 0 3
但是实际是这样,为什么
   1   1   1
   2   2   2
   3   3   3

FishC 发表于 2023-12-11 17:25:23

在MATLAB中,for循环的语法是`for 变量 = 数组`,其中"变量"是你用于遍历数组元素的变量名,而"数组"可以是向量、矩阵或其他可迭代的数据结构。在每次循环中,"变量"会依次取得"数组"中的每个元素值。

在你的代码中,你想要用`i`来迭代数组`a`的值,但是由于没有给变量`a`赋值,所以使用`a`作为循环数组是错误的。

如果你想要实现你期望的结果,你需要先给变量`a`赋值,并且使用正确的索引方式来操作矩阵`k`。

以下是一个修正后的例子:

a = ;
k = zeros(3);
for i = 1:length(a)
    k(i,i) = k(i,i) + a(i);
    disp(k);
end

输出结果会是:

1   0   0
   0   0   0
   0   0   0

   1   0   0
   0   2   0
   0   0   0

   1   0   0
   0   2   0
   0   0   3

这样就符合你的预期了。希望能对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

倔强青铜铜 发表于 2023-12-11 17:26:03

而且它就输出一次结果k,按我的理解,应该是输出三组才对,因为循环三次,难道这跟c语言有什么区别吗{:10_266:}

FishC 发表于 2023-12-11 17:26:43

倔强青铜铜 发表于 2023-12-11 17:26
而且它就输出一次结果k,按我的理解,应该是输出三组 ...

抱歉,我之前给出的解释有误。在MATLAB中,使用for循环时,如果想要在每次循环中都输出结果,需要将disp函数放在循环内部。以下是修正后的代码示例:

a = ;
k = zeros(3);

for i = 1:length(a)
    k(i,i) = k(i,i) + a(i);
    disp(k);
end

这样,循环三次时会输出三组结果。

MATLAB中的for循环与C语言中的for循环语法上没有太大的区别。但是在MATLAB中,操作数组的能力更加强大,可以直接对整个向量或矩阵进行操作,而不需要使用循环来逐个处理每个元素。这就是为什么你可能会觉得MATLAB中的for循环和你预期的不一样。如果你只是想要对矩阵`k`的对角线元素进行操作,并且希望在每次循环时输出结果,可以使用下面这种方法:

a = ;
k = diag(a);
disp(k);

这段代码会直接创建一个以`a`为对角线的矩阵`k`,并输出结果。这种方法更加简洁和高效。希望这次能够解答到你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: matlab用for循环和预想的不一样