【问题标题】:time series simulation and logical checking with Matlab or with other tools使用 Matlab 或其他工具进行时间序列模拟和逻辑检查
【发布时间】:2013-03-29 05:58:19
【问题描述】:

1) 我有时间序列数据和信号(指标),它们的值随时间变化。

我的问题:

2) 我需要一直进行逻辑检查,例如如果信号 1 和 2 大约在同一时间发生(等于某个值,例如 = 1),那么我需要知道确切的时间以便检查接下来发生的事情。

3) 使事情复杂化,例如如果信号 3 发生在信号 1 和信号 2 等于 1 之后的某个时间范围内,我想检查其他事情。

4)时间序列很长,需要分段处理。

请建议如何在不发明轮子的情况下编写它。 是否建议使用状态机在 Matlab 中编写?在 C++ 中?,使用线程?

5) Matlab 有没有为这类事情准备好的模拟器? 如何有效地定义逻辑条件?

6) 我可以为此使用数据挖掘工具吗? 我看到了这个工具列表: Data Mining open source tools 不知道从哪里开始。

谢谢

【问题讨论】:

    标签: algorithm matlab visual-c++ data-mining time-series


    【解决方案1】:

    第二个和第三个问题可以在Matlab中这样完成:

    T = -range; % Assuming that t starts at 0.
    for n = 1 : length(t)
        if signal1(n) == 1 && signal2(n) == 1
            T = t(n);
        end
        if t(n) - T < range && signal3(n) == 1
            if % Conditions you want to get checked, could also be put in the previous if statement.
                % Things you want to be executed if these coditions are met.
            end
        end
    end
    

    使用 C++ 等较低级别的编程语言会提高完成速度。如果数据很长,它还可以通过同时加载每个数组的元素来减少内存使用量。 Matlab 有一个模拟器,叫做 Simulink,但它更适合解决更复杂的事情,因为你只是有条件地想做某事。

    【讨论】:

    • 您好 Fibonatic,谢谢您的回答。
    • 嗨 Fibonatic,在答案的开头你写了 T=-range,在循环中你写了 T=t(n);如果不使用第一个 T,你能解释一下它是如何工作的吗?
    • 嗨 fibonatic,我尝试在 Matlab 中运行它,但出现错误:range=10; t=1:1:20;信号1={0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0};信号2={0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0};信号3={0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0}; T = -范围; % 假设 t 从 0 开始。对于 n = 1:length(t) if ((signal1(n) == 1) && (signal2(n) == 1)) T = t(n); end if t(n) - T
    • T=-range 初始化 T 的值,这样如果第一个 if 语句不为真,第二个也不能为真。如果您将初始化 T=0 将给出第二个 if 语句在 t = range 之前为真的可能性。而且我认为该错误是由于您对信号使用单元阵列结构而引起的。如果您将它们变成矩阵(通过将“{”和“}”替换为“[”和“]”),它会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2021-07-21
    相关资源
    最近更新 更多