Doolittle分解法解线性方程组为什么得不出图中答案 求帮我看看代码哪有错

img


代码如下
#include
using namespace std;
int main()
{
double l[3][3] =
{
{1,0,0},
{0,1,0},
{0,0,1},
},
u[3][3] =
{
{0,0,0},
{0,0,0},
{0,0,0},
},
a[3][3] =
{
{2,1,1},
{1,3,2},
{1,2,2},
}, x[3], y[3], b[3] = { {4}, {5}, {6}, }
;
int k = 1, j = 1, n = 3, r = 1, i = 1;
for (k; k <= n; k++)/*开始分解*/
{
for (j = k; j <= n; j++)/*求U中第k行元素*/
{
u[k][j] = a[k][j];
for (r; r <= k - 1; r++)
{
u[k][j] = u[k][j] - l[k][r] * u[r][j];
}
}
for (i = k + 1; i <= n; i++)/*求L中第k列元素*/
{
l[i][k] = a[i][k];
for (r; r <= k - 1; r++)
{
l[i][k] = l[i][k] - l[i][r] * u[r][k];
}
l[i][k] = l[i][k] / u[k][k];
}
}/*结束分解*/
for (i; i <= n; i++)/*由Ly=b求出y[i]*/
{
y[i] = b[i];
for (j; j <= i - 1; j++)
{
y[i] = y[i] - l[i][j] * y[j];
}
}
for (i = n; i >= 1; i--)/由Ux=y求出x[i]/
{
x[i] = y[i];
for (j = i + 1; j >= n; j--)
{
y[i] = y[i] - u[i][j] * x[j];
}
x[i] = y[i] / u[i][i];
}
cout << x[i] <<" "<< endl;

system("pause");
return 0;

}

C++数组的下标是从0开始的,3行3列的数组下标范围是[0,2],你代码中都是从1开始的,[1,3],当k,j,i 等于3的时候,数组越界了