algorithm - 没有预定义区间的分段函数

标签 algorithm matlab vector piecewise

我想创建一个 .m 文件来表示一个分段函数并返回一个向量,其中包含计算出的所有离散值。

为了更清楚一点,我想要一个函数(我将其命名为 Iapp,它是时间相关的,所以 Iapp(t))在前 100 秒返回零,然后在 100-120 秒返回 0.5,然后在 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 提供一个标量值,并使该函数仅返回一个标量值。

最佳答案

恐怕我不明白复杂循环的目的,但据我看来,您可以从函数参数中推导出第 k 个部分向量的长度 nk 及其值 xk 。那么为什么不在一开始就这样做并通过类似的东西创建每个部分向量

iappk = xk*ones(1,nk);

最后将它们连接在一起

Iapp = [iapp1 iapp2 iapp3 iapp4]

希望对你有帮助。

关于algorithm - 没有预定义区间的分段函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49458053/

相关文章:

c++ - 指向包含 vector<int> 问题的实例类的指针

c++ - 在 opencv (imwrite) 上压缩图像。如何显式设置压缩因子?

algorithm - Fredman 和 Tarjan 论文中 Fibonacci 堆的 DecreaseKey 的原始设计

matlab - 使用参数值输入对的缩写 - 为什么 cellfun 的 `' UniformOutput', false` 工作为 `' un', 0`?

arrays - 创建一个 "pyramid"矩阵

matlab - 转换为 matlab 时间

C++11 - 如何将 priority_queue 与共享指针 vector 一起使用?

algorithm - 如何识别2D中2个矩形之间重叠区域的边界点?

algorithm - 总和大于给定值的最小子数组的大小

c# - 如何在字典中查找重复的对?