社区讨论

如果这样消元的话

灌水区参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lowufaxc
此快照首次捕获于
2023/11/13 19:50
2 年前
此快照最后确认于
2023/11/13 21:25
2 年前
查看原帖
如果这样消元的话,怎样判断无解与无穷解呢
CPP
#include<iostream>
using namespace std;
double a[1010][1010];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n+1;j++)
            cin>>a[i][j];
    for(int i=1;i<=n;i++)
    {
        int p=i;
        while(p<=n&&a[p][i]==0)
            p++;
        if(p==n+1)
        {
            /*
            ?
            ?
            ?
            */
        }
        for(int j=1;j<=n+1;j++)
            swap(a[p][j],a[i][j]);
        double kk=a[i][i];
        
        for(int j=1;j<=n+1;j++)
            a[i][j]=a[i][j]/kk;
        for(int j=1;j<=n;j++)
        {
            if(i==j)
                continue;
            double st=a[j][i];
            for(int k=1;k<=n+1;k++)
                a[j][k]=a[j][k]-st*a[i][k];
        }
    }
    // for(int i=1;i<=n;i++)
    // {
    //     for(int j=1;j<=n+1;j++)
    //         cout<<a[i][j]<<" ";
    //     cout<<endl;
    // }
    for(int i=1;i<=n;i++)
        printf("%.2lf\n",a[i][n+1]);
}
这样消元最后只会剩下对角线上的变量,且系数为 11 ,那么最后输出 ai,n+1a_{i,n+1} 就是每个未知量的解,举个例子
CPP
3
1.00 2.00 -1.00 -6.00
2.00 1.00 -3.00 -9.00
-1.00 -1.00 2.00 7.00
此样例运行出来最后的矩阵是
CPP
1 0 0 1 
-0 1 0 -2 
0 0 1 3 
这样的
那怎样判断无解与无穷解呢
谢谢

回复

3 条回复,欢迎继续交流。

正在加载回复...