C++ LU分解
这里使用的使用VS2017
两个主要函数:
double **factor(double **A, int n);
int solve(double **LU, double*b, int n);
首先初始化二维数组,输入A,b
第一个函数进行LU分解:
for (int i = 1; i < n; i++)
{
A[i][0] = A[i][0] / A[0][0];
}
for (int i = 1; i < n; i++)
{
for (int j = i; j < n; j++)
{
for (int k = 0; k <i; k++)
{
A[i][j] -= A[i][k] * A[k][j];//计算u_ij
}
}
for (int j = i+1; j < n; j++)
{
if (A[i][i] != 0)
{
A[j][i] = A[j][i] / A[i][i];
for (int h = 0; h < i; h++)
{
A[j][i] = A[j][i] - (A[j][h] * A[h][i]) / A[i][i];//计算l_ji
}
}
else
cout << "循环结束\n";
break;
}
}
第二个函数解方程组Ax=b
//solve Ly=b
for (int i = 1; i < n; i++)
{
for (int k = 0; k < i; k++)
{
b[i] -= A[i][k] * b[k];
}
}
//solve Ux=y
b[n - 1] = b[n - 1] / A[n - 1][n - 1];
for (int j = n-2; j>= 0; j--)
{
double s = 0;
for (int m = j+1; m < n; m++)
{
s = s + A[j][m] * b[m];
}
b[j] = (b[j] - s) / A[j][j];
}