我是靠谱客的博主 贪玩白猫,最近开发中收集的这篇文章主要介绍matlab中一个函数有常数,MATLAB中的常量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

不要使用myClass.myconst调用常量,而不要先创build实例! 除非速度不是问题。 我的印象是,第一次调用一个常量属性会创build一个实例,然后所有将来的调用都会引用这个实例( 常量值属性 ),但是我不再相信这种情况。 我创build了一个非常基本的testing函数:

tic; for n = 1:N a = myObj.field; end t = toc;

用类定义如下:

classdef TestObj properties field = 10; end end

要么:

classdef TestHandleObj < handle properties field = 10; end end

要么:

classdef TestConstant properties (Constant) field = 10; end end

对于不同的对象,处理对象,嵌套对象等(以及赋值操作)的情况。 请注意,这些都是标量。 我没有调查数组,单元格或字符。 对于N = 1,000,000,我的结果(总耗时)是:

Access(s) Assign(s) Type of object/call 0.0034 0.0042 'myObj.field' 0.0033 0.0042 'myStruct.field' 0.0034 0.0033 'myVar' //Plain old workspace evaluation 0.0033 0.0042 'myNestedObj.obj.field' 0.1581 0.3066 'myHandleObj.field' 0.1694 0.3124 'myNestedHandleObj.handleObj.field' 29.2161 - 'TestConstant.const' //Call directly to class(supposed to be faster) 0.0034 - 'myTestConstant.const' //Create an instance of TestConstant 0.0051 0.0078 'TestObj > methods' //This calls get and set methods that loop internally 0.1574 0.3053 'TestHandleObj > methods' //get and set methods (internal loop)

我也创build了一个Java类,并进行了类似的testing:

12.18 17.53 'jObj.field > in matlab for loop' 0.0043 0.0039 'jObj.get and jObj.set loop N times internally'

调用Java对象的开销很大,但是在对象内部,简单的访问和分配操作的发生和普通的matlab对象一样快。 如果你想引用行为,Java可能是要走的路。 我没有调查嵌套函数内的对象调用,但我看到了一些奇怪的事情。 另外,当涉及到很多这些东西的时候,profiler是垃圾的,这就是为什么我切换到手动节省时间的原因。

作为参考,使用的Java类:

public class JtestObj { public double field = 10; public double getMe() { double N = 1000000; double val = 0; for (int i = 1; i < N; i++) { val = this.field; } return val; } public void setMe(double val) { double N = 1000000; for (int i = 1; i < N; i++){ this.field = val; } } }

在相关的说明,这是一个NIST常量表的链接: ascii表和一个matlab函数返回一个结构与列出的值: Matlab FileExchange

最后

以上就是贪玩白猫为你收集整理的matlab中一个函数有常数,MATLAB中的常量的全部内容,希望文章能够帮你解决matlab中一个函数有常数,MATLAB中的常量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部