Matlab 中有关条件控制语句 if 和 switch 的问题

以下是一个程序,想找出四个矩阵中同一位置上最接近5的数,再把它们汇成一个新矩阵m=3;n=3;r=5;a=rand(m,n)*10;b=rand(m,n)*10;c=ra... 以下是一个程序,想找出四个矩阵中同一位置上最接近5的数,再把它们汇成一个新矩阵

m=3;
n=3;
r=5;

a=rand(m,n)*10;
b=rand(m,n)*10;
c=rand(m,n)*10;
d=rand(m,n)*10;

e=zeros(m,n);

a1=abs(a-r);
b1=abs(b-r);
c1=abs(c-r);
d1=abs(d-r);

f=min(a1,b1);
g=min(c1,d1);
h=min(f,g);

for i=1:m
for j=1:n
if h(i,j)==a1(i,j)
e(i,j)=a(i,j);
end
if h(i,j)==b1(i,j)
e(i,j)=b(i,j);
end
if h(i,j)==c1(i,j)
e(i,j)=c(i,j);
end
if h(i,j)==d1(i,j)
e(i,j)=d(i,j);
end
end
end
e

运行正常。但若将其中条件控制语句改成应有的
if h(i,j)==a1(i,j)
e(i,j)=a(i,j);
elseif h(i,j)==b1(i,j)
e(i,j)=b(i,j);
elseif h(i,j)==c1(i,j)
e(i,j)=c(i,j);
else h(i,j)==d1(i,j)
e(i,j)=d(i,j);
end

运行结果为:
ans =
1
ans =
1
e =
9.0441 6.3195 5.5531
4.9388 4.0628 8.4968
4.8849 5.7141 3.7972
计算结果倒也正常,却莫名其妙地多出了几个(数量不确定,有时多有时少)“ans = 1”,请高手解释那是怎么多出来的,如何避免?另外,也想把控制语句由if改成switch,但不会改,也只好劳驾高手了(我自己乱编的结果既不能算出该有的数据,也避免不了上述多出ans = 1的问题)!
展开
 我来答
zhousizhan
推荐于2017-09-25 · TA获得超过116个赞
知道答主
回答量:34
采纳率:0%
帮助的人:53.6万
展开全部
if h(i,j)==a1(i,j)
e(i,j)=a(i,j);
elseif h(i,j)==b1(i,j)
e(i,j)=b(i,j);
elseif h(i,j)==c1(i,j)
e(i,j)=c(i,j);
else h(i,j)==d1(i,j)
e(i,j)=d(i,j);
end
对这一段程序仔细分析,我没有仔细分析前面的程序,但可以猜测以下,h(i,j)肯定会和a1(i,j)、b1(i,j)、c1(i,j)、d1(i,j)中的某一个相等,这样当h(i,j)和a1(i,j)、b1(i,j)、c1(i,j)不相等的时候,就会执行到最后一条else语句
else h(i,j)==d1(i,j)
e(i,j)=d(i,j);
这时候ans=1;就会出现了。
也就是Matlab把h(i,j)==d1(i,j)当做是一条单独的语句,而不是判断条件。
究其原因,就是,if-elseif-else-end最后一个else是不用判断条件的,前面的条件都不满足就会执行else后的语句。
再加上,用来计算的矩阵是由rand随机生成的,这样,就可以很好的解释为什么有时多,有时少,数量不确定的现象了。
所以修改的办法是:1,把h(i,j)==d1(i,j)删除;2,把else改成elseif。
对于这个程序,我感觉用if语句还是比较合理的,用switch-case可以用,但是它不适合这样的分支条件。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式