如何使用matlab實現分段函數

實現如下的分段函數:
m={t0t<1t+21<t20.1 m=\left\{ \begin{array}{rcl} t & & {0 \leq t <1}\\ -t+2 & & {1 < t \leq 2}\\ 0.1 & & {其他}\\ \end{array} \right.

方法一:

# 先寫一個函數腳本;
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')
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相同大小的全零陣;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章