矩阵变换解一元N次方程的源代码,这是这次我们做仿真电学实验软件Team里一个人写的不过他不太喜欢注释,可能看得要辛苦点
namespace Object
{
public class Matrix
{
public Matrix()
{ }
public Matrix(double[,] matrix)
{
this.matrix = matrix;
}
double[,] matrix = new double[1, 1];//定义数组
public double[,] GetMatrix//获取设置数组
{
get { return matrix; }
set { matrix = value; }
}
public void Account(double[,] matrix, double[] mb, int number)//消除前排主项
{
for (int i = 0; i < number; i++)
{
for (int j = i + 1; j < number; j++)
{
double temp;
if (matrix[j, i] != 0)
{
temp = matrix[i, i] / matrix[j, i];
for (int k = 0; k < number; k++)
{
matrix[j, k] = matrix[i, k] - matrix[j, k] * temp;//消元
}
mb[j] = mb[i] - mb[j] * temp;
}
}
} Console.WriteLine(mb[2].ToString());
for (int i = 0; i < number; i++)
{
for (int j = 0; j < number; j++)
{
Console.Write(matrix[i, j].ToString() + " ");
}
Console.Write(mb[i].ToString());
Console.WriteLine();
}
Console.ReadLine();
}
public void ReAccont(double[,] matrix, double[] mb, int number)////消除后排主项
{
for (int i = number - 1; i >= 0; i--)
{
for (int j = i - 1; j >= 0; j--)
{
double temp;
if (matrix[j, i] != 0)
{
temp = matrix[i, i] / matrix[j, i];
for (int k = 0; k < number; k++)
{
matrix[j, k] = matrix[i, k] - matrix[j, k] * temp;//消元
}
mb[j] = mb[i] - mb[j] * temp;
}
}
}
for (int i = 0; i < number; i++) //输出消元后的矩阵
{
for (int j = 0; j < number; j++)
{
Console.Write(matrix[i, j].ToString() + " ");
}
Console.Write(mb[i].ToString());
Console.WriteLine();
}
Console.ReadLine();
for (int i = 0; i < number; i++)
{
if (matrix[i, i] != 0)
{
mb[i] = mb[i] / matrix[i, i];
matrix[i, i] = 1;
}
else
{
mb[i] = 0;
}
}
for (int i = 0; i < number; i++) //高斯-约当消去法
{
for (int j = 0; j < number; j++)
{
Console.Write(matrix[i, j].ToString() + " /t ");
}
Console.Write(mb[i].ToString());
Console.WriteLine();
}
Console.ReadLine();
for (int i = 0; i < number; i++) //输出最后结果
{
Console.WriteLine("x" + i.ToString() + "=" + mb[i].ToString());
}
Console.ReadLine();
}
}
class Program
{
static void Main(string[] args)
{
double[,] mat = new double[,] {
{ 2, 2, 3, 2, 3, 8, 4, 6, 9, 10 },
{ 4, 7, 7, 12, 55, 6, 9, 8, 4, 65 },
{ -2, 4, 5, 5, 4, 6, 8, 4, 6, 9 },
{ 0,0,5,3,4,-4,-8,9,6,7},
{1,5,6,8,9,7,4,6,5,2},
{5,8,6,7,11,45,6,25,5,4},
{5,9,8,9,77,8,16,19,20,16},
{8,9.2,65,6.3,5,6,8,4,6,7},
{4,5,8,12,20,65,46,35,10,1},
{0,0,0,0,0,4,5,6,8,9}
};
double[] ma = new double[] { 3, 1, -7, 4, 6, 8, 9, 5, 12, 4 };
Matrix m = new Matrix(mat);
m.Account(mat, ma, 10);
m.ReAccont(mat, ma, 10);
}
}
}