0

我遇到了必须使用 Simulink 的情况。

我有一个包含数据的 csv 文件(1000 行 x 6 列)。我需要搜索我的 csv 文件的第 6 列并找到与我要查找的内容最接近的匹配项,然后返回第 1 2 3 4 列。

为简单起见,让我们用一个较小的版本来解决我的问题。

CSV 文件示例

0  0  0  0 0 20
0 10 15  2 4 30
1 50  2 54 2 40

我搜索 21。我发现第 1 行第 6 列最接近 21。然后我返回 0 0 0 0(前四列。

我搜索 34,发现第 3 行第 6 列最接近 34。然后我返回 1 50 2 54。

希望这能解释我需要什么。

最初我使用 find(..) 在 matlab 中编写了一个工作脚本并且它可以工作,但这必须使用 simulink 来完成。

我注意到有一个 2d loopup table 块可以工作,但是,看来我需要事先知道我的索引。

如果有人能指出我可以使用哪些块的正确方向,并且我可以用谷歌搜索如何使用它们,那将不胜感激。

4

2 回答 2

2

正如我在评论中所说,您最好的选择是简单地使用Matlab FunctionInterpreted Matlab Function模块,以便将您已经存在的函数合并到您的 Simulink 模型中(如果您不需要重新发明轮子,则无需重新发明轮子) )。

如果您在这必须是“所有 Simulink”(即没有用户定义的模块)的约束下工作,那么可能会有帮助的几个模块是SelectorFindMinCompare To Zero

我可能采取的一种方法是使用选择器来隔离第 6 列。找出列中每个值与您尝试匹配的值之间的“误差”(即取差值的绝对值)。使用Min块找到最小误差。从您的错误向量中减去该最小错误,以便最接近匹配的索引现在的值为 0。Compare To Zero然后Find您应该能够确定最接近匹配的索引。一旦你有了它,你就可以用它来驱动另一个Selector块,以便根据需要选择元素。

There are other blocks that I can think of that might be really helpful (Find Local Maxima is something that comes to mind that I bet you could incorporate into a solution); however, they require additional toolboxes.

于 2012-10-14T17:17:51.947 回答
0

You can achieve this using a Minimum block. Set it's mode to index so that it outputs the index of the item having minimum error.

Pass this index into a Variable Selector block, taking the original rows/columns via In1 and the index of the minimum on Idx.

于 2016-02-23T23:08:25.747 回答