需要用迭代法求解SLAE。这些方法都已经有了,你只需要在程序文件中正确应用它们
Console.WriteLine("Есть матрица А");
double[,] A = {
{ 2, 1 },
{ 1, -2 }
};
Matrix.dispMartix(A);
Console.WriteLine("и eё вектор решений");
double[] B = { 3, 1 };
Matrix.dispVec(B);
Console.WriteLine();
double[] C;
C = SLAU.solveByInv(A,B);
Matrix.dispVec(C);
double tor=10;
double[] C1;
C1 = SLAU.iteration(A,B,tor);
Matrix.dispVec(C1);
方法本身
public static double[] solveByInv(double[,] A, double[] b)
{
double[] res = new double[b.GetLength(0)];
res = Matrix.multMatToVec(Matrix.invertMatrix(A), b);
return res;
}
public static double findMaxDiff(double[] V1, double[] V2)
{
double[] diff = Matrix.addVecToVec(V1, Matrix.multVecToNumb(V2, -1));
double res = Math.Abs(diff[0]);
for (int i = 0; i < diff.GetLength(0) - 1; i++) {
if (Math.Abs(diff[i + 1]) >= diff[i]) {
res = Math.Abs(diff[i + 1]);
}
}
return res;
}
public static double[] iteration(double[,] c, double[] b, double eps)
{
double[] result = new double[c.GetLength(0)];
double[] previousRes = new double[result.GetLength(0)];
double normC = 0;
for (int row = 0; row < c.GetLength(0); row++)
{
for (int col = 0; col < c.GetLength(1); col++)
{
normC += Math.Pow(c[row, col], 2);
}
}
normC = Math.Sqrt(normC);
if (normC > 1)
{
Console.WriteLine("Есть решение");
}
else
{
Console.WriteLine("Решений нет");
}
for (int i = 0; i < previousRes.GetLength(0); i++)
{
previousRes[i] = 0;
}
double max = -1;
// итерац. проц Xi+1=Cxi+b
do
{
max = -1;
result = Matrix.addVecToVec(Matrix.multMatToVec(c, previousRes), b);
max = SLAU.findMaxDiff(result, previousRes);
for (int i = 0; i < result.GetLength(0); i++)
{
previousRes[i] = result[i];
}
}
while (max > eps);
return result;
}
如何正确应用它们?此外,已经编写了许多其他方法来处理矩阵。
如何调用方法的示例。在这样做之前,不要忘记包含“您的代码”中描述的 SLAU 类。