前几天一个在乌克兰读什么生态环境工程的小朋友在朋友圈发了一张求解多元线性方程组的图片,这老师真变态,这么大的数非得让他们动手拿笔来求解,我就给他一下标准答案,以至他可以作参考吧
先来一个小案例:
# 求解线性方程组
from scipy import linalg
import numpy as np
A = np.array([[1, 1, 7], [2, 3, 5], [4, 2, 6]]) # A代表系数矩阵
y = np.array([2, 3, 4]) # b 代表常数列
x = linalg.solve(A, y)
print(x)
结果是
[0.6 0.35 0.15]
他的问题是这样的
A = np.array([[4, 42, 548, 8598, 147620],
[42, 548, 8598, 147620, 2654982],
[548, 8598, 147620, 2654982, 48939188],
[8598, 147620, 2654982, 48939188, 914198838],
[147620, 2654982, 48939188, 914198838, 17203752260]])
y = np.array([312, 2726, 36157, 571574, 9849852])
x = linalg.solve(A, y)
print(x)
最终结果是这样的
[-1.02406157e+01 6.24077239e+01 -1.47009378e+01 1.24586338e+00
-3.33557879e-02]
如果想保留两位小数,四舍五入一下那可就差很大了,我们把四舍五入的结果来验证一下
# 验证结果
x = x.round(2)
np.dot(A, x)
得到的结果和原始的y差别那不是一般的大:
array([8.43560000e+02, 1.22555400e+04, 2.11527520e+05, 3.84470514e+06,
7.14157139e+07])