Funktionalisierung von numerischem Code

Playing mit F #, versuche ich, Code in einer funktionaleren Weise zu denken. Ein großer Teil meiner Arbeit ist numerischer Natur, daher überlege ich, ob diese Umerziehung Sinn macht. Funktioniert das Schreiben von numerischem Code so, als würde man versuchen, einen quadratischen Stift in ein rundes Loch zu stecken, oder handelt es sich einfach um eine steile Lernkurve, unabhängig von der Anwendung?

Nehmen wir zum Beispiel einen Ausschnitt, der das schwache Gesetz der großen Zahlen demonstriert:

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

Gibt es eine prägnante funktionale Möglichkeit, das oben Genannte auszudrücken? Wie viel eines funktionalen Paradigmas kann in eine solche Arbeit einfließen?

Nicht sicher, ob die Frage nicht zum Thema gehört. Vielen Dank

Antworten auf die Frage(6)

Ihre Antwort auf die Frage