【发布时间】:2011-07-24 00:59:19
【问题描述】:
我正在创建一个类,出于所有实际目的(尽管它比看起来要复杂得多),可以将其视为 matlab 实数。
在课堂上,我可以重载大量的matlab运算符,比如plus、mpower等。
这可能是不可能的,但是我将如何重载我的类的任何函数? 换句话说,假设我有一个任意函数 f ,它接受实数并输出实数,并说 X 是我的类的一个实例。我希望 f(X) 能够被 matlab 正确解释(当然,我有一种自然的方式来获取函数指针并将其应用于我的类,我会在代码中这样做)。
我可以看到的问题:matlab 可能无法看到函数 f 将实数作为输入。但我会留给用户不要搞乱他们的函数调用。
我说的有道理吗?
我不认为这是可能的,但如果是的话,那就太棒了。
ps:我知道我可以通过创建一个将函数句柄作为输入的方法来解决它,但它不太漂亮..
谢谢!
编辑:
抱歉,我意识到这有点令人困惑。我会更清楚。假设我有一个代表随机真实变量的类(为简单起见,比如说在离散集上)。我的类包含随机变量的概率分布,以及它的可能值。
对于任意两个随机变量 X,Y,总和 X+Y 是很好定义的,所以如果我有代表随机变量的实例 X 和 Y,如果 Z=X+Y 定义一个新的随机变量等于到 X 和 Y 的总和,具有适当的集合和分布。我通过重载加号运算符来做到这一点。挺好的。
假设我有一个任意函数 f,比如说“cos”。好吧,对于任何随机变量 X,cos(X) 也是一个随机变量,如果我可以写 Z=cos(X) 那就太好了,它会自动创建我的类的一个实例,计算适当的域并概率分布。
问题是我希望任何函数 f 都发生这种自动操作 - 我不想手动重载每个常用函数(特别是因为我希望这个技巧与用户定义的函数 f 一起工作)。
再举一个例子: 我创建了一个随机变量 X,其域为 [-2,-1,0,1,2],概率为 [1/5,1/5,1/5,1/5, 1/5]
我创建了一个(奇怪的)函数 f 使得 f(x) = x 如果 x=-2 或 2 f(x) = x^2 否则
然后,通过设置 Z=f(X),我希望 matlab 自动创建一个域 {-2,0,1,2} 的随机变量 Z 和概率 [1/5, 1/5, 2/5, 1/5]
在数学上,我知道如何做到这一点。但是我需要拦截和重载我的类的任何函数调用。
这有意义吗?
ps:我没有受过面向对象编程方面的正式培训,所以有时我可能会用错误的词来表示一个概念。
再次感谢您的帮助!
【问题讨论】:
-
我不太确定你想要做什么,你能提供一个想要的行为的例子吗?你是想创建
f(double d)和f(int i),我就是这么读的吗? -
对不起,我不是很清楚。我添加了一些说明
标签: matlab operator-overloading