gpt4 book ai didi

c# - LCP 的投影高斯-赛德尔

转载 作者:太空狗 更新时间:2023-10-29 18:13:33 25 4
gpt4 key购买 nike

我正在寻找用于求解 linear complementarity problem 的投影高斯-赛德尔算法的 C# 实现.到目前为止,我在 Bullet 中找到了用 C++ 编写的那个。库,但不幸的是它经过了高度优化(因此很难将其转换为 C#)。

similar问题一建议看一下numerical libraries for .NET .它们都只包含解决 systems of linear equations 的算法.

编辑:即使我找到了一个,它似乎并不完整,所以问题仍然悬而未决。

最佳答案

您在没有投影的情况下实现了高斯赛德尔。对于投影高斯赛德尔,您需要将解投影(或钳制)在下限和上限内:

public static double[] Solve (double[,] matrix, double[] right,
double relaxation, int iterations,
double[] lo, double[] hi)
{
// Validation omitted
var x = right;
double delta;

// Gauss-Seidel with Successive OverRelaxation Solver
for (int k = 0; k < iterations; ++k) {
for (int i = 0; i < right.Length; ++i) {
delta = 0.0f;

for (int j = 0; j < i; ++j)
delta += matrix [i, j] * x [j];
for (int j = i + 1; j < right.Length; ++j)
delta += matrix [i, j] * x [j];

delta = (right [i] - delta) / matrix [i, i];
x [i] += relaxation * (delta - x [i]);
// Project the solution within the lower and higher limits
if (x[i]<lo[i])
x[i]=lo[i];
if (x[i]>hi[i])
x[i]=hi[i];
}
}
return x;
}

这是一个小的修改。这是一个要点,展示了如何从 Bullet Physics Library 中提取 A 矩阵和 b 向量并使用投影高斯赛德尔解决它:https://gist.github.com/erwincoumans/6666160

关于c# - LCP 的投影高斯-赛德尔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com