Matlab 如何汇总所有实体的属性值
在我的模型中有一个实体生成器、一些属性Matlab 如何汇总所有实体的属性值,matlab,simulink,Matlab,Simulink,在我的模型中有一个实体生成器、一些属性函数(out\u attrName)和一个实体接收器。如何获取每个实体的所有attrName值之和?我想在每个实体到达接收器并累积该值之前获取其值 我尝试使用“累计总和”块,但没有成功。这个模块需要输入离散时间,所以我使用离散时间积分器。不能说我使用它的方式是正确的:例如,如果要求和的值是34和40,那么总和可以是12344,而不是正确的74 编辑: 示例: 考虑下面的模型:10个实体进入服务器,然后进入接收器。 有2个设置属性块: StartTime的第
函数(out\u attrName)
和一个实体接收器。如何获取每个实体的所有attrName
值之和?我想在每个实体到达接收器并累积该值之前获取其值
我尝试使用“累计总和”块,但没有成功。这个模块需要输入离散时间,所以我使用离散时间积分器。不能说我使用它的方式是正确的:例如,如果要求和的值是34和40,那么总和可以是12344,而不是正确的74
编辑:示例:
考虑下面的模型:10个实体进入服务器,然后进入接收器。 有2个
设置属性块:
StartTime
的第一个时间(从时钟开始的当前时间,在服务器之前)
- 第二个用于
EndTime
(从时钟开始的当前时间,在服务器之后)
一个属性函数
块,用于设置服务时间
属性=结束时间
-开始时间
该模型非常简单,因此ServiceTime
属性始终等于10。我们可以在信号范围上看到它
我们有10个实体。在每个实体中都有一个属性ServiceTime
==10。现在我想得到所有实体的ServiceTime
属性的总和。10*10=100. 我该怎么做
详情:
似乎您的SO问题是问“如何使用Matlab获得接收器的传播延迟?”
这篇题为《Matlab Newletter》的文章讨论了离散Simulink模型获取总延迟值的方法
根据该时事通讯,建议使用Matlab的输入和输出之间的互相关特性,而不是常用的延迟分析估计值,因为这很难计算成最终值。经过一些研究,这里是我自己的答案。
如果我在某些方面有错误,请评论这个答案
我们需要一个累加器(一些存储器)来存储数据。因此我们需要使用MatLab工作空间。我们可以使用函数coder.extrinsic('evalin')
和coder.extrinsic('assignin')
从中读取/写入值
我们必须将来自所有实体的所有值放在一个向量中。在这个操作之后,我们将在一个地方拥有数据,并且可以做任何我们想做的事情。这个向量将由工作空间“托管”
在我的例子中,通过索引分配向量元素很容易,因此每个实体都有一个ID(它是生成器中的#d
值)
最后,让我们将数据写入vector。在启动模型之前,在Matlab中执行以下代码:
someVar=0(1000,1)
将数据保存在下沉前的属性函数中
块中:
out_EntityDuration = FinishTime - StartTime;
coder.extrinsic('evalin');
coder.extrinsic('assignin');
x = zeros(1000,1);
x = evalin('base', 'someVar');
x(Id+1) = out_EntityDuration;
assignin('base','someVar',x);
在此处查看有关读取/写入工作区的更多信息
执行后,模型someVar
存储数据。现在我们可以找到求和或平均值。我不太明白。attrName
从何而来?您是否尝试过简单地将所有需要的值放在一个向量中,然后使用cumsum
命令,例如?我想我在您的问题中遗漏了一些东西…@lak-b C你能举个例子吗?@ste偶attrName是实体属性的一个值。我怎样才能在模型中给向量赋值?你能解释一下你在问题的第一部分所说的这句话的意思吗:如果sum的值是34和40,那么总的和可以是12344,而不是正确的74。我不明白你所说的值是什么意思es求和。这是一个只有这两个值的示例吗?还是在这两个值之间有其他值?@Steeven这只是一个示例。ServiceTime仅在这个简单模型中始终等于10。在我的真实模型中,此属性的值可以等于任何值,例如:在第一个实体中attr value=14,在第二个实体中一=9,三分之一=12,依此类推。所以我必须得到每个实体,从中获取ServiceTime属性的值,并在某个accamulator中求和。但我不知道如何执行这样的操作。@arttronics这是一个答案:)我在MatLab中是noob,可能我的一些观点不那么聪明。但我的问题有完整的解决方案。谢谢r澄清您发布的答案是您使用的解决方案,并且您希望得到反馈。然后,请接受此答案,以便解决此问题。尽管如此,对于已解决的问题,很难获得反馈,因为该问题的排名与此相同。在这种情况下,发布新问题(可选参考此页面)根据您当前的流程,询问是否有更好的方法可以使用,并保留该问题,直到有更好的方法出现。我将更新您的新问题。此外,此答案+1。干杯!公平:您已经失去了200奖金,您将无法在自己的回答中收回该奖金。我建议授予该奖金在你接受你的答案后向我提问。然后在任何时候,我都会赞助你为同一个200人代表选择的任何当前或未来的问题。这样,你就不会松懈了。