鱼C论坛

 找回密码
 立即注册
查看: 1245|回复: 3

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

[复制链接]
发表于 2023-12-11 17:24:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
a=[1;2;3];
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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-11 17:25:23 | 显示全部楼层
在MATLAB中,for循环的语法是`for 变量 = 数组`,其中"变量"是你用于遍历数组元素的变量名,而"数组"可以是向量、矩阵或其他可迭代的数据结构。在每次循环中,"变量"会依次取得"数组"中的每个元素值。

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

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

以下是一个修正后的例子:
a = [1, 2, 3];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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-11 17:26:03 | 显示全部楼层
而且它就输出一次结果k,按我的理解,应该是输出三组才对,因为循环三次,难道这跟c语言有什么区别吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

抱歉,我之前给出的解释有误。在MATLAB中,使用for循环时,如果想要在每次循环中都输出结果,需要将disp函数放在循环内部。以下是修正后的代码示例:
a = [1, 2, 3];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 = [1, 2, 3];k = diag(a);disp(k);
这段代码会直接创建一个以`a`为对角线的矩阵`k`,并输出结果。这种方法更加简洁和高效。希望这次能够解答到你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 04:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表