MATLAB:有没有一种方法可以更好地组织实验功能?

时间:2012-08-10 18:22:34

标签: function matlab arguments function-parameter

我将进行一系列实验。评估的主要方法具有以下特征:

[Model threshold] = detect(...
    TrainNeg, TrainPos, nf, nT, factors, ...
    removeEachStage, applyEstEachStage, removeFeatures);

其中removeEachStageapplyEstEachStageremoveFeatures是布尔值。你可以看到,如果我颠倒任何这些布尔参数的顺序,我可能会得到错误的结果。

MATLAB中是否有一种方法可以更好地组织,以最大限度地减少这种错误?或者,我可以使用任何工具来保护我免受这些错误的影响吗?

1 个答案:

答案 0 :(得分:6)

具有结构的组织

您可以输入具有这些参数的struct字段。

例如具有字段

的结构
setts.TrainNeg
     .TrainPos
     .nf
     .nT
     .factors
     .removeEachStage
     .applyEstEachStage
     .removeFeatures

这样,当你设置字段时,它很清楚字段是什么,不像函数调用,你必须记住参数的顺序。

然后你的函数调用变为

[Model threshold] = detect(setts);

,你的函数定义类似于

function [model, threshold] = detect(setts)

然后简单地替换例如param setts.param [Model threshold] = detect(in1, in2, setts);

混合方法

如果您愿意,也可以将此方法与当前方法混合使用,例如

in1

如果您仍想明确包含in2setts,请将其余内容捆绑到detect

OOP方法

另一个选择是将检测变成一个类。这样做的好处是,classdef detect() properties TrainNeg = []; TrainPos = []; nf = []; nT = []; factors = []; removeEachStage = []; applyEstEachStage = []; removeFeatures =[]; end methods function run(self) % Put the old detect code in here, use e.g. self.TrainNeg to access member variables (aka properties) end end 对象将具有固定名称的成员变量,而不是结构,如果您在设置字段时输入错误,则只需创建带有拼写错误名称的新字段。

例如

{{1}}