大家好,欢迎来到IT知识分享网。
施密特正交化 GramSchmidt
施密特正交化的原名是 Gram–Schmidt process,是由Gram和schmidt两个人一起发明的,但是后来因为施密特名气更大,所以该方法被简记为施密特正交化。
借用 《线性代数》P117-例2 的例子来运行代码。
正交化后:
单位化后:
代码实现
python3 的 sympy 包实现了 GramSchmidt 方法。
from sympy.matrices import Matrix, GramSchmidt
l = [Matrix([1,2,-1]), Matrix([-1,3,1]), Matrix([4,1,0])]
o = GramSchmidt(l)
计算结果如下:
[Matrix([
[ 1],
[ 2],
[-1]]),
Matrix([
[-5/3],
[ 5/3],
[ 5/3]]),
Matrix([
[2],
[0],
[2]])]
单位化也就是在调用函数的时候传入参数。
from sympy.matrices import Matrix, GramSchmidt
l = [Matrix([1,2,-1]), Matrix([-1,3,1]), Matrix([4,1,0])]
o = GramSchmidt(l, True)
计算结果如下:
[Matrix([
[ sqrt(6)/6],
[ sqrt(6)/3],
[-sqrt(6)/6]]),
Matrix([
[-sqrt(3)/3],
[ sqrt(3)/3],
[ sqrt(3)/3]]),
Matrix([
[sqrt(2)/2],
[ 0],
[sqrt(2)/2]])]
sympy.Matrix 与 Numpy 的互操作
Matrix 转 Numpy.array
import numpy as np
from sympy.matrices import Matrix, GramSchmidt
l = [Matrix([1,2,-1]), Matrix([-1,3,1]), Matrix([4,1,0])]
o = GramSchmidt(l, True)
m = np.array(o)
内积计算
(m[0] * m[1]).sum()
References
[1] https://en.wikipedia.org/wiki/Gram–Schmidt_process
[2] GramSchmidt. sympy: https://docs.sympy.org/latest/modules/matrices/matrices.html?highlight=gramschmidt#sympy.matrices.dense.GramSchmidt
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34372.html