Octave中自定义函数返回值异常:为何该函数始终返回1?
Octave中自定义函数返回值异常:为何该函数始终返回1?
嘿,我来帮你排查这个问题!你的g2函数不管输入什么x值都返回1,核心问题出在第三个if条件的写法上——Octave并不支持像-8 < x < 8这种连续比较的语法,这和你可能熟悉的部分编程语言逻辑不一样。
问题根源拆解
在Octave里,-8 < x < 8会被拆解成两步依次计算:
- 第一步:先计算
-8 < x,这个表达式会返回布尔值(1表示真,0表示假); - 第二步:把第一步得到的结果(要么是0,要么是1)和8比较,也就是判断
0 < 8或者1 < 8。
显然,0和1都小于8,所以不管你输入的x是多少,第三个if的条件永远为真,最后val都会被赋值为1,直接覆盖掉前两个if里可能已经设置好的结果。
修正后的代码
你需要把连续比较拆成两个独立的条件,用逻辑与&&连接,同时推荐用elseif和else优化代码结构(避免多个独立if导致的赋值覆盖问题):
function val = g2(x) sigma = 0.1; if (x <= -8) val = exp(-0.5*((x+8)^2)/(sigma^2)); elseif (x >= 8) val = exp(-0.5*((x-8)^2)/(sigma^2)); else val = 1; endif endfunction
这样修改后,三个分支是互斥的:只有当x不满足前两个条件时,才会执行else分支把val设为1,不会再出现不管什么输入都返回1的情况啦。
备注:内容来源于stack exchange,提问作者Redsbefall
相关产品推荐
相关产品推荐

