全局变量的替代方法:MATLAB中的持久变量和嵌套函数

时间:2017-04-20 16:01:52

标签: matlab function nested-loops

首先,我已经看过这个优秀的article了。 我有一个名为sdp的MATLAB脚本。我有另一个名为track的MATLAB脚本。我在track之后运行sdp,因为track使用sdp的部分输出。要运行轨道,我需要多次调用一个名为action的函数。我将action定义为单独的MATLAB文件中的函数。此action的每次调用都有一些输入,比如x1,x2,x3,但x2,x3只是"数据"永远不会改变。它们在sdp中相同,在track中相同,并且在action中保持不变。在这里,x2,x3是巨大的矩阵。其中有很多(想像x2,x3,...x10

蹩脚的方法是将x2,x3定义为sdp中的全局,然后是跟踪,因此我只能使用x1调用操作。但这令我的表现令人难以置信。如何仅使用x1一次又一次地调用操作,以便记住x2,x3是什么?每个调用都非常快,如果我这样做内联,例如,它超级快。

也许我可以使用一些持久变量。但我并不完全明白它们是否适用于我的例子。我不知道如何正确使用它们。

2 个答案:

答案 0 :(得分:0)

看看object oriented programming in Matlab。创建一个action对象,将成员变量x2 ...分配给sdp的结果。然后,您只能使用action调用x1的方法。将对象视为具有状态的函数,其中您的情况中的状态信息是sdp的常量结果。

另一种方法是使用一种功能性方法,将action传递给跟踪function handle,它可以对track的变量进行操作。

答案 1 :(得分:0)

在MATLAB中传递大型矩阵非常有效。从语义上讲,它使用按值调用,但在修改之前,它是作为引用调用实现的。将所有不变的参数包装在参数结构中并传递它。

params.x2 = 1;  
params.x3 = [17 39];
params.minimum_velocity = 19;

action('advance', params);

你已经发现全球性表现不佳。不要担心某处隐藏变量的语法含量......清楚地看到输入来自哪里,性能会很好。

这种方法还可以轻松添加新的数据成员,甚至是辅助元数据,如运行描述,执行时间等。结构可以组合成数组来描述具有不同参数的多个运行。