目录
1 线性方程组分类
2 线性方程组解的情况和对应条件
2.1 齐次线性方程组
2.2 非齐次方程
3 线性方程组求解——Python
3.1 齐次线性方程
3.2 非齐次方程
线性方程组按常数项是否为0可分为:齐次线性方程组Ax=0和非齐次方程组Ax=b。
线性方程组按照方程个数和未知数个数的比较结果可分为:超定方程、欠定方程、适定方程。超定方程指方程个数大于未知数个数;欠定方程指方程个数小于未知数个数;适定方程指的是方程个数等于未知数个数。
齐次线性方程组可表示为:
,A为m×n的矩阵
从上式可以看出,齐次线性方程组一定有解,即零解。所以齐次线性方程组的解有两种情况:① 只有零解;② 有非零解。
通用判定条件:
如果R(A)=n,则只有零解;
如果R(A)<n,则有非零解。
如果A是方阵,还可以采用行列式来进行判定(行列式为0时,一定不是满秩,即R(A) 如果 齐次方程可表示为: 非齐次方程的解有三种情况:① 无解;② 唯一解;③ 无穷解。 通用判定条件: 如果R(A) 注:文中(A:b)均表示增广矩阵 无论是齐次方程还是非齐次方程求解之前都需要判断方程解的情况,然后再求解。 ① R(A)=n,此时方程只有零解,即x=0; ② R(A) Python代码如下: 测试用例是有非零解的方程,运行结果如下: ① R(A)=R(A:b)=n,有唯一解,即。 ② R(A)=R(A:b) ③ R(A) Python代码如下: 从代码可以看出无论是哪种情况,对于非齐次线性方程组来说都可以采用 测试用例采用的是有无穷解的方程,运行结果如下: 有兴趣的可以采用其它测试用例(无解、唯一解)来测试代码的运行结果。 参考链接如下: 基于MATLAB的求解线性方程组(附完整代码和例题)_唠嗑!的博客-CSDN博客_matlab解线性方程组
,只有零解;
如果,有非零解。
2.2 非齐次方程
,A为m×n的矩阵
如果R(A)=R(A:b)3 线性方程组求解——Python
3.1 齐次线性方程
化零矩阵:对于非满秩矩阵A,若存在矩阵X使 A∗X = 0 ,且 X∗X= I ,即X不等于0,则称矩阵X为矩阵A的化零矩阵.import numpy as np
import scipy
A=np.array([[1,1,1,1,1],[3,2,1,1,-3],[0,1,2,2,6],[5,4,3,3,-1]]) #创建矩阵A
m=A.shape[0] #行数
n=A.shape[0] #列数
rank_A=np.linalg.matrix_rank(A) #求解A的秩,rank(A)
print(f"rank_A={rank_A},n={n}")
if rank_A==n: #判断解的情况
print("ran(A)=n,方程只有零解")
x = np.zeros(m)
print(f"x={x}")
else:
print("ran(A)
rank_A=2,n=4
ran(A)
3.2 非齐次方程
最小,则称
为线性方程组的最小二乘解。
import numpy as np
import scipy
A=np.array([[1,2,3,4],[2,2,1,1],[2,4,6,8],[4,4,2,2]]) #创建矩阵A
b=np.array([[1],[3],[2],[6]]) #矩阵b
C=np.append(A,b,axis=1) #增广矩阵
m=A.shape[0] #行数
n=A.shape[0] #列数
rank_A=np.linalg.matrix_rank(A) #求解A的秩,rank(A)
rank_C=np.linalg.matrix_rank(C) #求增广矩阵(A:b)的秩,rank(A:b)
print(f"rank_A={rank_A},rank_C={rank_C},n={n}")
if rank_A==rank_C==n: #判断解的情况
print("ran(A)=rank(C)=n,方程有唯一解")
x=np.linalg.inv(A)@b #逆矩阵求解,A^-1*B
print(f"x={x}")
elif rank_A==rank_C
的这条代码来进行求解。
rank_A=2,rank_B=2,n=4
ran(A)=rank(B)