无预定间隔的分段功能

时间:2018-03-23 20:44:56

标签: algorithm matlab vector piecewise

我想制作一个代表分段函数的.m文件,并返回一个计算了所有离散值的向量。

为了更清楚一点,我想要一个函数(我将其命名为Iapp并且依赖于时间,因此Iapp(t))在前100秒返回零,然后在100-120秒返回0.5,然后再返回0到120 -220秒然后0.5 + 0.2表示220-240秒,然后继续。

我知道可以使用逻辑索引定义一个明智的函数,但我的问题是我想要该函数的时间间隔不是预定义的。所以我不知道逻辑索引是如何工作的...如果时间间隔不是120的倍数就不起作用。

我尝试了以下内容:

function Vect_Iapp = Iapp_morceaux(tspan, h)
i = 1;
j = 1;
t = tspan(1):h:tspan(2);
while t(i) < tspan(2)         
    while(t(i)< (j*100 + (j-1)*20))
        Iapp(i) = 0;
        i = i + 1;
    end
    while (t(i)>j*100 && t(i) < j*100 + j*20)
        Iapp(i) = 0.5 + j*0.2;
        i = i + 1;
    end
    j = j + 1;
end    
Vect_Iapp = Iapp;
end

但算法并不总是像它应该的那样工作。有关如何定义此功能的任何想法? 请注意,我还希望能够以某种方式为tspan提供标量值,并使函数返回一个标量值。

2 个答案:

答案 0 :(得分:1)

我担心我没有达到复杂循环的目的,但从我似乎理解的情况来看,你可以推断出第k个部分向量的长度nk及其值xk从函数参数。那么为什么不在开始时这样做,只需通过

之类的东西创建每个部分向量
[Fri Mar 23 15:13:38.448268 2018] [mpm_worker:notice] [pid 8891:tid 1] AH00292: Apache/2.4.29 (Unix) OpenSSL/1.0.2n configured -- resuming normal operations
[Fri Mar 23 15:13:38.448502 2018] [core:notice] [pid 8891:tid 1] AH00094: Command line: '/opt/apps/apache64/2.4.29/bin/httpd'

最后将它们连接在一起

iappk = xk*ones(1,nk);

我希望它可以帮到你。

答案 1 :(得分:0)

这个功能?

x=linspace(0,600,1000);
y=Iapp(x);
plot(x,y)

function y=Iapp(t)
    r=mod(t,120);
    c=floor(t/120);
    VAL1=0;
    VAL2=0.5 + 0.2*c;
    y=VAL1.*(r<=100) + VAL2.*(r>100);
end

enter image description here