[已解决] 使用if条件语句时,画出的曲线只有else部分,if条件部分缺失

[复制链接]
浪荡绅士 发表于 2021-6-6 17:41:56
  1. if l==0
  2.     w4=f2*lambda/pi/w2;
  3. else
  4.     s2=s*f2./l;
  5.     wp=abs(s2./s*w2);
  6.     sp=abs(s2);
  7.     w4=wp.*sqrt(1+(lambda*sp./(pi*wp.^2)).^2);
  8. end
复制代码
使用if条件语句,设定l=0时的表达式,然后else的表达式,画图的时候只有else的曲线,if部分代码如上,绘图如图,中间l=0的数值没有,请问如何解决


捕获.PNG

最佳答案


aijunhao 发表于 7 天前
本帖最后由 aijunhao 于 2021-6-7 14:10 编辑
浪荡绅士 发表于 2021-6-7 13:59
if里的程序好像并未执行,我写了个简单的代码结果如图,以这个为例我该怎么改 ...

因为矩阵x=[-5:0.1:5],这玩意是矩阵,这个矩阵不能和0比较,比较就是否,直接进入到你的else里面对x这个矩阵整体进行操作了。你想对x里面每个值进行判断的话,要利用循环进行一一判定

11 条回复


gywxd 发表于 2021-6-6 18:17:48
把else  后面的屏蔽了了试试看,到底有没有输出

TouAkira 发表于 7 天前
去看《 关于数组逻辑运算的一个疑问 》这帖,普遍是因为储存精度导致的条件判断失效,想避免存储精度误差一般要改用符号运算,或者把相等的判断条件改成 abs(X - x0) < epsilon 的形式

浪荡绅士 发表于 7 天前
gywxd 发表于 2021-6-6 18:17
把else  后面的屏蔽了了试试看,到底有没有输出

把else后面的屏蔽了,出不了这个点没输出,请问这种是什么问题该如何解决

gywxd 发表于 7 天前
浪荡绅士 发表于 2021-6-7 09:16
把else后面的屏蔽了,出不了这个点没输出,请问这种是什么问题该如何解决 ...

那你在 if  
里面加一个  ms=‘0 出现’
      看看 是否出现过   l==0      的情况,
如果    l==0    就根本没有出现过,咋可能给你画图
也不知道 l   的情况,也有可能时数据精度引起等等,得好好调试

浪荡绅士 发表于 7 天前
浪荡绅士 发表于 2021-6-7 09:16
把else后面的屏蔽了,出不了这个点没输出,请问这种是什么问题该如何解决 ...

else后面屏蔽后显示w4无法识别

浪荡绅士 发表于 7 天前
gywxd 发表于 2021-6-7 09:27
那你在 if  
里面加一个  ms=‘0 出现’
      看看 是否出现过   l==0      的情况,

l=[-5:0.1:5],l==0,是存在的,把else后面的去掉后,显示w4无法识别

gywxd 发表于 7 天前
if l==0
    w4=f2*lambda/pi/w2;
   ms=‘0出现’
l
else

    w4=1;
end

看就知道结果了

浪荡绅士 发表于 7 天前
TouAkira 发表于 2021-6-7 00:53
去看《 关于数组逻辑运算的一个疑问 》这帖,普遍是因为储存精度导致的条件判断失效,想避免存储精度误差一 ...

看得不是很明白,而且用这个方法还是错的,能否用下面这个简单例子解释下
  1. clc
  2. clear
  3. close all
  4. x=[-5:0.1:5];
  5. if x<0
  6.     a=1./x;
  7. else
  8.     a=1;
  9. end  
  10. plot(x,a,'+');
复制代码

此代码画出的图是a=1的横线,而不是分段函数,应该如何改呢

浪荡绅士 发表于 7 天前
gywxd 发表于 2021-6-7 11:59
if l==0
    w4=f2*lambda/pi/w2;
   ms=‘0出现’

if里的程序好像并未执行,我写了个简单的代码结果如图,以这个为例我该怎么改
  1. clc
  2. clear
  3. close all
  4. x=[-5:0.1:5];
  5. if x==0
  6.     a=1;
  7.     ms='0出现';
  8. else
  9.     a=1./x;
  10. end  
  11. plot(x,a,'+');
复制代码
捕获1.PNG

aijunhao 发表于 7 天前
本帖最后由 aijunhao 于 2021-6-7 14:10 编辑
浪荡绅士 发表于 2021-6-7 13:59
if里的程序好像并未执行,我写了个简单的代码结果如图,以这个为例我该怎么改 ...

因为矩阵x=[-5:0.1:5],这玩意是矩阵,这个矩阵不能和0比较,比较就是否,直接进入到你的else里面对x这个矩阵整体进行操作了。你想对x里面每个值进行判断的话,要利用循环进行一一判定
回复此楼

1105675124 发表于 7 天前
clc
clear
close all
x=[-5:0.1:5];
for i = 1:length(x)
if x(i)==0
a(i)=1;
else
a(i)=1./x(i);
end
end
plot(x,a,'+');
用for循环吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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