如何在Matlab中输入分段函数?

如题,我希望Z=2.4xy 如果x<0且y<0
Z=0.7xy 如果其他情况(x>=0或者y>=0)

我写的是
if x<0&y<0
z=2.4.*x.*y
else
z=0.7.*x.*y
end

结果在整个定义域都是Z=2.4xy
请问应该如何写

不好意思,不知道你的x,y是什么样的数,所以不能具体写代码。我下面的x,y可能跟你的不一样,我只是为了说明问题。

x=-5:5;

y=-5:5;

for i=1:9

   if x(i)<0&y(i)<0

       z(i)=2.4.*x(i).*y(i)

   else

       z(i)=0.7.*x(i).*y(i)

   end

end

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-08
有很多种形式可以实现分段函数,其中最简单而运算起来又最快的是:
下面以你的题目为例
function m=fenduanhanshu(t)
m=t*(t>=0 & t1 & t<=2)+0.1*(t2)

【解释】
在Matlab中,上述函数中的表达式m=t*(t>=0 & t1 & t<=2)+0.1*(t2)的运算规则是当布尔表达式为true时,布尔表达式的值取1,参与运算,否则取0,参与运算。
例如,当表达式中的(t>=0 & t=0 & t1 & t<=2)和(t2)都不成立,取0参与运算,故此时m=t*1+(-t+2)*0+0.1*0=t。
Matlab中的这种设计极大地方便了用户进行科学计算,减少了用户书写的代码量,开发效率大大提高,个人非常喜欢,所以也极力推荐各位使用。

当然还可以用if……elseif……else……end语句,在此不再多说了。

【绘制函数】
x=0:0.001:2;
y=fenduanhanshu(x);
plot(x,y)

还有就是用Matlab自带的函数工具箱,具体大家自己找下。
第2个回答  推荐于2016-09-14
画分段曲线或曲面,我一般都是用逻辑表达式(比较简洁),而不是if编程,如下:

x=-50:50;
y=-50:50;
[x,y]=meshgrid(x,y);
z=(x<0&y<0).*(1.7*x.*y)+0.7*x.*y;
mesh(x,y,z);
axis tight

-------------------------------------
上面的逻辑表达式也可以这样写:
z=(x<0&y<0).*(2.4*x.*y)+(x>=0|y>=0).*(0.7*x.*y);
这样直观些本回答被提问者采纳
第3个回答  2019-09-15
用逻辑
例如
y=x
当x>1;
y=-x
当x=1;
y=3x
当x<1;
就可以表示成:
y=x.*(x>1)-x.*(x=1)+3x.*(x<1)
第4个回答  2015-10-19
使用if 条件语句 每段的条件对应一个函数。
相似回答