首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TriangularSolver in Math.Net

TriangularSolver in Math.Net
EN

Stack Overflow用户
提问于 2017-05-01 16:45:22
回答 1查看 151关注 0票数 2

任何现有的求解器是否与Java库中的这个TriangularSolver等效?

特别是,我需要一个用正向替换来求解下三角矩阵的函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-01 20:17:37

最后,我自己实现了一个较低的三角矩阵求解程序:

代码语言:javascript
复制
public static Vector<double> SolveLower(this Matrix<double> a, Vector<double> b)
{
    if (a.RowCount != a.ColumnCount)
    {
        throw new ArgumentException("Matrix must be square.");
    }

    if (a.RowCount != b.Count)
    {
        throw new ArgumentException("Matrix row and Vector must be the same length.");
    }


    var x = b.Clone();

    double sum;
    for (int row = 0; row < a.ColumnCount; row++)
    {
        sum = x.At(row);
        for (int col = 0; col < row; col++)
        {
            sum -= a.At(row, col) * x.At(col);
        }

        x[row] = sum / a.At(row, row);
    }

    return x;
}

测试方法:

代码语言:javascript
复制
[TestMethod]
public void TestSolveLowerMatrix()
{
    var a = Matrix<double>.Build.DenseOfArray(new double[,] { { 3, 0, 0, 0},
                                                              { -1, 1, 0, 0 },
                                                              { 3, -2, -1, 0 },
                                                              { 1, -2, 6, 2}});

    var b = Vector<double>.Build.DenseOfArray(new double[] { 5, 6, 4, 2 });
    var x = a.SolveLower(b);

    // Verify results are valid
    var expected = Vector<double>.Build.Dense(new double[] { 5 / 3.0, 23 / 3.0, -43 / 3.0, 305 / 6.0 });
    Assert.AreEqual(expected.ToString(), x.ToString());

    // Double check that A*x = b
    Assert.AreEqual(b.ToString(), (a * x).ToString());
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43722859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档