首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matlab中重载类的每个函数运算符

在matlab中重载类的每个函数运算符
EN

Stack Overflow用户
提问于 2011-03-28 03:50:51
回答 1查看 963关注 0票数 2

我正在创建一个类,出于所有实际目的(尽管它比看起来复杂得多),它可以被认为是一个matlab实数。

在类中,我可以重载大量的matlab运算符,如加号、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,属性域为-1,0,1,2,概率为1/5, 1/5 ,1/5,1/5,1/5

我创建了一个(奇怪的)函数f,如果x=-2,则f(x) =x;否则,2 f(x) = x^2

然后,通过设置Z=f(X),我希望matlab自动创建一个域为{-2,0,1,2},概率为1/5,1/5,2/5,1/5的随机变量Z

从数学上讲,我知道怎么做。但是我需要拦截和重载我的类的任何函数调用。

这有什么意义吗?

ps:我没有接受过面向对象编程的正式培训,所以有时我可能会用错误的词来描述一个概念。

再次感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2011-03-28 05:35:21

是的,你可以重载运算符。然而,对于您正在尝试做的事情来说,这是过度杀伤力。您所需要的只是使用isreal函数进行简单的输入检查。

代码语言:javascript
复制
function rejectComplex(inputValue)
    if ~isreal(inputValue)
        error('Input is not a real number')
    end

如果您输入一个复数作为此函数的输入,它将显示错误,否则将不显示错误。现在您可以围绕此构建您的函数,以便只有在满足条件时才会执行所有代码(因此,在上面的end语句之后继续您的函数)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5451912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档