(转)伴随矩阵

线性代数:矩阵运算之求伴随矩阵?

1.   前言:想要学会《线性代数》中的——求伴随矩阵,我们这次的学习将按照下面的步骤进行:

(1)       了解什么是方阵的行列式;

(2)       方阵行列式的运算规则;

(3)       伴随矩阵得定义;

(4)       求方阵的伴随矩阵;

(5)       牢记伴随矩阵的特殊定义;

2.   让我们首先了解方阵行列式的定义,如下图:

3.   了解方阵行列式的运算规则,如下图:

4.   得出方阵的伴随矩阵定义,如下图:

5.   结合例子,加深理解,如下图:

6.   牢记伴随矩阵的妙用,如下图:

7.    7

例子:



关于求伴随矩阵已经讲解完了,祝贺您今天又学习了新知识。

 

### 关于稀疏矩阵求伴随矩阵 对于稀疏矩阵而言,由于其大部分元素为零的特点,在计算伴随矩阵时可以利用这一特性减少不必要的运算。然而,直接针对稀疏矩阵设计专门的伴随矩阵算法并不常见,通常的做法是先将稀疏矩阵化为稠密矩阵再按照常规方式计算伴随矩阵。 #### 方法一:通过LU分解间接获得伴随矩阵 一种较为高效的方式是借助LU分解来实现伴随矩阵的计算。具体来说,给定一个可逆方阵A,则可以通过对其进行LU分解得到L和U两个三角形矩阵。之后基于这两个矩阵构建辅助向量y_i, i=1,...n (其中n为矩阵阶数),进而求解线性方程组Ly=b_U 和 Ux=y 来逐步形成最终的结果[^2]。 ```python from scipy.sparse import csc_matrix import numpy as np from scipy.linalg import lu_factor, lu_solve def adjoint_via_lu(sparse_mat): dense_A = sparse_mat.toarray() n = dense_A.shape[0] # LU factorization of A lu, piv = lu_factor(dense_A) adjugate = [] identity = np.eye(n) for col in range(n): b = identity[:,col] y = lu_solve((lu,piv),b) temp_row = [] for row in range(n): e = np.zeros_like(b); e[row]=1. z = lu_solve((lu,piv),e) cofactor = (-1)**(row+col)*np.dot(z,y.T) temp_row.append(cofactor) adjugate.append(temp_row) return np.array(adjugate).T ``` 这种方法虽然能够有效降低部分场景下的时间开销,但对于非常大规模的稀疏矩阵仍然存在性能瓶颈。 #### 方法二:直接换成密集形式并调用现成库函数 另一种更为简单粗暴的办法就是把原始输入的稀疏矩阵强制变为普通的二维数组(即Dense Matrix),接着就可以直接应用NumPy或其他科学计算包里已有的adjoint/adjugate接口完成任务了: ```python from scipy.sparse import csr_matrix import numpy as np def simple_adjoint_conversion(sparse_input): mat_dense = sparse_input.todense() # Convert to a dense format det = np.linalg.det(mat_dense) inversed = np.linalg.inv(mat_dense) adjugated = det * inversed return adjugated ``` 需要注意的是上述两种方案都假设传入的参数是一个方形且满秩的稀疏矩阵;另外当面对超大型数据集时可能需要考虑内存占用情况选择合适的策略[^3]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值