Matlab中数组元素添加问题:kronDel函数调用为何返回全0?
问题原因与解决方案
首先,你的kronDel函数是为单个标量输入设计的,但你传入的n-2是一个包含32个元素的数组(n=0:31,所以n-2是-2,-1,0,1,...,29),这直接导致了逻辑判断的异常:
当把数组传给kronDel的j参数时,j == k会生成一个逻辑数组(比如只有n-2=0的对应位置是true,其余都是false)。但Matlab的if语句在判断数组条件时,只有**数组内所有元素全为true**才会执行if分支,否则直接跳到else返回0。所以整个kronDel(n-2,0)返回的是单个0,乘以任何数结果自然都是0,这就是你得到x2=0的核心原因。
解决办法
有两种简单的修复方式:
1. 向量化你的kronDel函数
直接去掉if-else结构,用逻辑运算替代,让函数天然支持数组输入:
function d = kronDel(j,k) d = (j == k); end
修改后,kronDel(n-2,0)会返回一个和n同长度的逻辑数组,其中仅n=2的位置是1,其余为0。再乘以j(注意:Matlab默认j是虚数单位,记得提前给j赋你需要的值),就能得到预期结果。
2. 用arrayfun逐个处理数组元素
如果你不想修改原函数,可以用arrayfun对数组的每个元素单独调用kronDel:
x2 = j * arrayfun(@(x) kronDel(x, 0), n-2);
arrayfun会遍历n-2的每个元素,分别传入kronDel计算,最终返回对应长度的结果数组。
内容的提问来源于stack exchange,提问作者Biljana Icovski
相关产品推荐
相关产品推荐

