作者abc0229 ((abc0229))
看板MATLAB
标题[运算] 分段函数
时间Thu May 14 12:20:12 2015
我想做一个分段函数
指令如下
x=linspace(0,1,21);
if 0<= x <=1/2;
f=2*x;
else f=2-2*x
end
结果出来的值是 2 , 1.9 , 1.8 ,...., 0.1 , 0
意思是他只执行了else後面的函数
所以想请问各位大大我code问题出在哪?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.212.224
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1431577214.A.978.html
1F:推 JamesChen: X 从 0 到 21, 你又只能让他在 x < 0.5 时执行前面那 05/14 15:17
2F:→ JamesChen: 一行,当然不行。 05/14 15:17
3F:→ JamesChen: 你可以用中文讲你要干嘛吗? 05/14 15:18
4F:→ celestialgod: 因为x是向量,你不能放在if里面 05/14 15:19
5F:→ celestialgod: 你要的应该是 f=2*x; f(x>0.5) = 2-f(x>0.5); 05/14 15:20
感谢大大的建议,我要做一个分段函数f(x)=2*x as 0<= x <= 1/2,f(x)=2-2*x as
1/2<= x <=1
我修改了一下程式
x=linspace(0,1,21);
for i=1:21
if 0<=x(i) & x(i)<=1/2;
f(i)=2*x(i);
else f(i)=2-2*x(i)
end
end
之後有执行出想要的答案,感谢帮忙^^
※ 编辑: abc0229 (36.231.212.224), 05/14/2015 15:43:40
6F:→ celestialgod: 回圈虽然可以达到目标,还是建议用向量运算比较好 05/14 15:45
7F:→ celestialgod: 无论是效率还是简洁程度、易读性等 05/14 15:46
8F:→ abc0229: 好喔~那我试着不用回圈写写看,感谢建议^^ 05/14 15:50