当前位置:文档之家› 关于MATLAB中分段函数的画法

关于MATLAB中分段函数的画法

关于MATLAB中分段函数的画法
最近拿到一题关于MATLAB的分段函数画法的题目,我在网上找了挺久,但没发现很多有用的资料.所以感觉很棘手.但是问题还是要解决,所以我就自己整理了些东西,不怕大家见笑.
我把这些分段函数分为两类:
一.对于y=f(x)这个模型来讲,一类是关于其中一个段是y为常量的一个模型,举例说明.
例 1.y={0,(x<0);1,(x>=0)};在x>-10&x<10区间内的图形
代码如下 :
x=-10:0.01:10;
y=ones(size(x));
y(x<=0)=0;
plot(x,y);
axis([-10 10 -0.5 1.5]);
这样的处理方法就是对于x是变量而Y为常量的而直接定义常数矩阵,再通过判断进行修改,只适合于Y为常量的基础上.
________________________________________________华丽分割线_______________________________________________
二.第二种是y=f(x),y是关于x的一个变量.需要将x进行赋值的分段函数.这种处理方法比较多.
这里引用一段经典matlab分段画图的例子给大家(代码为蓝色区域):
例 2: x=-3:0.01:3;
y1=zeros(size(x));
y2=zeros(size(x));
y3=zeros(size(x));
N=length(x);
for k=1:N
if x(k)<-1&x(k)>=-3;
y1(k)=(-x(k).^2-4*x(k)-3)/2;
elseif x(k)>=-1&x(k)<1 ;
y2(k)=-x(k).^2+1;
else x(k)<=3&x(k)>=1 ;
y3(k)=(-x(k).^2+4*x(k)-3)/2;
end
end
y=y1+y2+y3;
plot(x,y)
这里运用的是将Y的值设置成三个与x的数量相等的空变量.然后分别依次讲X 的值通过f(x)转换为Y然后画出图形并将三个图形进行组合.
______________________________________________________华丽分割线_______________________________________________
是否除了这个方法,还有其他的解决方案呢?是有的.
这里将代码奉上,这个我告诉大家的第三个方法.
x1=-3:0.01:-1;
x2=-1:0.01:1;
x3=1:0.01:3;
y1=(-x1.^2-4*x1-3)/2;
y2=-(x2).^2+1;
y3=(-x3.^2+4*x3-3)/2;
x=[x1,x2,x3];
y=[y1,y2,y3];
plot(x,y)
axis([-3 3 0 1]);
有人觉得,第一种类型应该包含在第二种类型里面.便想用这个方法解决第一个问题,却发现出错:还是用第一个例子吧.
x1=-10:0.01:0;
x2=0:0.01:10;
y1=0;
y2=1;
x=[x1,x2];
y=[y1,y2];
plot(x,y);
axis([-10 10 -0.5 1.5]);
如果这样输入的话,看起来是没错,但是编译的时候通不过,有这样的提示:Vectors must be the same lengths.提示你的X,Y的长度不同,不能画图.
怎样才能让X,Y的长度相同呢.这个有一个解决方法.使得这个方法通用性更强.就是+X*0;
代码如下:
x1=-10:0.01:0;
x2=0:0.01:10;
y1=0*x1;
y2=1+0*x2;
x=[x1,x2];
y=[y1,y2];
plot(x,y);
axis([-10 10 -0.5 1.5]);
可以达到图1相同的效果.
不过这个方法有一个缺点就是无法设定图形的折点.比如例 2,你无法设定x=1和x=-1时,y的值.如果不是0.那么就有错误.
__________________________________________________华丽分割线____________________________________________________
现在说的最开始我讲的的那题.我讲它作为第三个例子来讲.是这样一题:y={x,(x>1);x^2,(x>=1&x<=4);pow2(x),(x>4)};在区间(-10 10)里面的图形.
这是它的图形.那么大家想一下应该可以用几种方法解决呢?
下面我介绍给大家的一种最古老的,最笨而实在的方法.通过IF函数判断然后算出Y 的值进行画图:
代码如下:
i=1;
for x=-10:0.05:10
if x<1
y(i)=x;
elseif x>=1&x<4
y(i)=x.^2;
else x>=4
y(i)=pow2(x);
end
i=i+1;
end
x=-10:0.05:10;
plot(x,y)
这样通过计算出Y的值,然后再画出图形是可行的.
继续,另一种方法:
fun=@(x)x.*(x<1)+(x.^2).*(x>=1&x<4)+(pow2(x)).*(x>=0&x<pi);
%计算函数值
x=-10:10;
y=fun(x);
%绘制函数图形
fplot(fun,[-10 10]);
axis([-10 10 -10 20]);
大家还想到什么方法?这里我用我上面提到的第三种方法来试试.
x1=-10:0.01:1;
x2=1:0.01:4;
x3=4:0.01:10;
y1=x1;
y2=(x2).^2;
y3=pow2(x3);
x=[x1,x2,x3];
y=[y1,y2,y3];
plot(x,y)
axis([-10 10 -10 20]);
果然OK,那么到现在,大家学会了几种方式去画分段函数呢?
*另外还有一种方法,是用stepwise函数直接计算分段函数,不过这个方法我查不到怎。

相关主题