2009-08-01 11 views
3

演算子が標準演算ではなくカスタム演算子である場合、ガウス消去を実装する良い方法は何ですか?ここでカスタム演算子によるガウス消去

は、オペレータは、以下のとおりです。

追加:

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でアルゴリズムを探しています。

+0

新しい演算子のために、結果セットが分数であるため、いくつかの式セットが解決できなくなることに注意してください。私は特に解決力の問題に興味があります。 – Killroy

答えて

6

擬似コードにおけるガウス消去アルゴリズムは、hereです。

「通常の」番号を使用している場合、またはZ のリングにいる場合は、アルゴリズムは変わりません。

あなたが行うことができる操作は、操作している値を保持し、すべての必要な演算子をオーバーロードする構造を実装することです。

残念ながら、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; 
} 
+0

演算子は大きな問題ではありません。ビット演算子におおよそ対応しています。私はウィキペディアのアルゴリズムを使うことができると思う。私はそれを知っていた、それはどのように一緒にフィットするだろうか分からなかった。 – Killroy

3

本当にカスタム演算子ではありません。むしろZ 標準モジュロ2を加えたものです。

これはfieldです。だから、あなたは "分数"の問題を抱えていません。

ガウス消去アルゴリズムは実数のフィールドに限定されません。 Z でも同様に動作します。

+0

10年前に私の大学計算に失敗しました;)本当にアルゴリズムがありがとう! – Killroy

+5

これは計算ではなく代数です。 – balpha

+0

私はファンタジー小説を読んでいましたが、講義には注意を払っていませんでした。そして、はい、私はいつも正しい部屋にいませんでした。 – Killroy

関連する問題