0

我正在尝试将函数设置为矩阵元素,然后我希望在完成矩阵乘法时调用此函数。伪示例:

f = lambda {|x| Math.log(x) }
m1 = Matrix[ [f,0], [0,f] ] #scale matrix
v1 = Vector[10,10]

现在当我这样做时:

v1.covector * m1

我想获得对数比例因子。如何强制矢量坐标而不是乘以比例因子成为调用 f() 的参数我希望以后能够添加不同的比例函数。

编辑:

正如我在将矩阵相乘时提到的,我希望它像普通乘法一样,但只要矩阵元素是一个函数,则使用另一个元素作为参数而不是相乘。即使要求只有正确的元素可以是函数,它也可能对我有用,我可能能够重新排列矩阵。

4

1 回答 1

2

这里没有什么特别的Matrix,你的问题相当于:

我怎样才能42 * f(并且可能f * 42)返回Math.log(42)

我不推荐它,但您可以使用coerce以下自定义类来完成它:

class LogInsteadOfMultiply
  def *(other)
    Math.log(other)
  end

  def coerce(other)
    [other, self]
  end
end

f = LogInsteadOfMultiply.new
f * 10 # => Math.log(10)
10 * f # => Math.log(10)

您提供的示例应该按照您的意愿工作。

于 2013-05-22T19:17:19.027 回答