主要内容

定义系统对象的提示

系统对象™ 是一个专业的MATLAB®为迭代处理而优化的对象。当需要多次运行对象或在循环中处理数据时,请使用系统对象。定义自己的系统对象时,请使用以下建议以帮助系统对象更快地运行。

全体的

  • 在中定义所有一次性计算setupImpl方法并将结果缓存在私有属性中斯捷潘普重复计算的方法。

  • 使用指定布尔值符合事实的错误的而不是1.0分别地

  • 如果方法中的变量不需要在调用之间保留它们的值,则使用该方法中这些变量的局部范围。

投入和产出

  • 有些方法使用斯捷潘普算法输入作为其输入,例如setupImpl,updateImpl,ValidateInputSiml,isInputDirectFeedThroughImplprocessInputSpecificationChangeImpl. 输入必须与输入顺序相匹配斯捷潘普,但不需要匹配输入的数量。如果您的实现不需要系统对象的任何输入,则可以将它们全部禁用。

  • 对于getNumInputsImplgetNumOutputsImpl方法,如果从对象属性设置返回参数,则该对象属性必须具有不能属性

在方法定义中将~用作输入参数

除静态方法外,所有方法都希望系统对象句柄作为第一个输入参数。您可以为系统对象句柄使用任何名称。MATLAB编辑器菜单插入的代码使用obj.

在许多示例中,不是传递对象句柄,~用于指示函数中未使用对象句柄。使用~而不是对象句柄可防止有关未使用变量的警告。

性质

  • 对于不更改的特性,请在中将其定义为不能财产。可调属性的访问时间比不能性质

  • 尽可能使用受保护的私有的属性而不是平民的属性的属性。一些平民的属性的访问时间比受保护的私有的财产。

  • 如果在中多次访问属性斯捷潘普方法中,将这些属性作为局部变量缓存在方法中。多属性访问的一个典型示例是循环。使用缓存的局部变量的迭代计算比必须访问对象属性的计算运行得更快。方法的计算完成后,可以将本地缓存结果保存回该系统对象的属性。将常用的可调属性复制到私有属性中。此最佳实践也适用于updateImpl输出方法。

    例如,在这段代码中K在每个循环迭代中多次访问,但仅保存到对象属性一次。

    作用y=stepImpl(obj,x)k=obj.MyProp;对于p=1:100y=k*x;k=k+0.1;终止obj.MyProp=k;终止

  • 属性的默认值在对象的所有实例中共享。如果一个类的两个实例都没有覆盖该属性,则该类的两个实例可以访问相同的默认值。

文本比较

请勿在中使用字符向量比较或基于字符向量的开关语句斯捷潘普而是在中创建一个方法句柄setupImpl. 此句柄指向同一类定义文件中的方法。在循环中使用该句柄斯捷潘普.

这个例子展示了如何在循环中使用方法句柄和缓存的局部变量来实现一个高效的对象setupImpl选择myMethod1myMethod2基于字符向量比较并将方法句柄指定给pMethodHandle所有物因为有一个循环斯捷潘普,分配pMethodHandle属性设置为本地方法句柄,我的乐趣,然后使用我的乐趣在循环内部。

classdefMyClass作用setupImpl(obj)如果strcmp(目标方法,“方法1”)obj.pMethodHandle=@myMethod1;其他的obj.pMethodHandle=@myMethod2;终止终止作用y=stepinpl(obj,x)myFun=obj.pMethodHandle;对于p=1:1000 y=myFun(obj,x)终止终止终止作用y=myMethod1(x)y=x+1;终止作用y=myMethod2(x)y=x-1;终止终止

万博1manbetx

对于Simulink中包含的系统对象,添加万博1manbetx严格违约属性。此属性设置所有可变植入方法在默认情况下返回false。

代码生成

有关系统对象和代码生成的信息,请参见MATLAB代码生成中的系统对象(MATLAB编码器).