tutorial simbolos operator online descargar constructora company haskell

operator - haskell simbolos



Towers derivativos y cómo usar el paquete vector-space(haskell) (2)

Es una biblioteca interesante. Gracias por compartir. Aunque todavía no entiendo el concepto de la biblioteca, ¿qué hay de este código?

{-# LANGUAGE Rank2Types, TypeOperators, FlexibleContexts, TypeFamilies #-} module Main where import Data.LinearMap import Data.Maclaurin diff :: (Double :~> (Double,Double,Double) ) -> (Double :~> (Double,Double,Double)) diff f = /x -> (atBasis (derivative (f x)) ()) eval :: (Double :~> (Double,Double,Double)) -> Double -> (Double,Double,Double) eval f x = powVal (f x) f :: Double :~> (Double,Double,Double) f x = tripleD (pureD 0,pureD 1,(2*idD) x) *Main> map (eval f) [0,0.2 .. 1] [(0.0,1.0,0.0),(0.0,1.0,0.4),(0.0,1.0,0.8),(0.0,1.0,1.2000000000000002), (0.0,1.0,1.6000000000000003),(0.0,1.0,2.0000000000000004)] *Main> map (eval (diff f)) [0,0.2 .. 1] [(0.0,0.0,2.0),(0.0,0.0,2.0),(0.0,0.0,2.0),(0.0,0.0,2.0),(0.0,0.0,2.0), (0.0,0.0,2.0)] *Main> map (eval (diff $ diff f)) [0,0.2 .. 1] [(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0)]

Pruebe también gx = tripleD (pureD 0, idD x, (idD * idD) x) (que parecen representar la curva (0, x, x ^ 2)).

Estoy trabajando con Haskell desde hace bastante tiempo, pero estoy lejos de ser un experto. Pero veo que el enfoque funcional de la programación me sienta mejor.

Hasta ahora estoy trabajando en un proyecto para calcular algunas cosas serias, como corrientes y potenciales irradiados desde una estructura determinada.

Seguí el blog escrito por Conal Elliott (aquí hay algunos mapas lineales más) que es muy bueno y fundamental.

Lamentablemente, me falta un simple ejemplo :)

Para ser más preciso, tengo una curva

f:[0,1] in R -> R³ t -> a*e_y + 2*t*e_z

que es una línea recta simple en (0, a, 2 * t). Cuando quiero calcular la derivada de f, por ejemplo, para la longitud de la curva, conozco el resultado matemático, que es bastante simple (0,0,2), pero ¿cómo lo logro en Haskell, especialmente con el vector-? paquete espacial ?

Realmente quiero usar esta biblioteca debido a su funcionalidad, es exactamente el enfoque que yo también tomaría (pero no estoy tan lejos en la carretera Haskell)

Lo que tengo hasta ahora es esto:

{-# LANGUAGE Rank2Types, TypeOperators, FlexibleContexts, TypeFamilies #-} {-# OPTIONS_GHC -Wall #-} import Numeric.GSL.Integration import Data.VectorSpace import Data.Basis import Data.Cross import Data.Derivative import Data.LinearMap type Vec3 s = Three s prec :: Double prec = 1E-9 f1 :: (Floating s, VectorSpace s, Scalar s ~ s) => s -> s f1 = id c1 :: Double -> Vec3 Double c1 = /t -> linearCombo [((v 0 0 1),f1 t),(( v 0 1 0),2)] derivC :: Double -> Vec3 (Double :> Double) derivC t = c1 (pureD t)

Es la implementación real de la función pureD, hasta ahora nada de lo que he intentado funciona para compilar este fragmento. Obtuve el siguiente error:

tests.hs:26:12: Couldn''t match expected type `Double :> Double'' with actual type `Double'' Expected type: Vec3 (Double :> Double) Actual type: Vec3 Double In the return type of a call of `c1'' In the expression: c1 (pureD t) Failed, modules loaded: none.

También hay una biblioteca de gráficos que utiliza el espacio vectorial e incluso hay un ejemplo en un toro, donde se usa pureD. Traté de deducir el ejemplo, pero no veo cómo puedo asignarlo a mi problema.

Cualquier ayuda sería muy apreciada.

Gracias por adelantado

PD: No puedo publicar todos los enlaces que me gustaría, pero estoy dispuesto a proporcionar


Es posible que desee probar el paquete de ad , que hace todo lo posible para facilitar la diferenciación automática de las funciones escritas en Haskell idiomático transparente.

$ cabal install ad $ ghci Prelude> :m + Numeric.AD Prelude Numeric.AD> diffF (/t->let a=3 in [0,a,2*t]) 7 [0,0,2] Prelude Numeric.AD> let f t = let a=3 in [0,a,2*t] Prelude Numeric.AD> diffF f 17 [0,0,2]