如何使用matlab实现分段函数

实现如下的分段函数:
m = { t 0 ≤ t &lt; 1 − t + 2 1 &lt; t ≤ 2 0.1 其 他 m=\left\{ \begin{array}{rcl} t &amp; &amp; {0 \leq t &lt;1}\\ -t+2 &amp; &amp; {1 &lt; t \leq 2}\\ 0.1 &amp; &amp; {其他}\\ \end{array} \right. m=tt+20.10t<11<t2

方法一:

# 先写一个函数脚本;
function m=fenduanhanshu(t)
m=t.*(t>=0 & t<1)+(-t+2).*(t>1 & t<=2)+0.1.*(t<0 | t>2)  # 注意此处是点乘,否则会报错内部矩阵维度不一致;
end

此处语句解释:当表达式中的(t>=0 & t<1)成立时,此时的布尔表达式值为True,值为1,t*(t>=0 & t<1) = t1;此时表达式中的布尔表达式(t>1 & t<=2)和(t<0 | t>2)都不成立,取0参与运算,故此时m=t1+(-t+2)0+0.10 = t;

# 在command window中调用此函数,并作图;
>> x=0:0.01:2;
>> m=fenduanhanshu(t);
>> plot(m,t)

作图如下:
在这里插入图片描述

方法二:

# 写一个脚本后直接运行;
t=-1:0.01:3; # 自己根据需要设置;
m=zeros(size(t));  # 生成与矩阵t相同大小的全零矩阵;
for i=1:length(t)  # 数组长度(即行数或列数中的较大值);
    if (t(i)>=0)&(t(i)<=1)
        m(i)=t(i);
    elseif (t(i)>1)&(t(i)<=2)
        m(i)=-t(i)+2;
    else
        m(i)=0.1;
    end
end
plot(t,m,'r')  # 'r'表示线为红色;
grid on  # 网格
>> t=-1:0.01:3;
>> size(t)  # 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素是矩阵的行数,第二个元素是矩阵的列数;

ans =

     1   401
B=zeros(n) # 生成n×n全零阵;
B=zeros(m,n) # 生成m×n全零阵;
B=zeros([m n]) # 生成m×n全零阵;
B=zeros(d1,d2,d3……) # 生成d1×d2×d3×……全零阵或数组;
B=zeros([d1 d2 d3……]) # 生成d1×d2×d3×……全零阵或数组;

B=zeros(size(A)) # 生成与矩阵A相同大小的全零阵;
n=length(A)  # 如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));
             # 如果A为空数组,则返回0;
             # 如果A是一个向量则返回A的长度;
n=numel(A)   # 该语句返回数组A中元素的总数;
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页