我正在创建一个类,出于所有实际目的(虽然它比它看起来要复杂得多),可以被认为是一个matlab实数。
在课堂上,我可以重载大量的matlab运算符,例如plus,mpower等。
这可能是不可能的,但我怎么会重载我课程的任何功能呢? 换句话说,假设我有一个任意函数f,它取实数并输出实数,并说X是我班级的一个实例。我想通过matlab正确解释f(X)(当然,我有一种自然的方式来获取函数指针并将其应用到我的类中,我将在代码中执行此操作)。
我可以看到它们的问题: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 如果x = -2或2,则f(x)= x f(x)= x ^ 2否则
然后,通过设置Z = f(X),我希望matlab自动创建一个带有域{-2,0,1,2}的随机变量Z 和概率[1 / 5,1 / 5,2 / 5,1 / 5]
在数学上,我知道如何做到这一点。但我需要拦截并重载我班级的任何函数调用。
这有什么意义吗?
ps:我没有接受过面向对象编程方面的正式培训,所以有时我可能会用错误的词来形容这个概念。
再次感谢您的帮助!
答案 0 :(得分:1)
是的,你可以重载运营商。但是,对于你想要做的事情,这太过分了。您只需使用isreal
函数进行简单的输入检查。
function rejectComplex(inputValue)
if ~isreal(inputValue)
error('Input is not a real number')
end
如果输入复数作为此函数的输入,它将显示错误,否则不会。现在你可以围绕这个构建你的函数,这样只有在满足条件时才执行所有代码(所以,在上面的end
语句后继续你的函数)