【问题标题】:Gaussian Elimination with custom operators使用自定义运算符进行高斯消除
【发布时间】:2010-11-16 00:21:45
【问题描述】:

当运算符是自定义运算符而不是标准算术运算符时,实现高斯消元的好方法是什么?

这里是运算符:

加法:

0 + 0 = 0
0 + 1 = 1
1 + 1 = 0

减法:

0 - 0 = 0
0 - 1 = 1
1 - 1 = 0

乘法:

0 * 0 = 0
0 * 1 = 0
1 * 1 = 1

部门:

0 / 0 = illegal
0 / 1 = 0
1 / 1 = 1

这是一组作为增广矩阵的示例方程,RHS 在最右边的列中:

1, 1, 0, 1, 0, 0, 0, 0, 0, 1
0, 1, 0, 1, 1, 0, 0, 0, 0, 1
0, 1, 1, 0, 0, 1, 0, 0, 0, 1
1, 0, 0, 1, 0, 0, 0, 0, 0, 1
0, 1, 0, 1, 1, 0, 0, 0, 0, 1
0, 0, 0, 0, 0, 1, 0, 0, 0, 1
0, 0, 0, 1, 0, 0, 1, 0, 0, 1
0, 0, 0, 1, 1, 0, 1, 1, 0, 1
0, 0, 0, 0, 0, 1, 0, 0, 1, 1

这一套的解决方法是:

x1 = 1
x2 = 0
x3 = 0
x4 = 0
x5 = 1
x6 = 1
x7 = 1
x8 = 1
x9 = 0

我在这个集合上尝试过高斯消除失败。

方程将有 9、16、25 或 36 项。如果该算法很容易扩展到更大的正方形(最多 100 个),那就太好了。 我正在寻找一种算法,最好是伪代码或 JavaScript。

【问题讨论】:

  • 请注意,由于新的运算符,一些方程组变得无法求解,因为它们的结果将是分数。我对可解性问题特别感兴趣。

标签: javascript algorithm math


【解决方案1】:

伪代码中的高斯消除算法可以找到here

无论您是使用“普通”数字还是在 Z2 环中,算法都保持不变。

您可以做的是实现一个结构来保存您正在操作的值并重载所有必要的运算符。然后你需要做的就是将伪代码重写为你想要使用的语言。

不幸的是,由于您提到了 JavaScript,您无法覆盖该语言中的运算符,因此这将变得更加复杂。我想您可以定义将执行运算符工作并使用它们而不是标准运算符的函数。

function add(v1, v2) {
    if ((v1 != 0 && v1 != 1) || (v2 != 0 && v2 != 1)) {
        alert('Invalid params');
        return;
    }

    return (v1 + v2) % 2;
}

function subtract(v1, v2) {
    if ((v1 != 0 && v1 != 1) || (v2 != 0 && v2 != 1)) {
        alert('Invalid params');
        return;
    }

    return Math.abs((v1 - v2) % 2);
}

function multiply(v1, v2) {
    if ((v1 != 0 && v1 != 1) || (v2 != 0 && v2 != 1)) {
        alert('Invalid params');
        return;
    }

    return v1 * v2;
}

function divide(v1, v2) {
    if ((v1 != 0 && v1 != 1) || (v2 != 0 && v2 != 1)) {
        alert('Invalid params');
        return;
    } else if (v2 == 0) {
        alert('Divider cannot be zero');
        return;
    }

    return v1 / v2;
}

【讨论】:

  • 运算符不会是一个大问题,因为它们大致对应于位运算符。我想我可以使用维基百科的算法。我已经意识到这一点,只是不确定它们如何组合在一起。
【解决方案2】:

您所描述的并不是真正的自定义运算符。相反,它是标准加法和乘法模 2 的 Z2

这是field;所以你没有任何“分数”问题。

高斯消元算法不限于实数领域;它也适用于 Z2

【讨论】:

  • 10 年前我的大学微积分不及格;)我真的很感激算法!
  • 这是代数,不是微积分 :)
  • 我在看玄幻小说,没注意听课,好吗?是的,我也不总是在正确的房间......
  • 算法是给定的——它是高斯消元法。没有什么可以给的。在任何线性代数文本中找到它 - 它会在第一章或第二章中。
猜你喜欢
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多