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

这篇具有很好参考价值的文章主要介绍了python 施密特标准正交化 + 判断矩阵是否正交(亲测!)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

python矩阵正交化,算法,人工智能

施密特正交化的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())

判断矩阵是否正交

如果(E为单位矩阵,AT表示“矩阵A的转置矩阵”。)或,则n阶实矩阵A称为正交矩阵.文章来源地址https://www.toymoban.com/news/detail-780288.html

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.]]

到了这里,关于python 施密特标准正交化 + 判断矩阵是否正交(亲测!)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c# 线性代数 克·施密特(Gram Schmidt)

            Gram-Schmidt 方法是一种用于将线性无关的向量集合转化为一组正交(垂直)的向量集合的数学技术。这个方法是在线性代数中常用的一种技术,用于处理向量空间中的正交化和标准化操作。Gram-Schmidt 方法的主要思想是,通过一系列的投影和减法操作,将原始向量集

    2024年02月22日
    浏览(40)
  • 判断交叉编译工具是否支持C++20的标准

    执行 没报错则代表支持,报错则不支持 .

    2024年01月20日
    浏览(63)
  • 题目:2319.判断矩阵是否是 X 矩阵

    ​​ 题目来源:         leetcode题目,网址:2319. 判断矩阵是否是一个 X 矩阵 - 力扣(LeetCode) 解题思路:        遍历矩阵,对于每一个节点,先判断是否处于主对角线或副对角线上,然后判断是否为0 。 解题代码: 总结:         官方题解也是一样的思路。

    2024年02月14日
    浏览(66)
  • MATLAB-判断两矩阵是否相等

    相等的位置返回1,不相等则返回0 相等返回1,不相等返回0 注意:矩阵不可以包含NaN,因为这个函数中,NaN~=NaN。

    2024年02月06日
    浏览(98)
  • 判断N阶矩阵是否为严格对角占优矩阵

    提示:仅供参考 用于C语言学习交流,本代码使用vs2022实现,scanf函数请自行修改。 比较基础的一道题目 提示:以下是本篇文章正文内容,下面案例可供参考        求解一般线性方程组Ax = b时, 如果A矩阵是严格对角占优矩阵,那么我们可以使用雅可比方法迭代求出他的最终解

    2024年02月11日
    浏览(47)
  • 【如何快速判断矩阵是否相似对角化】

    关于如何快速判断矩阵是否可以相似对角化的方法 原理 :

    2024年02月13日
    浏览(79)
  • 【线性代数】如何判断矩阵是否可以相似对角化

    第一步,看是不是实对称矩阵,如果是实对称矩阵,立即推可相似对角化,如果不是实对称矩阵,看第二步; 第二步,求方阵的n个特征值,如果特征值彼此都不相同,也就是都是单根的话,立即推可相似对角化,如果有重根,看第三步; 第三步,来验证k重根是不是具备k个

    2024年02月11日
    浏览(51)
  • Python如何判断变量是否存在?

    python中可以使用locals()、dir()、vars()等函数来查询变量是否存在。 1、 locals() 函数将当前位置的所有局部变量作为字典返回。 2、当 dir() 函数不带参数时,它返回当前范围内的变量、方法和定义类型的列表;当它接受参数时,它返回参数的属性和方法列表。 3、vars() 函数返回对

    2024年02月11日
    浏览(64)
  • python判断是否为list。转

    python判断是否为list ( - )浩( - )浩2019-08-31 09:05:39原创 判断是否为列表 格式:print(isinstance(变量,list)) 1 print(isinstance(slink,list)) 结果 :true说明为列表(list) 返回false说明不是列表(list) 获取类型 print(type(slink)) 执行结果为:class ‘list’说明为列表类型 isinstance和type区别 isinst

    2023年04月08日
    浏览(48)
  • Python实现:如何判断数字是否在区间?

    Python实现:如何判断数字是否在区间? 当我们需要对一些数值进行筛选和处理时,常常需要知道一个给定数字是否在指定的区间内。在Python中,我们可以使用简单的几行代码快速判断数字是否在区间内。 判断一个数值是否在某一个区间内,就是判断这个数值是否满足区间的

    2024年02月03日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包