唯一解(矩阵法、solve函数)
{
3
x
+
y
=
9
x
+
2
y
=
8
\left\{ \begin{matrix} 3x+y=9 \\ x+2y=8 \end{matrix} \right.
{3x+y=9x+2y=8
A
x
=
b
Ax=b
Ax=b,其中
A
=
[
3
1
1
2
]
A=\left[\begin{matrix} 3 & 1 \\ 1 &2 \end{matrix}\right]
A=[3112],
B
=
[
9
8
]
B=\left[\begin{matrix} 9 \\ 8 \end{matrix}\right]
B=[98],则
x
=
A
−
1
b
=
[
2
3
]
x = A^{-1}b=\left[\begin{matrix} 2 \\ 3 \end{matrix}\right]
x=A−1b=[23]
可以使用
np.linalg.inv(a) @ b
或者np.linalg.solve(a, b)
求解
import numpy as np
a = np.array([[3, 1], [1, 2]])
b = np.array([[9] ,[8]])
x1 = np.linalg.inv(a) @ b #第一种解法
#上面语句中@表示矩阵乘法
x2 = np.linalg.solve(a, b) #第二种解法
print(a);print(b)
print(np.linalg.inv(a))
print(x1); print(x2)
最小二乘解(方程数>未知数)
具体解释线性方程组的最小二乘解和最小范数解 - 杨晓东的文章 - 知乎
{
3
x
+
y
=
9
x
+
2
y
=
8
x
+
y
=
6
\left\{ \begin{matrix} 3x+y=9 \\ x+2y=8 \\x+y=6 \end{matrix} \right.
⎩
⎨
⎧3x+y=9x+2y=8x+y=6
使用广义逆矩阵
np.linalg.pinv(a) @ b
,结果最小二乘解:[2,3.1667]
import numpy as np
a = np.array([[3, 1], [1, 2], [1, 1]])
b = np.array([9, 8, 6])
x = np.linalg.pinv(a) @ b
print(np.round(x, 4))