zdd13717421 发表于 2009-9-12 13:56

请问这个分段函数的写法的问题在哪儿

function creature(a,b,c)
for x=a:0.1:b
   if(a<x<c)
       y=-x;
   elseif(c<x<b)
       y=x;
   end
end
x=a:0.1:b
plot(x,y)
为什么我在命令窗口调用函数以后,最后图形的y值是b的值

ChaChing 发表于 2009-9-12 14:27

个人水平专业有限, 建议楼主说清楚些!

zdd13717421 发表于 2009-9-12 14:32

我在.M文件编写了这个分段程序,abc是变量。然后再comman窗口输入creature(100,200,150)时,figure里面的y显示不为分段函数,而是定值200,这是为什么呢?

ChaChing 发表于 2009-9-12 14:43

在plot前加上whos看看x,y的大小!注意y仅有1*1

zdd13717421 发表于 2009-9-12 15:27

谢谢,看见了。我再改下看看
我将开始的程序改成了
function creature(a,b,c)
x=a:0.1:b
   if(a<x<c)
       y=-x;
   elseif(c<x<b)
       y=x;
   end
plot(x,y)
输入creature(100,200,150)时图形结果是x在100到200变化时y=-x,而y=x没有了。请问下这是为什么呢?
还有
function creature(a,b,c)
x=a:0.1:b
y=(-x).*(a<x&c>=x)+x.*(c<x&b>=x);
plot(x,y)
输入creature(100,200,150),图形在150的时候有个跳变过程,怎么样才能将那条跳变的直线去掉呢?

[ 本帖最后由 ChaChing 于 2010-7-14 00:26 编辑 ]

ChaChing 发表于 2009-9-12 16:04

原帖由 zdd13717421 于 2009-9-12 15:27 发表 http://www.chinavib.com/forum/images/common/back.gif
...if(a<x<c)...

楼主提醒了我, matlab有这种写法吗? 个人没连在一起用过!
因未报错所以试了下, a<x<c全为1, 但c>x>a全为0, 汗! 目前也不知道为何?
至於跳变的直线不画, 可以分两次画! 下面请参考
function creature(a,b,c)
x1=a:0.1:c; y1=-x1; x2=c:0.1:b; y2=x2;
x=; y=;
plot(x1,y1,x2,y2)

zdd13717421 发表于 2009-9-12 16:12

谢谢,知道了

friendchj 发表于 2009-9-13 00:09

可以这样
function myfun(a,b,c)
x=a:0.1:b;
y=zeros(1,length(x));
for i=1:length(x)
   if (a<x(i) && x(i)<c)
       y(i)=-x(i);
   elseif (c<x(i) && x(i)<b)
       y(i)=x(i);
   end
end
x=a:0.1:b;
plot(x,y)
页: [1]
查看完整版本: 请问这个分段函数的写法的问题在哪儿