private void JacobianIteration(MatrixEquasion <Double> eq, Matrix <Double> oldMatrix, Matrix <Double> newMatrix, int i) { IMatrixDataType <Double> x = new MatrixDouble(0); for (int j = 0; j < eq.A.ColCount; j++) { if (i != j) { x = (x.Add(eq.A.ValueMatrix[i][j].Multiply(oldMatrix.ValueMatrix[j][0]))); } } x = x.Multiply(MatrixDouble.MINUSONE); x = x.Add(eq.B.ValueMatrix[i][0]); x = x.Divide(eq.A.ValueMatrix[i][i]); newMatrix.ValueMatrix[i][0] = x; }
private void GaussSeidelIteration(MatrixEquasion <Double> eq, Matrix <Double> newVector, int i) { IMatrixDataType <double> x = new MatrixDouble(0); for (int j = 0; j < eq.A.ColCount; j++) { if (i != j) { x = (x.Add(eq.A.ValueMatrix[i][j].Multiply(newVector.ValueMatrix[j][0]))); } } x = x.Multiply(MatrixDouble.MINUSONE); x = x.Add(eq.B.ValueMatrix[i][0]); x = x.Divide(eq.A.ValueMatrix[i][i]); newVector.ValueMatrix[i][0] = x; }
public Result Perform(MatrixEquasion <double> eq) { int NOfEquasions = 0; for (int i = 0; i <= NOfAgents; i++) { for (int j = 0; j <= NOfAgents - i; j++) { NOfEquasions++; } } MatrixDouble[][] raw = new MatrixDouble[NOfEquasions][]; for (int i = 0; i < NOfEquasions; i++) { raw[i] = new MatrixDouble[1]; } Stopwatch st = new Stopwatch(); int iteration = 0; st.Start(); for (int i = 0; i <= NOfAgents; i++) { for (int j = 0; j <= NOfAgents - i; j++) { raw[iteration][0] = new MatrixDouble(GetProbability(i, j)); iteration++; } } st.Stop(); Matrix <double> probVector = new Matrix <double>(raw); double error = Matrix <double> .GetNormOfDiffrence(eq.A.Multiply(probVector), eq.B); long time = st.ElapsedMilliseconds; return(new Result("MonteCarlo", error, time, 100000, probVector)); }