Tôi đang gặp sự cố với gói vector-space một lần nữa. Tôi đã nhận được một câu trả lời rất hữu ích từ @mnish trong một số post gần đây, nhưng ở đó tôi chỉ xử lý một hàm phụ thuộc vào chỉ 1 biến. gì xảy ra khi tôi có, ví dụ, một chức năng mà bản đồ từ tọa độ cực để cartesiansDẫn xuất của một hàm đa biến và Jacobian tương ứng với gói véc-tơ
f:(0,oo) x [0,2pi] -> R²
(r,phi) -> (r*cos(phi),r*sin(phi))
mà phụ thuộc vào 2 biến.
Tôi đã cố gắng này ra, với một cách tiếp cận khá ngây thơ:
polar :: Double -> Double -> ((Double,Double) :~> (Double,Double))
polar r phi = \(r,phi) -> (((idD) r)*cos(idD phi),((idD) r)*sin(idD phi))
tôi nhận được lỗi sau:
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))
Đối với một thành phần
polarx :: Double -> Double -> ((Double,Double) :~> Double)
polarx r phi = \(r,phi) -> ((idD) r)*cos(idD phi)
tôi nhận được
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)'
Rõ ràng có một số loại rối loạn, nhưng tôi không thể tìm ra những gì là sai.
Một câu hỏi khác nảy sinh, khi tôi muốn tính toán Jacobian của một bản đồ như vậy. Như tên cho thấy, nó có cái gì đó để làm với bản đồ tuyến tính, đó là, tất nhiên, được bao phủ bởi các gói, thực sự nó được dựa trên những bản đồ. Nhưng một lần nữa, kiến thức Haskell của tôi là không đủ, để lấy được một giải pháp của riêng tôi.
Tôi dường như nhớ lại rằng một hạn chế quan trọng của công thức phân biệt tự động rất thanh lịch của Conal là nó chỉ hoạt động trên các dẫn xuất dọc theo một trục đơn. Nếu bạn muốn Jacobians, vv, tôi nghĩ rằng gói quảng cáo của ekmett là con đường để đi: http://hackage.haskell.org/package/ad-1.3.0.1 – sclv
Cảm ơn @sclv, tôi chỉ cần nhìn vào mô-đun này và tôi phải nói, wow, tôi rất ấn tượng. Tôi đã không nhận thấy gói này và tôi sẽ cung cấp cho nó một thử, nhờ cho chỉ này ra – TheMADMAN
Bạn không đơn độc - Tôi đang đấu tranh để hiểu làm thế nào các loại đa chiều được trang bị với nhau. Tôi sẽ đọc bài báo 'Sự khác biệt đẹp' và hy vọng nó làm sáng tỏ một chút - gói quảng cáo trông khá đơn giản hơn một chút về các loại! – Oliver