问题标签 [haskell-linear]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 优化这个 haskell 线性代数代码
我有这个 Haskell 代码来测试形状之间的碰撞(它取决于线性和镜头包)
调用intersects :: Box -> Tri -> Bool
减慢了我的应用程序,但我无法让它运行得更快。我查看了分析器、堆配置文件和 的输出-ddump-simpl
,但它们没有提供任何线索。我错过了什么?
haskell - 如何使用 Haskell 库 Linear 缩放矢量?
这是一个关于风格的简单问题。我一直在使用:
或者...
这是预期的方式,还是标量运算符有适当的乘法?
haskell - 使用“规范化”时,“线性”包截断接近 0 的值
我花了几分钟调试一个问题,该问题追踪到使用“Linear.normalize”时接近于零的“线性”截断值。具体来说,我正在取非常小的三角形的叉积并对结果进行归一化,令人惊讶的是,它的行为是错误的,直到我注意到出了什么问题并将叉积乘以 10000。
为什么这甚至是必要的?我怎样才能摆脱这种行为?
编辑:只是为了好玩,这是一个错误的视频。请注意,当近似它的三角形数量足够大时,球体会失去颜色?是的,祝你调试好运......!
haskell - 如何在 Haskell 上一般派生 Additive,而不定义 Applicative 实例?
给定一个类型,只有一种明显的方式来实现一个Additive
实例,从线性库到它。方便的是,Additive
有一个通用的实现,所以我们可以使用deriving
它。不幸的是,这取决于一个Applicative
实例的存在,它是不可推导的,所以你仍然必须声明它:
有什么方法可以自动派生 Additive 而无需声明 Applicative 实例?
haskell - 如何在 Edward Kmett 的“线性”库中使用可变大小的向量?
我正在尝试使用ekmett的线性库,但在Linear.V中我遇到了可变长度向量的问题。如何使用该dim
函数获取向量的大小?如何在由嵌套strace
组成的大型方阵上使用?V
在这两种情况下我都会出错。
最小代码:
它给出了这些我不明白的错误:
haskell - Haskell Linear + AD,实现 Metric for Forward?
我正在尝试diff
从ad
包中使用函数Quaternion a -> Quaternion a
或更普遍地Metric a => a -> a
依赖quadrance
.
我不确定解决此问题的最佳方法是什么,因为Forward
没有 Metric 实例并且使用Metric
' 类型,因为* -> *
我什至不确定它是否可能(即强制 Forward 的子类型具有 Metric 实例) .
我想知道如何解决这个问题,我并没有接受 Metric 实例的想法,只是想获得diff
四元数上的任意函数。
haskell - Haskell 代码无法使用某些变量名进行编译
我从 GHCi 收到一个我无法解释的错误。我正在使用以下代码(其中绝大多数似乎与问题无关,但我无法用更少的代码复制问题;注释掉的行是我想添加以替换虚拟的行in 0
行)
此代码导致 GHCi 抛出六个错误,包括突出显示p
in let h = p !* g in
; 但是,当我将该行更改为let g = p !* g in
它时。不幸的是,这样做然后取消注释下一行 ( let x = x - b*g in
) 会导致抛出相同的错误(包括p
在同一位置突出显示 )。
p
并且p0
应该是使用 Linear 包的 (n×n) 方阵,而g
和x
应该x0
是 (n×1) 向量;d
是整数,opt
是 n 空间上的线性函数,是 n 空间funs
上的凸函数列表,d_opt
并且d_funs
是各自的梯度,eps
是实数。
任何有关编译此文件的帮助将不胜感激。谢谢!
编辑:这是错误消息之一。let g = d_opt x
, let f_best = min (opt x) f_best
, let g = (d_funs!!i) x
,let a = ((funs!!i) x) / (sqrt prod)
和也有类似的let b = (1+d*a)/(d+1)
。