问题标签 [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.

0 投票
0 回答
137 浏览

haskell - 优化这个 haskell 线性代数代码

我有这个 Haskell 代码来测试形状之间的碰撞(它取决于线性和镜头包)

调用intersects :: Box -> Tri -> Bool减慢了我的应用程序,但我无法让它运行得更快。我查看了分析器、堆配置文件和 的输出-ddump-simpl,但它们没有提供任何线索。我错过了什么?

0 投票
1 回答
706 浏览

haskell - 如何使用 Haskell 库 Linear 缩放矢量?

这是一个关于风格的简单问题。我一直在使用:

或者...

这是预期的方式,还是标量运算符有适当的乘法?

0 投票
1 回答
103 浏览

haskell - 使用“规范化”时,“线性”包截断接近 0 的值

我花了几分钟调试一个问题,该问题追踪到使用“Linear.normalize”时接近于零的“线性”截断值。具体来说,我正在取非常小的三角形的叉积并对结果进行归一化,令人惊讶的是,它的行为是错误的,直到我注意到出了什么问题并将叉积乘以 10000。

为什么这甚至是必要的?我怎样才能摆脱这种行为?

编辑:只是为了好玩,这是一个错误的视频。请注意,当近似它的三角形数量足够大时,球体会失去颜色?是的,祝你调试好运......!

0 投票
1 回答
143 浏览

haskell - 如何在 Haskell 上一般派生 Additive,而不定义 Applicative 实例?

给定一个类型,只有一种明显的方式来实现一个Additive实例,从线性库到它。方便的是,Additive有一个通用的实现,所以我们可以使用deriving它。不幸的是,这取决于一个Applicative实例的存在,它是不可推导的,所以你仍然必须声明它:

有什么方法可以自动派生 Additive 而无需声明 Applicative 实例?

0 投票
1 回答
292 浏览

haskell - 如何在 Edward Kmett 的“线性”库中使用可变大小的向量?

我正在尝试使用ekmett的线性库,但在Linear.V中我遇到了可变长度向量的问题。如何使用该dim函数获取向量的大小?如何在由嵌套strace组成的大型方阵上使用?V在这两种情况下我都会出错。

最小代码:

它给出了这些我不明白的错误:

0 投票
0 回答
86 浏览

haskell - Haskell Linear + AD,实现 Metric for Forward?

我正在尝试diffad包中使用函数Quaternion a -> Quaternion a或更普遍地Metric a => a -> a依赖quadrance.

我不确定解决此问题的最佳方法是什么,因为Forward没有 Metric 实例并且使用Metric' 类型,因为* -> *我什至不确定它是否可能(即强制 Forward 的子类型具有 Metric 实例) .

我想知道如何解决这个问题,我并没有接受 Metric 实例的想法,只是想获得diff四元数上的任意函数。

0 投票
1 回答
82 浏览

haskell - Haskell 代码无法使用某些变量名进行编译

我从 GHCi 收到一个我无法解释的错误。我正在使用以下代码(其中绝大多数似乎与问题无关,但我无法用更少的代码复制问题;注释掉的行是我想添加以替换虚拟的行in 0行)

此代码导致 GHCi 抛出六个错误,包括突出显示pin let h = p !* g in; 但是,当我将该行更改为let g = p !* g in它时。不幸的是,这样做然后取消注释下一行 ( let x = x - b*g in) 会导致抛出相同的错误(包括p在同一位置突出显示 )。

p并且p0应该是使用 Linear 包的 (n×n) 方阵,而gx应该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)