C++ 循环对特定数组元素没有影响

C++ 循环对特定数组元素没有影响,c++,arrays,loops,matrix,C++,Arrays,Loops,Matrix,我正在尝试反转一个3x3矩阵。I gauss是同时具有原矩阵和单位矩阵的增广矩阵。根据矩阵的维数,单位矩阵由一个单独的函数生成,沿主对角线为1,其他地方为0。一旦操作完成,原始矩阵应该是恒等式,恒等式应该是逆矩阵。我能够成功地将原始标识转换为一个标识,但由于两个数组都在同一个循环中,所以有些东西阻止了原始标识完全变成相反的标识,这令人困惑 const int m = 3; const int n = 3; double matrix[m][n]; double ID[m][n] = {};

我正在尝试反转一个3x3矩阵。I gauss是同时具有原矩阵和单位矩阵的增广矩阵。根据矩阵的维数,单位矩阵由一个单独的函数生成,沿主对角线为1,其他地方为0。一旦操作完成,原始矩阵应该是恒等式,恒等式应该是逆矩阵。我能够成功地将原始标识转换为一个标识,但由于两个数组都在同一个循环中,所以有些东西阻止了原始标识完全变成相反的标识,这令人困惑

const int m = 3;
const int n = 3;

double matrix[m][n];
double ID[m][n] = {};

double pivot;

for(s = 1;s <= m;++s){
    pivot = matrix[s-1][s-1];
    k = s + 1;

    for(i = n;i >= 1;--i){                    // makes leading entries 1

            ID[s-1][i-1] = ID[s-1][i-1]/pivot;
            matrix[s-1][i-1] = matrix[s-1][i-1]/pivot;

        }

        for(j = k;j <= m;++j){             //converts to upper triangular

            for(i = n;i >= 1;--i){       

                ID[j-1][i-1] = ID[j-1][i-1] - ID[s-1][i-1]*matrix[j-1][s-1];    //*****<--- has no effect on ID[2][0]
                matrix[j-1][i-1] = matrix[j-1][i-1] - matrix[s-1][i-1]*matrix[j-1][s-1];

            }

        }

} //ID[2][0] = 0; <--- gives correct answer when uncommented

    for(s = m;s >= 1;--s){

        k = s - 1;

        for(j = k;j >= 1;--j){             //makes entries above diagonal zero

            for(i = 1;i <= n;++i){

                ID[j-1][i-1] = ID[j-1][i-1] - ID[s-1][i-1]*matrix[j-1][s-1];
            matrix[j-1][i-1] = matrix[j-1][i-1] - matrix[s-1][i-1]*matrix[j-1][s-1];

            }

        }

}
const int m=3;
常数int n=3;
双矩阵[m][n];
双ID[m][n]={};
双支点;
对于(s=1;s=1;--i){//使前导项为1
ID[s-1][i-1]=ID[s-1][i-1]/枢轴;
矩阵[s-1][i-1]=矩阵[s-1][i-1]/枢轴;
}
对于(j=k;j=1;--i){
ID[j-1][i-1]=ID[j-1][i-1]-ID[s-1][i-1]*矩阵[j-1][s-1];//*****=1;--j{///在对角线零上方创建条目

对于(i=1;i)为什么所有循环都从1开始,然后减去1(s=1;s调试器会很快告诉您问题出在哪里。如果您的某个索引出错,我不会感到惊讶。但是启动调试器并逐步完成代码。如果您知道如何使用调试器,您会很快发现问题,如果不知道,则将此视为学习一项极其有用的技能的理想机会。您为什么要这样做从1开始所有循环,然后减去1(s=1;s调试器会很快告诉您问题所在。如果您的索引有误,我不会感到惊讶。但是启动调试器并逐步完成代码。如果您知道如何使用调试器,您会很快发现问题,如果不知道,请将此视为学习极其有用技能的理想机会。