今天用Matlab写了一个关于n和theta的函数eq(n, theta),但是用此函数返回的值作为if中的判断条件出现了问题
value1 = eq(n,theta);
value2 = eq(n+1,theta)
if value1*value2 < 0 || value1==0 % value1一定不是0
ne(b) = n;
b = b+1;
break;
上述逻辑判断中value1==0总是给我默认为"真",导致总是执行下面的代码,一开始以为是value的值不是double类型的,于是将value1转换为double(value1)也解决不了问题,网上也没有一个能解决的答案。而且value1*value2<0总是能被正确执行。
只能想到是因为浮点数的精度有关,于是将代码改为:
tolerance = 1e-10; %定义全局残差值
value1 = eq(theta,n);
value2 = eq(theta,n+1);
if value1*value2 < 0 || abs(value1 - 0)< tolerance
ne(b) = n;
b = b+1;
break;
end
即可解决问题,但是value1=8.800也不会造成数值的下溢呀?很奇怪,只有"<>"这种判断才能正常进行下去