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
) будет хорошей идеей или просто добавит слой сложности. Какие-нибудь мысли?