[已解决] 为什么if loop中不能运行if的部分 只能出来else的部分

[复制链接]
csqyin 发表于 2017-3-22 00:28:16
这个if loop判断的是一个数组里的condition 但不知道是不是因为数组的关系 程序run出来并不对啊 我的alpha出不来啊 可是我把if loop先不看 之前的Angle3出来的确实是对的 是一个1*25的数组 我不知道为什么 求大神指教alpha中的delta已经在前面求出来了 是一个定值
这个程序最后run出来后 只能出现no angle 到底需要怎么改啊 我把Angle3后面的(:)去掉了也没有用


delta_total = 0;
for d =1:365
        del = -23.45* cos((360/365)*(d+10)); % d=number of day
        delta_total = delta_total+del;
end
delta = delta_total*365^-1;


T=linspace(0,24,25);
Angle3=15*(T-12);

if (Angle3(:)>=0) & (Angle3(:)<=180)
    alpha = 90-acos(sin(37.442222)*sin(delta)+cos(37.442222)*cos(delta)*cos(Angle3))
else
    disp('no angle')
end



最佳答案


winner245 发表于 2017-3-22 01:50:33
因为 if 对向量判断时,实际上是对向量的所有元素都做判断,且仅当所有元素满足条件时才会判断为真,任意一个元素不满足条件,都会判断为假。所以,实际上是一次性判断,只可能有一个分支被执行。也就是说:

if array_expression
else
end

在功能上等效于:

if all(array_expression)
else
end

由于你的角度向量里至少有一个不在 (0, 180) 范围,故始终执行第二个分支。修改方式是将if判断放在循环里,对每个标量元素逐个判断。
回复此楼

2 条回复


winner245 发表于 2017-3-22 01:50:33
因为 if 对向量判断时,实际上是对向量的所有元素都做判断,且仅当所有元素满足条件时才会判断为真,任意一个元素不满足条件,都会判断为假。所以,实际上是一次性判断,只可能有一个分支被执行。也就是说:

if array_expression
else
end

在功能上等效于:

if all(array_expression)
else
end

由于你的角度向量里至少有一个不在 (0, 180) 范围,故始终执行第二个分支。修改方式是将if判断放在循环里,对每个标量元素逐个判断。
回复此楼

csqyin 发表于 2017-3-22 07:07:34
哦哦哦 我就觉得可能是matrix的问题 那我是不是加一个for loop就好了 谢谢大神!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表