0
点赞
收藏
分享

微信扫一扫

【案例】我不仅要矩阵最简型,我还要...施密特正交化、标准化

案例介绍

书接上回 ​​【案例】求出矩阵的最简型?——sympy登场​​,今天我们来进一步编写我们的项目,从原理上来讲,上次我们能够求出一个矩阵的最大无关组,而这次,我们进一步将线性无关的列向量使用施密特正交化,化为正交向量组,顺便还进一步标准化。

准备工作

  • Python3.x
  • numpy
  • sympy

预备知识

施密特正交化

线性无关向量组未必是正交向量组,如何从一个线性无关的向量组出发,构造出一个标准正交向量组,并且使得两个向量组等价?通过施密特正交化即可。α列向量组为线性无关的向量组,β向量组为施密特正交化后的正交向量组。

【案例】我不仅要矩阵最简型,我还要...施密特正交化、标准化_微信公众号

标准化过程:

【案例】我不仅要矩阵最简型,我还要...施密特正交化、标准化_用户交互_02

代码汇总

# coding: utf-8
# !/usr/bin/python
"""
@File : matrix.py
@Author : jiaming
@Modify Time: 2020/5/17 12:31
@Contact :
@微信公众号答疑: codenough
@Desciption : None
"""
import numpy as np
from sympy import Matrix, GramSchmidt


matrix = [[2, 1, 0], [2, 0, 1]]
print("原矩阵:", Matrix(np.array(matrix)))

rref = Matrix(np.array(matrix)).rref()[0].tolist()
print("最简型:", rref)


def std_print(o):
L = []
for i in [i.tolist() for i in o]:
l = []
for j in i:
l.append(j[0])
# print(l)
L.append(l)
return L


M = [Matrix(i) for i in matrix]
o1 = GramSchmidt(M)
print("正交化:", std_print(o1))
o2 = GramSchmidt(M, True) # 标准化
print("标准化:", std_print(o2))

运行结果

原矩阵: Matrix([[2, 1, 0], [2, 0, 1]])
最简型: [[1, 0, 1/2], [0, 1, -1]]
正交化: [[2, 1, 0], [2/5, -4/5, 1]]
标准化: [[2*sqrt(5)/5, sqrt(5)/5, 0], [2*sqrt(5)/15, -4*sqrt(5)/15, sqrt(5)/3]]

后记

我们这次进一步完善了我们的矩阵运算项目,当然他还有很多不足,比如之前就提到的用户交互不足,打包等等问题,这些问题,我们之后再解决吧。
【案例】我不仅要矩阵最简型,我还要...施密特正交化、标准化_python_03


举报

相关推荐

0 条评论