HMatrix Matrix Double - Двойной продукт

f1 :: Mesh -> Matrix Double
f1 me = knx where
  hx :: Double
  (hx , _) = h me
  a, knx :: Matrix Double
  a = fromLists [[1,2], [3,4]] 
  knx = hx * a 
  -- knx = 2 * a

Я не понимаю, почему в приведенной выше функции умножение на 2 работает, тогда как умножение на hx = 0.5 - нет. OTOH, умножая Matrix Double с Double вне функции работает как надо.

Couldn't match expected type ‘Matrix Double’
            with actual type ‘Double’
In the first argument of ‘(*)’, namely ‘hx’
In the expression: hx * a
Failed, modules loaded: none.

Я серьезно озадачен. Любые указатели приветствуются!

1 ответ

Решение

В HMatrix, scale :: Container c e => e -> c e -> c e делает то, что говорит на этикетке (умножает e в c e первым e). Вот несколько примеров использования: https://hackage.haskell.org/package/hmatrix-0.16.1.4/docs/src/Data-Packed-Internal-Numeric.html

Следует отметить, что scale x создает тип контейнера, рассматривая одноэлементный список через fromList,

Было бы очень удобно, если бы хотя бы общие арифметические операции были бы перегружены, чтобы формулы могли напоминать их математический аналог. Я не уверен, что определение синонимов функции (например, (.*) = scale) будет хорошей идеей или просто добавит слой сложности. Какие-нибудь мысли?

Другие вопросы по тегам