Для эффективности вы пишете это точно так же (заметьте, это , а не функциональный код ), за исключением цикла while. Циклы for преобразуются в невероятно неэффективные (но все же великолепные и мощные) конструкции. Итак, в этом случае вы (предупреждение, не проверено):
val ytmp = new Array[Double](6)
var i = 0
while (i < 6) {
ytmp(i) = y(i) + h*(a41*dydx(i) + a42*k2(i) + a43*k3(i))
i += 1
}
, который обычно будет работать так же быстро, как и ваш код на C ++.
Вы начинаете получать выгоду от Scala, как только вы оборачиваете такие примитивы в классы, а затем оперируете большим количеством этих классов с помощью map
, foreach
и т. Д.
Но для числового кода вы либо пишете красивый, но смущающе медленный код (с точки зрения C ++), либо некрасивый, но прилично производительный код (да, некрасиво по сравнению с C-подобным C ++).
Так как я часто этим занимаюсь, я стараюсь поместить этот уродливый, но быстрый код в красивые библиотеки, а затем как можно больше забыть об этом и работать на более высоком уровне, поддерживаемом библиотеками.