8.1 内积定义与表示

双线性函数

  线性代数里的双线性函数,是将定义在域F上的线性空间里的两个变量,映射为一个域F上的一个元素。它必须要符合以下四个要求,才能叫做双线性函数:

  1. f ( u , w 1 + w 2 ) = f ( u , w 1 ) + f ( u , w 2 ) f(\bold u,\bold w_1+\bold w_2)=f(\bold u,\bold w_1)+f(\bold u,\bold w_2) f(u,w1+w2)=f(u,w1)+f(u,w2)
  2. f ( u 1 + u 2 , w ) = f ( u 1 , w ) + f ( u 2 , w ) f(\bold u_1+\bold u_2,\bold w)=f(\bold u_1,\bold w)+f(\bold u_2,\bold w) f(u1+u2,w)=f(u1,w)+f(u2,w)
  3. f ( k u , w ) = k f ( u , w ) f(k\bold u,\bold w)=kf(\bold u,\bold w) f(ku,w)=kf(u,w)
  4. f ( u , k w ) = k f ( u , w ) f(\bold u,k\bold w)=kf(\bold u,\bold w) f(u,kw)=kf(u,w)

  以上四点保证了线性性和结合律,又因为是两个变量的函数,所以叫双线性函数。

内积

  内积也是一种双线性函数,不过定义更加严格,加了两点要求:对称性和正定性。内积一般就不用函数符号 f f f,而是直接一对括号就可以了。

  1. 对称性, ( u , w ) = ( w , u ) (\bold u,\bold w)=(\bold w,\bold u) (u,w)=(w,u)
  2. 正定性, ( u , w ) ≥ 0 (\bold u,\bold w)\ge 0 (u,w)0

内积表示

  内积有很多,千奇百怪,可以用度量矩阵表示内积,这样形式上就统一了。度量矩阵在外国教材里一般叫度量张量Mertic tensor,因为2-张量就是矩阵嘛。当然度量矩阵不是内积专有的,所有双线性函数都有度量矩阵,它的定义如下:
A = ( ( e 1 , e 1 ) ( e 1 , e 2 ) ⋯ ( e 1 , e n ) ( e 2 , e 1 ) ( e 2 , e 2 ) ⋯ ( e 2 , e n ) ⋮ ⋮ ⋱ ⋮ ( e n , e 1 ) ( e n , e 2 ) ⋯ ( e n , e n ) ) A=\begin{pmatrix} (e_1,e_1) & (e_1,e_2) & \cdots & (e_1,e_n)\\ (e_2,e_1) & (e_2,e_2) & \cdots & (e_2,e_n)\\ \vdots & \vdots & \ddots & \vdots\\ (e_n,e_1) & (e_n,e_2) & \cdots & (e_n,e_n)\\ \end{pmatrix} A= (e1,e1)(e2,e1)(en,e1)(e1,e2)(e2,e2)(en,e2)(e1,en)(e2,en)(en,en)
  公式中的 e 1 , e 2 , ⋯   , e n e_1,e_2,\cdots,e_n e1,e2,,en是任意一组基,一般情况下用自然基。有了度量矩阵后,计算内积就可以使用 ( α , β ) = α T A β (\alpha,\beta)=\alpha^TA\beta (α,β)=αTAβ来计算了。内积的度量矩阵必须是实对称正定矩阵。
  这样不好记忆,毕竟记住一个矩阵不容易,有一个特别简单的公式用来记忆:
A i j = ( e i , e j ) A_{ij}=(e_i,e_j) Aij=(ei,ej)
  也就是说第i行第j列元素的值就是第i个基和第j个基做双线性运算。
  这个时候,用代码计算内积就非常容易了:

    # 内积
    @staticmethod
    def inner_product(vector1, vector2, matrix=None):
        a = Matrix(Matrix([vector1]).transpose())
        b = Matrix([vector2])
        # 如果没定义内积矩阵,则是标准内积
        if matrix is None:
            return (a * b).vectors[0][0]
        # 如果长度小了呢?
        return (a * matrix * b).vectors[0][0]

4 柯西-施瓦茨不等式

  这个不等式的内容就是:
( x ⋅ y ) ≤ ∥ x ∥ ∥ y ∥ (x\cdot y)\le \parallel x\parallel\parallel y\parallel (xy)≤∥x∥∥y
  公式里的范数是内积导出的范数, ∥ x ∥ = ( x , x ) \parallel x\parallel=\sqrt{(x,x)} x∥=(x,x)

5 度量矩阵基的变换

  不同基下的度量矩阵是不一样的。而这个问题,可以在我的另一篇文章8.4 矩阵的合同里看到。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
8.1 单例模式定义 单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供了全局访问点来访问这个唯一实例。 8.2 单例模式的特点 - 单例类只有一个实例对象。 - 该单例对象必须由单例类自行创建。 - 单例类对外提供一个访问该单例的全局访问点。 8.3 单例的四大原则 - 单一职责原则:一个类只负责一个功能领域中的相应职责,不要试图将多个不同的职责耦合到同一个类中。 - 开闭原则:对修改关闭,对扩展开放。即在不修改单例类的代码的前提下,可以通过扩展单例类的子类来实现新的功能。 - 依赖倒置原则:高层模块不依赖低层模块,它们都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。 - 防止多线程环境下的多实例:可以使用线程锁等机制来控制在多线程环境下只能有一个实例。 8.4 实现单例模式的方式 - 饿汉式单例模式:在类被加载时就创建单例对象,线程安全,但可能浪费资源。 - 懒汉式单例模式:在第一次使用时才创建单例对象,可能存在线程安全问题,需要加锁控制。 - 双重检查锁单例模式:在懒汉式单例模式的基础上加入双重检查锁机制,可以在保证线程安全的同时减少锁的使用,提高效率。 - 静态内部类单例模式:利用静态内部类的特性,在加载外部类时不会加载内部类,可以实现懒汉式的延迟加载,同时保证线程安全。 - 枚举单例模式:枚举类型是线程安全的,并且只会装载一次,因此可以作为单例模式的实现方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒过来摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值