0
난 방정식의 시스템을
1 = x⊕y⊕z
1 = x⊕y⊕w
0 = x⊕w⊕z
1 = w⊕ y⊕z
이 시스템을 해결하기 위해 가우시안 제거를 구현하려고합니다. here으로 나눗셈, 뺄셈 및 곱셈을 XOR로 바꾸지 만 잘못된 대답을줍니다. 정답은 (x, y, z, w)입니다.) = (0,1,0,0)
내가 뭘 잘못하고 있니?방법 진 방정식 가우스 소거법을 구현하기
public static void ComputeCoefficents(byte[,] X, byte[] Y)
{
int I, J, K, K1, N;
N = Y.Length;
for (K = 0; K < N; K++)
{
K1 = K + 1;
for (I = K; I < N; I++)
{
if (X[I, K] != 0)
{
for (J = K1; J < N; J++)
{
X[I, J] /= X[I, K];
}
//Y[I] /= X[I, K];
Y[I] ^= X[I, K];
}
}
for (I = K1; I < N; I++)
{
if (X[I, K] != 0)
{
for (J = K1; J < N; J++)
{
X[I, J] ^= X[K, J];
}
Y[I] ^= Y[K];
}
}
}
for (I = N - 2; I >= 0; I--)
{
for (J = N - 1; J >= I + 1; J--)
{
//Y[I] -= AndOperation(X[I, J], Y[J]);
Y[I] ^= (byte)(X[I, J]* Y[J]);
}
}
}
뭔가 비린내가 보인다. 1 배를 곱하면 값은 변경되지 않습니다. 'xor'로 바꾸면 1을 곱하면 모든 것이 반전됩니다. 일반적으로, 논리 연산자가 산술로 대체되면, 덧셈은 '또는'또는'xor'로 대체됩니다. '또는'는 쉬운 역변환을 가지지 않지만'xor'는 그 자체의 역함수입니다. 곱셈은'and'로 대체됩니다. '와'의 쉬운 반대가 없지만이 경우에는 나누기가 필요하지 않습니다. 곱셈이 필요하지 않아야합니다. – Steve314
이 알고리즘은 특정 조건에서만 작동합니다. 그것은 어떤 방법으로도 안정적이지 않습니다. 분할은 1로만 수행되기 때문에 첫 번째 for-loop를 멀리 둘 수 있습니다. 결과는 변경되지 않습니다. 그렇다면, 나의 반대에서, 남은'for (J = K1; J