Skip to content

20138: 求解多元一次方程组

http://cs101.openjudge.cn/practice/20138

现在需要求解给定的多元一次方程组,方程的数量保证与未知数相等,且有唯一解。方程组会按照如下图所示的增广矩阵的形式给出。请依次给出每个未知数的解。

img

输入

第一行输入正整数n,表示未知数个数(2=接下来n行,每行输入n+1个整数,表示增广矩阵的各个元素

输出

一共n行,按如下格式输出每个未知数的解,结果保留两位小数,未知数的顺序与增广矩阵中从左到右的顺序相同。

样例输入

3
2 3 1 6
1 -1 2 -1
1 2 -1 5

样例输出

x1 = 2.00
x2 = 1.00
x3 = -1.00

来源:cs101-2019 高靖松

python
n=int(input())
mat=[]
ans=[]
for i in range(n):
    mat.append([float(x) for x in input().split()])
for i in range(n):
    if mat[i][i]==0:
        for j in range(i+1,n):
            if mat[j][i]!=0:
                mat[i],mat[j]=mat[j][:],mat[i][:]
                break
    mat[i]=[x/mat[i][i] for x in mat[i]]
    for j in range(i+1,n):
        k=mat[j][i]/mat[i][i]
        mat[j]=[mat[j][x]-k*mat[i][x] for x in range(n+1)]
for i in range(n-1,-1,-1):
    ans.append(mat[i][-1]/mat[i][i])
    for j in range(i):
        mat[j][-1]-=mat[j][i]*ans[-1]
ans.reverse()
for i in range(n):
    print('x{} = {:.2f}'.format(i+1,ans[i]))