全局变量的替代方案:MATLAB中的持久变量和嵌套函数
首先,我已经看过这个优秀的article了。 我有一个MATLAB脚本,名为sdp
。我有另一个MATLAB脚本track
。我在sdp
之后运行track
,因为track
使用了一些来自sdp
的输出。为了运行轨迹,我需要多次调用一个名为action
的函数。我把action
定义为一个单独的MATLAB文件中的函数。这个action
的每个调用都有一些输入,比如x1,x2,x3
,但是x2,x3
只是“数据”,它永远不会改变。它们在sdp
中相同,在track
中相同,并且在action
中保持不变。在这里,x2,x3
是巨大的矩阵。其中有很多(想想x2,x3,...x10
)全局变量的替代方案:MATLAB中的持久变量和嵌套函数
跛脚的方式是将x2,x3
定义为sdp中的全局然后跟踪,因此我可以调用只有x1
的动作。但这会让我的表现难以置信地变慢。我怎样才能通过x1
来一次又一次的行动,使它记得x2,x3
是什么?每个通话都非常快,如果我以内联方式进行通话,则速度非常快。
也许我可以使用一些持久变量。但我不明白它们是否适用于我的例子。我不知道如何正确使用它们。
看看object oriented programming in Matlab。创建一个action
对象,您可以将成员变量x2 ...
分配给sdp
的结果。然后你可以调用action
的方法,只有x1
。将对象看作一个带有状态的函数,其中状态信息是sdp
的恒定结果。
另一种方法是使用功能性方法,通过action
将其追踪为function handle,其中它可以在track
的变量上运行。
在MATLAB中传递大型矩阵是有效的。在语义上它使用按值调用,但是它被实现为调用引用直到被修改。将所有不变参数包裹在参数结构中并传递给它。
params.x2 = 1;
params.x3 = [17 39];
params.minimum_velocity = 19;
action('advance', params);
您已经发现全局变量执行不好。不要担心在某处隐藏变量的语法糖......清楚地看到输入来自哪里,并且性能会很好。
这种方法还可以很容易地添加新的数据成员,甚至是辅助元数据,例如运行描述,执行时间等。结构可以组合成数组来描述具有不同参数的多次运行。
面向对象的编程方法会更快吗?我不确定。你熟悉持久变量还是嵌套这些函数,或许这是相关的? – bissi