python 施密特标准正交化 + 判断矩阵是否正交(亲测!)

您所在的位置:网站首页 schmidit正交化怎么求 python 施密特标准正交化 + 判断矩阵是否正交(亲测!)

python 施密特标准正交化 + 判断矩阵是否正交(亲测!)

2023-05-25 01:22| 来源: 网络整理| 查看: 265

【线性代数】标准正交矩阵与Gram-Schmidt正交化_nineheaded_bird的博客-CSDN博客_标准正交矩阵

什么是施密特标准正交化? 

        标准正交向量组定义:任一向量的模为1(向量标准化),且任意两个向量的乘积为0(向量正交化),可通过施密特标准正交化实现。

      线性无关向量组未必是正交向量组,但正交向量组又是重要的!如何从一个线性无关向量组\alpha_{1},\alpha_{2},...,\alpha_{m}出发,构造出一个标准正交向量组e_{1},e_{2},...,e_{m},并且使向量组\alpha_{1},\alpha_{2},...,\alpha_{m}e_{1},e_{2},...,e_{m}(r=1,2,...,m)等价呢?那就是通过施密特(标准)正交化方法实现!

        施密特(标准)正交化(Schmidt orthogonalization): 是求欧氏空间正交基的一种方法。从欧氏空间任意线性无关的向量组\alpha_{1},\alpha_{2},...,\alpha_{m}出发,求得正交向量组\beta_{1},\beta_{2},...,\beta_{m},使由\alpha_{1},\alpha_{2},...,\alpha_{m}与向量组\beta_{1},\beta_{2},...,\beta_{m}等价,再将正交向量组中每个向量经过单位化,就得到一个标准正交向量组e_{1},e_{2},...,e_{m},这种方法称为施密特正交化。

施密特正交化的python实现

 python3 的 sympy 包实现了GramSchmidt (施密特正交化)方法如下:

from sympy.matrices import Matrix, GramSchmidt l = [Matrix([3,2,-1]), Matrix([1,3,2]), Matrix([4,1,0])] # 注意:将数据转为Matrix格式,否则调用GramSchmidt函数会报错! # 返回未单位化结果 o1 = GramSchmidt(l) # 注意:orthonormal默认为False,不执行单位化操作 print(o1) # 返回单位化结果 o2 = GramSchmidt(l,orthonormal=True) # 注意:orthonormal设为True,执行单位化操作 print(o2)

计算结果如下:

# 未单位化结果 [Matrix([ [ 3], [ 2], [-1]]), Matrix([ [-1/2], [ 2], [ 5/2]]), Matrix([ [ 1], [-1], [ 1]])] # 单位化结果 [Matrix([ [3*sqrt(14)/14], [ sqrt(14)/7], [ -sqrt(14)/14]]), Matrix([ [ -sqrt(42)/42], [2*sqrt(42)/21], [5*sqrt(42)/42]]), Matrix([ [ sqrt(3)/3], [-sqrt(3)/3], [ sqrt(3)/3]])]

sympy.Matrix 与 Numpy 的互操作:

from sympy.matrices import Matrix, GramSchmidt l = [Matrix([3,2,-1]), Matrix([1,3,2]), Matrix([4,1,0])] # 返回单位化结果 o2 = GramSchmidt(l,orthonormal=True) # 注意:orthonormal设为True,执行单位化操作 m = np.array(o2) # 内积计算,验证施密特正交化结果 print('任意两向量乘积为:',(m[0] * m[1]).sum()) print('任一向量的模为:',(m[1] * m[1]).sum()) 判断矩阵是否正交

如果AA^T=E(E为单位矩阵,AT表示“矩阵A的转置矩阵”。)或A^TA=E,则n阶实矩阵A称为正交矩阵.

import numpy as np rot_matrix = np.asarray([[ 0., -1., 0.], [ 1., 0., 0.], [ 0., 0., 1.]]) # 判断矩阵是否正交 print(rot_matrix @ rot_matrix.T) # 方法1 print(np.dot(rot_matrix,rot_matrix.T)) # 方法2 #输出结果: #[[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]] #[[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]]



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3