vector-space 패키지에 다시 문제가 있습니다. 나는 최근의 post에서 @mnish로부터 매우 유용한 답을 얻었지만 거기에는 오직 하나의 변수에만 의존하는 함수 만 다루었습니다. 내가있을 때 은 무엇 예를 들어, 두 변수에 따라 달라집니다 데카르트다 변수 함수와 이에 상응하는 벡터 공간 패키지가있는 자코비언의 파생물
f:(0,oo) x [0,2pi] -> R²
(r,phi) -> (r*cos(phi),r*sin(phi))
에 극좌표에서 매핑하는 기능을 발생합니다.
꽤 순진 접근 방식으로,이 밖으로 시도 :
다음과 같은 오류polar :: Double -> Double -> ((Double,Double) :~> (Double,Double))
polar r phi = \(r,phi) -> (((idD) r)*cos(idD phi),((idD) r)*sin(idD phi))
내가 얻을 :
polarx :: Double -> Double -> ((Double,Double) :~> Double)
polarx r phi = \(r,phi) -> ((idD) r)*cos(idD phi)
내가
을 얻을Couldn't match expected type `(Double, Double) :> (Double, Double)'
with actual type `(t0, t1)'
In the expression:
(((idD) r) * cos (idD phi), ((idD) r) * sin (idD phi))
In the expression:
\ (r, phi)
-> (((idD) r) * cos (idD phi), ((idD) r) * sin (idD phi))
In an equation for `polar':
polar r phi
= \ (r, phi)
-> (((idD) r) * cos (idD phi), ((idD) r) * sin (idD phi))
한 구성 요소의
Couldn't match expected type `Double'
with actual type `(Double, Double)'
Expected type: (Double, Double) :> Double
Actual type: (Double, Double) :> (Double, Double)
In the return type of a call of `idD'
In the first argument of `(*)', namely `((idD) r)'
분명히 어떤 종류의 장애가 있지만, 나는 틀린 것을 알아낼 수 없습니다.
그런 매핑의 자 코비안을 계산할 때 또 다른 질문이 생깁니다. 이름에서 알 수 있듯이, 그것은 선형 맵과 관련이 있습니다. 물론 선형 맵은 패키지에 의해 다루어지며 실제로 실제로는이 맵을 기반으로합니다. 하지만 하스켈의 지식만으로는 해결책이 나올 수 없습니다.
Conal의 매우 우아한 자동 차별화 공식의 핵심 한계는 단 하나의 축을 따라 도함수에서만 작동한다는 것입니다. Jacobians 등을 원한다면 ekmett의 광고 패키지가 가장 좋은 방법이라고 생각합니다. http://hackage.haskell.org/package/ad-1.3.0.1 – sclv
감사합니다. @sclv,이 모듈을 살펴본 결과 저는 와우, 나는 감동했다. 나는이 꾸러미를 알아 채지 않고 있었고, 이것을 지적 해 주셔서 감사합니다. – TheMADMAN
당신은 혼자가 아닙니다. 다차원 적 유형이 어떻게 어울리는 지 이해하기 위해 고심하고 있습니다. 나는 'Beautiful Differentiation'이라는 종이를 읽고 빛이 밝혀지기를 희망합니다. 광고 패키지는 유형에 대해 조금 더 단순 해 보입니다! – Oliver