查看: 3896|回复: 2|关注: 0

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

[复制链接]

新手

16 麦片

财富积分


050


5

主题

16

帖子

0

最佳答案
这个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



回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

24

主题

1万

帖子

1639

最佳答案
  • 关注者: 991
发表于 2017-3-22 01:50:33 | 显示全部楼层 |此回复为最佳答案
因为 if 对向量判断时,实际上是对向量的所有元素都做判断,且仅当所有元素满足条件时才会判断为真,任意一个元素不满足条件,都会判断为假。所以,实际上是一次性判断,只可能有一个分支被执行。也就是说:

if array_expression
else
end

在功能上等效于:

if all(array_expression)
else
end

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

举报

新手

16 麦片

财富积分


050


5

主题

16

帖子

0

最佳答案
 楼主| 发表于 2017-3-22 07:07:34 | 显示全部楼层
哦哦哦 我就觉得可能是matrix的问题 那我是不是加一个for loop就好了 谢谢大神!
回复此楼 已获打赏: 0 积分

举报

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

本版积分规则

关闭

站长推荐上一条 /4 下一条

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