def DecompositionQR(A): n, p = A.shape if n != p or A.det() == 0: raise Exception("Les données ne sont pas correctes") AA = A.copy() O = sp.eye(n) for i in range(n): if not AA[i+1:, i].is_zero_matrix: B = AA.copy() for j in range(i): B[j, i] = 0 Ci = sp.Matrix([int(k == i) for k in range(n)]) S = mat_simp(mat(Ci-B[:, i]/B[:, i].norm())) O = S@O AA = S@AA return O.transpose(), AA这段代码在干什么
时间: 2024-02-15 11:28:09 浏览: 25
这段代码实现了对一个矩阵进行 QR 分解的过程。QR 分解是将一个矩阵分解为正交矩阵 Q 和上三角矩阵 R 的乘积的过程。具体来说,这段代码实现了基于 Householder 变换的 QR 分解算法,它通过一系列的 Householder 变换将原始矩阵转化为一个上三角矩阵,然后将每个 Householder 变换对应的正交矩阵累乘起来得到 Q。最后返回的是 Q 的转置和分解后的上三角矩阵 R。
相关问题
def mat_simp(M): n, p = M.shape for i in range(n): for j in range(p): M[i, j] = M[i, j].simplify().expand().simplify() return M def mat(u): n = len(u) M = sp.zeros(n, n) for j in range(n): cj = sp.Matrix([int(i == j) for i in range(n)]) Mcj = cj-2*cj.dot(u)/u.norm()**2*u for i in range(n): M[i, j] = Mcj[i] return M def DecompositionQR(A): n, p = A.shape if n != p or A.det() == 0: raise Exception("Les données ne sont pas correctes") AA = A.copy() O = sp.eye(n) for i in range(n): if not AA[i+1:, i].is_zero_matrix: B = AA.copy() for j in range(i): B[j, i] = 0 Ci = sp.Matrix([int(k == i) for k in range(n)]) S = mat_simp(mat(Ci-B[:, i]/B[:, i].norm())) O = S@O AA = S@AA return O.transpose(), AA修改这段代码,使她可以做QR分解
以下是修改后的代码,可以进行 QR 分解:
```
def mat_simp(M):
n, p = M.shape
for i in range(n):
for j in range(p):
M[i, j] = M[i, j].simplify().expand().simplify()
return M
def mat(u):
n = len(u)
M = sp.zeros(n, n)
for j in range(n):
cj = sp.Matrix([int(i == j) for i in range(n)])
Mcj = cj-2*cj.dot(u)/u.norm()**2*u
for i in range(n):
M[i, j] = Mcj[i]
return M
def qr_decomposition(A):
n, p = A.shape
if n != p or A.det() == 0:
raise Exception("Les données ne sont pas correctes")
AA = A.copy()
Q = sp.eye(n)
for i in range(n):
if not AA[i+1:, i].is_zero_matrix:
B = AA.copy()
for j in range(i):
B[j, i] = 0
Ci = sp.Matrix([int(k == i) for k in range(n)])
S = mat_simp(mat(Ci-B[:, i]/B[:, i].norm()))
Q = Q@S
AA = S@AA
R = AA
return Q.transpose(), R
```
将函数名 `DecompositionQR` 改成了 `qr_decomposition`,并且修改了函数主体部分,使其能够进行 QR 分解。
def DecompositionQR(A): n, p = A.shape if n != p or np.linalg.det(A) == 0: raise Exception("Les données ne sont pas correctes") AA = A.copy() O = sp.eye(n) for i in range(n): if not AA[i+1:, i].is_zero_matrix: B = AA.copy() for j in range(i): B[j, i] = 0 Ci = sp.Matrix([int(k == i) for k in range(n)]) S = mat_simp(mat(Ci-B[:, i]/B[:, i].norm())) O = S@O AA = S@AA return O.transpose(), AA把这段代码中的sp转为np
80 + (y + i + 1) * 16 + x); //设置下一行的显示地址
}
LCD12864_WriteCommand(0x34); //扩展指令集
LCD12864_WriteCommand(0x36);将代码中的 `sp` 替换为 `np` 即可:
```
import numpy as np
def DecompositionQR(A):
//扩展指令集
}
//LCD12864更新屏幕
void LCD12864_Update()
{
LCD12864_Clear n, p = A.shape
if n != p or np.linalg.det(A) == 0:
raise Exception("Les données();
LCD12864_ShowBall(ball_x, ball_y);
LCD12864_ShowBrick(brick_x, brick_y, brick_width ne sont pas correctes")
AA = A.copy()
O = np.eye(n)
for i in range(n):
if not, brick_height);
LCD12864_ShowBoard(board_x, board_y, board_width);
}
//小球碰撞检测
void AA[i+1:, i].is_zero_matrix:
B = AA.copy()
for j in range(i):
B[j, i Ball_Collision()
{
if(ball_x < brick_x + brick_width && ball_x + 8 > brick_x && ball_y < brick] = 0
Ci = np.matrix([int(k == i) for k in range(n)])
S = mat_simp(mat_y + brick_height && ball_y + 8 > brick_y) //小球和砖块相撞
{
ball_speed(Ci-B[:, i]/B[:, i].norm()))
O = S@O
AA = S@AA
return O.transpose(), AA
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)