【发布时间】:2016-07-07 05:04:47
【问题描述】:
在使用 F# 时,我试图以更实用的方式来思考代码。我的大部分工作恰好是数字性质的,所以我在想这种再教育是否有意义。以一种实用的方式编写数字代码,就像试图将一个方形钉子安装在一个圆孔中,还是仅仅是一个陡峭的学习曲线问题,而与应用程序无关?
例如,让我们看一个演示大数弱定律的 sn-p:
open System
open System.IO
open System.Windows.Forms
open System.Windows.Forms.DataVisualization
open FSharp.Data
open FSharp.Charting
open FSharp.Core.Operators
open MathNet.Numerics
open MathNet.Numerics.LinearAlgebra
open MathNet.Numerics.Random
open MathNet.Numerics.Distributions
open MathNet.Numerics.Statistics
let T = 1000
let arr1 = Array.init T (fun i -> float i*0.)
for i in 0 .. T-1 do
arr1.[i] <- [|for j in 1..i do yield Exponential.Sample(0.1)|] |> Statistics.Mean
let arr2 = Array.init T (fun i -> float i*0.)
for i in 0 .. T-1 do
arr2.[i] <- arr1.[1 .. i] |> Statistics.Mean
arr2 |> Chart.Line |> Chart.Show
是否有一种简洁的功能方式来表达上述内容?有多少功能范式可以融入这样的工作中?
【问题讨论】:
-
顺便说一句,F# for Scientists 一书虽然有点过时了。还有Real World Functional Programming的摘录。也许最近的书籍对数学网有更好的解释。
标签: performance f# math.net mathnet-numerics