算法分析与设计学习(3)——代数学

代数学

矩阵

  • 基本概念

    • 矩阵定义

      • 一个 n × m n\times m n×m的矩阵是 n n n m m m​ 列的矩形阵列,一般由数组成

      • 矩阵 A \mathbf{A} A 的第 i i i 行,第 j j j 列,通常记为 A i j \mathbf{A}_{ij} Aij

      • 单位矩阵:对角线上为 1 1 1,其他都为 0 0 0​ 的矩阵。
        I = d e f ( 1 … 0 ⋮ ⋱ ⋮ 0 … 1 ) \Large{I} \overset{{\small def} }{=}\begin{pmatrix} 1& \dots &0 \\ \vdots & \ddots &\vdots \\ 0 & \dots &1 \end{pmatrix} I=def 1001

    • 矩阵加法

      • 矩阵的加法定义为每行每列的元素分别相加(减),即
        I = A ± B = ( A 1 , 1 ± B 1 , 1 … A 1 , m ± B 1 , m ⋮ ⋱ ⋮ A n , 1 ± B n , 1 … A n , m ± B n , m ) \Large{I} =\Large{A\pm B}=\begin{pmatrix} A_{1,1}\pm B_{1,1}& \dots & A_{1,m}\pm B_{1,m} \\ \vdots & \ddots &\vdots \\ A_{n,1}\pm B_{n,1}& \dots & A_{n,m}\pm B_{n,m} \end{pmatrix} I=A±B= A1,1±B1,1An,1±Bn,1A1,m±B1,mAn,m±Bn,m
    • 矩阵乘法

      • 当一个矩阵的列数等于另一个的行数时,可定义该两个矩阵的乘积。

      • A A A n × m n\times m n×m 的矩阵, B B B m × p m\times p m×p 的矩阵,他们的乘积 C C C 是一个 n × p n\times p n×p​ 的矩阵。
        C i , j = ∑ k = 1 m A i , k × B k , j \Large{C_{i,j}=\sum_{k=1}^m A_{i,k}\times B_{k,j}} Ci,j=k=1mAi,k×Bk,j

    • 矩阵的幂
      A 0 = I A n = A N − 1 × A ( n > 0 ) \Large{\begin{align} &A^0=I\\ &A^n=A^{N-1}\times A(n>0) \end{align} } A0=IAn=AN1×A(n>0)

    • 矩阵的转置

      • n × m n\times m n×m 的矩阵 A A A 的转置 A T A^T AT 是个 m × n m\times n m×n 的矩阵,可以通过 A A A 交换行列得到,即 A i , j T = A j , i A^T_{i,j}=A_{j,i} Ai,jT=Aj,i
    • 矩阵的逆

      • 只有 n × n n\times n n×n 的矩阵可能存在逆,矩阵 A A A 的逆 B B B 满足 A × B = B × A = I A \times B= B\times A = I A×B=B×A=I
      • 如果逆存在,则 B B B 是唯一的,一般记做 A − 1 A^{-1} A1
  • 性质

    • 矩阵乘法满足分配率、结合律,不一定满足交换率。
    • 矩阵加法满足交换率和结合律。
  • 算法

    • 矩阵满足结合律,所以在求矩阵的幂的时候可以使用快速幂加速
  • 用途

    • 递推可以表示成向量乘以矩阵,然后用快速幂优化

行列式

  • 基本概念

    • 行列式是一个定义域为 n × n n\times n n×n 的矩阵,值域为一个标量的函数,通常记为 d e t ( A ) \mathrm{det}(A) det(A)​ 或者 ∣ A ∣ |A| A

    • 行列式也可以表示为n维广义欧几里得空间中的有向体积。

    • 一个 n × n n\times n n×n​ 的行列式定义为
      d e t ( A ) = d e f ∑ σ ∈ S n ( − 1 ) n ( σ ) ∏ i = 1 n a i , σ ( i ) \Large{\mathrm{det}(A)\overset{{\small def} }{=}\sum_{\sigma \in S_n}(-1)^{n(\sigma) }\prod_{i=1}^{n}a_{i,\sigma(i)}} det(A)=defσSn(1)n(σ)i=1nai,σ(i)

      • 其中 S n S_n Sn 表示集合 { 1 , 2 , … , n } \{1,2,…,n\} {1,2,,n} 上的置换的全体
      • n ( σ ) n(\sigma) n(σ) 是对于一个置换中逆序对的个数,逆序对的定义为满足 1 ≤ i < j ≤ n 1≤i<j≤n 1i<jn σ ( i ) > σ ( j ) \sigma(i)>\sigma(j) σ(i)>σ(j) ( i , j ) (i,j) (i,j)
  • 性质

    • 若矩阵中一行或一列全为 0 0 0,那么该矩阵行列式为 0 0 0

    • 若矩阵中某一行有公因子 k k k,那么可以提出 k k k
      D = ∣ k a 1 , 1 ⋯ k a 1 , n ⋮ ⋱ ⋮ a n , 1 ⋯ a n , n ∣ = k ∣ a 1 , 1 ⋯ k a 1 , n ⋮ ⋱ ⋮ a n , 1 ⋯ a n , n ∣ = k D 1 \large{D= \begin{vmatrix} ka_{1,1}&\cdots & ka_{1,n} \\ \vdots & \ddots &\vdots \\ a_{n,1}&\cdots &a_{n,n} \end{vmatrix} =k \begin{vmatrix} a_{1,1}&\cdots &ka_{1,n} \\ \vdots & \ddots &\vdots \\ a_{n,1}&\cdots &a_{n,n} \end{vmatrix} =kD_1} D= ka1,1an,1ka1,nan,n =k a1,1an,1ka1,nan,n =kD1

    • 在矩阵中某一行可拆分成两个数和,那么该行列式可拆分成两个行列式相加。

    D = ∣ a 1 , 1 + b 1 , 1 ⋯ a 1 , n + b 1 , 1 ⋮ ⋱ ⋮ a n , 1 ⋯ a n , n ∣ = ∣ a 1 , 1 ⋯ a 1 , n ⋮ ⋱ ⋮ a n , 1 ⋯ a n , n ∣ + ∣ b 1 , 1 ⋯ b 1 , n ⋮ ⋱ ⋮ a n , 1 ⋯ a n , n ∣ \large{D= \begin{vmatrix} a_{1,1}+b_{1,1}&\cdots & a_{1,n}+b_{1,1} \\ \vdots & \ddots &\vdots \\ a_{n,1}& \cdots &a_{n,n} \end{vmatrix} = \begin{vmatrix} a_{1,1}&\cdots &a_{1,n} \\ \vdots & \ddots &\vdots \\ a_{n,1}&\cdots &a_{n,n} \end{vmatrix} + \begin{vmatrix} b_{1,1}&\cdots &b_{1,n} \\ \vdots & \ddots &\vdots \\ a_{n,1}&\cdots &a_{n,n} \end{vmatrix} } D= a1,1+b1,1an,1a1,n+b1,1an,n = a1,1an,1a1,nan,n + b1,1an,1b1,nan,n

    • 交换矩阵的两行,行列式取反。

    D = ∣ a 1 , 1 ⋯ a 1 , n ⋮ ⋱ ⋮ a n , 1 ⋯ a n , n ∣ = − ∣ a n , 1 ⋯ a n , n ⋮ ⋱ ⋮ a 1 , 1 ⋯ a 1 , n ∣ \large{D= \begin{vmatrix} a_{1,1}&\cdots & a_{1,n} \\ \vdots & \ddots &\vdots \\ a_{n,1}&\cdots &a_{n,n} \end{vmatrix} =- \begin{vmatrix} a_{n,1}&\cdots &a_{n,n} \\ \vdots & \ddots &\vdots \\ a_{1,1}&\cdots &a_{1,n} \end{vmatrix} } D= a1,1an,1a1,nan,n = an,1a1,1an,na1,n

    • 将一行的k倍加到另一行上,行列式不变。

    D = ∣ a 1 , 1 ⋯ a 1 , n ⋮ ⋱ ⋮ a n , 1 ⋯ a n , n ∣ = ∣ a 1 , 1 + k a n , 1 ⋯ a 1 , 1 + k a n , n ⋮ ⋱ ⋮ a n , 1 ⋯ a n , n ∣ \large{D= \begin{vmatrix} a_{1,1}&\cdots & a_{1,n} \\ \vdots & \ddots &\vdots \\ a_{n,1}&\cdots &a_{n,n} \end{vmatrix} = \begin{vmatrix} a_{1,1}+ka_{n,1}&\cdots &a_{1,1}+ka_{n,n} \\ \vdots & \ddots &\vdots \\ a_{n,1}&\cdots &a_{n,n} \end{vmatrix} } D= a1,1an,1a1,nan,n = a1,1+kan,1an,1a1,1+kan,nan,n

    • 转置,行列式不变, ∣ A ∣ = ∣ A T ∣ |A|=|A^T| A=AT

    • 当矩阵是上三角矩阵或者是下三角矩阵时,行列式的值等于对角线的乘积

  • 算法

    • 一个常见的求解矩阵行列式的算法是对矩阵做行变换,将矩阵转化成为上三角矩阵,再得出行列式的值。
解线性方程组
  • 基本概念

    • 解线性方程组即求解方程组
      { a 1 , 1 x 1 + a 1 , 2 x 2 + ⋯ + a 1 , n x n = b 1 ⋮ a m , 1 x 1 + a m , 2 x 2 + ⋯ + a m , n x n = b m \Large{\left\{\begin{matrix} a_{1,1}x_1+a_{1,2}x_2+\cdots+a_{1,n}x_n=b_1\\ \vdots \\ a_{m,1}x_1+a_{m,2}x_2+\cdots+a_{m,n}x_n=b_m \end{matrix}\right.} a1,1x1+a1,2x2++a1,nxn=b1am,1x1+am,2x2++am,nxn=bm

    • 可以表示为 A x = b \mathbf{Ax}=\mathbf{b} Ax=b,其中 A \mathbf{A} A m × n m\times n m×n 的矩阵, x \mathbf{x} x n n n 维列向量, b \mathbf{b} b m m m​ 维列向量,即
      ( a 1 , 1 … a 1 , n ⋮ ⋱ ⋮ a m , 1 … a m , n ) ( x 1 ⋮ x n ) = ( b 1 ⋮ b m ) \Large{\begin{pmatrix} a_{1,1}&\dots & a_{1,n}\\ \vdots &\ddots &\vdots \\ a_{m,1} &\dots & a_{m,n} \end{pmatrix} \begin{pmatrix} x_{1}\\ \vdots\\ x_{n} \end{pmatrix}= \begin{pmatrix} b_{1}\\ \vdots\\ b_{m} \end{pmatrix}} a1,1am,1a1,nam,n x1xn = b1bm

  • 算法

    • 高斯消元

      • 矩阵的初等变换:

        • 行初等变换:

          • 互换矩阵的两行。
          • 用非零的常数乘矩阵的某一行。
          • 某行的k倍加到另一行。
        • 列初等变换:

          • 互换矩阵的两列。
          • 用非零的常数乘矩阵的某一列。
          • 某行的k倍加到另一列。
      • 用增广矩阵进行高斯消元
        ( a 1 , 1 … a 1 , n b 1 ⋮ ⋱ ⋮ ⋮ a m , 1 … a m , n b m ) \Large{\begin{pmatrix} a_{1,1}&\dots & a_{1,n}&b_1\\ \vdots &\ddots &\vdots &\vdots\\ a_{m,1} &\dots & a_{m,n}&b_m \end{pmatrix}} a1,1am,1a1,nam,nb1bm

        • 只需要利用行初等变换,将矩阵消成上三角矩阵,即可简单地计算出线性方程的解。

        如 : ( 1 1 1 1 1 1 2 2 1 2 3 6 ) = ( 1 1 1 1 0 0 1 1 1 2 3 6 ) = ( 1 1 1 1 0 0 1 1 0 1 2 5 ) ( 1 1 1 1 0 1 2 5 0 0 1 1 ) → X = ( − 3 3 1 ) 如:\begin{pmatrix} 1& 1 & 1&1\\ 1& 1&2 &2\\ 1 &2 &3&6 \end{pmatrix}= \begin{pmatrix} 1& 1 & 1&1\\ 0& 0&1 &1\\ 1 &2 &3&6 \end{pmatrix}= \begin{pmatrix} 1& 1 & 1&1\\ 0& 0&1 &1\\ 0 &1 &2&5 \end{pmatrix} \begin{pmatrix} 1& 1 & 1&1\\ 0 &1 &2&5\\ 0& 0&1 &1 \end{pmatrix} \to \mathbf{X}= \begin{pmatrix} -3\\ 3\\ 1 \end{pmatrix} : 111112123126 = 101102113116 = 100101112115 100110121151 X= 331

    • 克莱姆法则

      • A \mathbf{A} A n × n n\times n n×n​​ 的矩阵时,可使用克莱姆法则求解,方程的解为:
        x i = D i D \Large{x_i=\frac{D_i}{D}} xi=DDi

      • 其中 D D D A \mathbf{A} A 的行列式 D = ∣ A ∣ D=| \mathbf{A} | D=A D i D_i Di 是将 A \mathbf{A} A 中第 i i i 列替换为 b \mathbf{b} b 后得到的矩阵的行列式。

  • 用途

    • 求解可逆矩阵的逆矩阵
      • 对于一个 n × n n\times n n×n 的非奇异矩阵,在矩阵右侧补上一个 n × n n\times n n×n 的单位矩阵。
      • 对于这个 n × ( 2 n ) n\times (2n) n×(2n) 的矩阵通过高斯消元,使得这个矩阵左侧变为一个 n × n n\times n n×n 的单位矩阵。
      • 右侧那个 n × n n\times n n×n​ 的矩阵即为原矩阵的逆矩阵。
    • 同模方程组也可使用高斯消元,在除法时用乘逆元代替。
      • 由于只有在模为素数情况下,非零数的逆元才唯一,所以,素数模才能保证有唯一解。
    • 求解行列式的值。
      • 通过高斯消元,将矩阵消成上三角。行列式的值即为对角线上所有数的乘积。
  • 扩展

    • 使用绝对值较大的主元进行消元,能达到比较好的效果
    • 可以使用辗转相除代替直接除法,这样可以保证系数为整数,保证精度。

多项式

  • 基本概念

    • 多项式定义

      • 给定一个数域 R R R,变量 x x x​,一元多项式的形式( a i ∈ R a_i \in R aiR a n ≠ 0 a_n \ne 0 an=0

      f ( x ) = ∑ i = 0 n a i x i \Large{f(x)=\sum_{i=0}^{n}a_i x^i} f(x)=i=0naixi

    • 多项式性质

      • 多项式的项数等于 a i a_i ai 中不为 0 0 0 的个数。
      • 多项式的次数等于 n n n​。
      • 多项式中次数最高的项成为首项
        • 首项的系数等于一,即 a n = 1 a_n =1 an=1​ 的多项式称做首一多项式。
    • 多项式运算

      • 多项式加(减)法:对应次数系数相加(减)。
        f ( x ) ± g ( x ) = ∑ i = 0 n a i x i ± ∑ i = 0 n b i x i = ∑ i = 0 n ( a i ± b i ) x i \Large{f(x)\pm g(x) =\sum_{i=0}^{n}a_i x^i\pm\sum_{i=0}^{n}b_i x^i=\sum_{i=0}^{n}(a_i\pm b_i)x^i} f(x)±g(x)=i=0naixi±i=0nbixi=i=0n(ai±bi)xi

      • 多项式乘法:两个多项式的每一项都相乘
        f ( x ) ⋅ g ( x ) = ∑ i = 0 n a i x i ⋅ ∑ i = 0 n b i x i = ∑ i = 0 n ∑ j = 0 n ( a i b j ) x i + j \Large{f(x)· g(x) =\sum_{i=0}^{n}a_i x^i·\sum_{i=0}^{n}b_i x^i=\sum_{i=0}^{n}\sum_{j=0}^{n}(a_i b_j)x^{i+j}} f(x)g(x)=i=0naixii=0nbixi=i=0nj=0n(aibj)xi+j

      • 多项式除法与整数除法类似

        • 多项式 g ( x ) g(x) g(x) 整除 f ( x ) f(x) f(x) ,当存在多项式 h ( x ) h(x) h(x), f ( x ) = g ( x ) h ( x ) f(x)=g(x)h(x) f(x)=g(x)h(x), g ( x ) g(x) g(x) 称做 f ( x ) f(x) f(x) 的因式。同整数的因数分解类似,多项式也可以进行因式分解。
        • 如果多项式 d ( x ) d(x) d(x) f ( x ) f(x) f(x) 的因式也是 g ( x ) g(x) g(x) 的因式,那么称 d ( x ) d(x) d(x) f ( x ) f(x) f(x) g ( x ) g(x) g(x) 的公因式。
        • 多项式 d ( x ) d(x) d(x) 称为 f ( x ) f(x) f(x) g ( x ) g(x) g(x) 的最大公因式如果它满足, d ( x ) d(x) d(x) f ( x ) f(x) f(x) g ( x ) g(x) g(x) 的公因式,且 f ( x ) f(x) f(x) g ( x ) g(x) g(x) 的所有公因式都是 d ( x ) d(x) d(x) 的因式,记作 g c d ( f ( x ) , g ( x ) ) gcd(f(x),g(x)) gcd(f(x),g(x))
  • 性质

    • ( 1 + x ) n = ∑ i = 0 n C n i x i (1+x)^n=\sum_{i=0}^n C_n^ix^i (1+x)n=i=0nCnixi,其中 C n i C_n^i Cni 为组合数
    • n n n 个点可以唯一确定一个 n n n 次多项式。
    • 一个 n n n 次多项式有 n n n 个复数根。
    • 代码实现

      //多项式中的项数定义
      class Term implements Comparable<Term>
      {
          int degree;
          double coefficient;
          Term(double item_co,int item_de)
          {
              this.degree=item_de;
              this.coefficient=item_co;
          }
          Term()
          {
              this.degree=0;
              this.coefficient=0;
          }
          @Override  
          public int compareTo(Term other) 
          {  
              // 按照degree的升序排序   
              return other.degree - this.degree;  
          } 
      }
      
      //多项式定义
      public class Polynomial
      {
          //通过优先队列保证次数的有序
          PriorityQueue<Term> polynomial;
      
          public Polynomial() 
          {  
              polynomial = new PriorityQueue<>();  
          } 
          
          public Polynomial(Polynomial a) 
          {  
              polynomial = new PriorityQueue<>();
              for(Term term: a.polynomial)
              {
                  polynomial.add(term);
              }
          }
      	//通过数组初始化
          public Polynomial(double[] coefficients, int[] degrees) 
          {  
              if (coefficients.length != degrees.length) 
              {  
                  throw new IllegalArgumentException("Error Arguments");  
              }  
        
              polynomial = new PriorityQueue<>(); 
              for (int i = 0; i < coefficients.length; i++) 
              {  
                  polynomial.add(new Term(coefficients[i], degrees[i]));   
              }  
          } 
          public int getDegree()
          {
              if(!polynomial.isEmpty())
                  return polynomial.peek().getDegree();
              else
                  return -1;
          }
      }
      
      public class polyCalculation 
      {
          Polynomial add(Polynomial p, Polynomial q)
          {
              Polynomial result = new Polynomial();   
              Polynomial a= new Polynomial(p);
              Polynomial b= new Polynomial(q);
              Term curA=null,curB=null;
              while (!a.polynomial.isEmpty() || !b.polynomial.isEmpty()) 
              {  
                  if(a.getDegree()==b.getDegree())
                  {
                      curA=a.polynomial.poll();
                      curB=b.polynomial.poll();
                      double res_coe=curA.getcoefficient()+curB.getcoefficient();
                      result.polynomial.add(new Term(res_coe,curA.getDegree()));
                  }
                  else if(a.getDegree()>b.getDegree())
                  {
                      curA=a.polynomial.poll();
                      result.polynomial.add(curA);
                  }
                  else
                  {
                      curB=b.polynomial.poll();
                      result.polynomial.add(curB);
                  }
              }
              return result;
          }
      
          Polynomial sub(Polynomial p, Polynomial q)
          {
              Polynomial result = new Polynomial();  
              Polynomial a= new Polynomial(p);
              Polynomial b= new Polynomial(q);  
              Term currentA=null,currentB=null;
              while (!a.polynomial.isEmpty() || !b.polynomial.isEmpty()) 
              {  
                  if(a.getDegree()==b.getDegree())
                  {
                      currentA=a.polynomial.poll();
                      currentB=b.polynomial.poll();
                      double res_coe=currentA.getcoefficient()-currentB.getcoefficient();
                      result.polynomial.add(new Term(res_coe,currentA.getDegree()));
                  }
                  else if(a.getDegree()>b.getDegree())
                  {
                      currentA=a.polynomial.poll();
                      result.polynomial.add(currentA);
                  }
                  else
                  {
                      currentB=b.polynomial.poll();
                      double res_coe=-currentB.getcoefficient();
                      result.polynomial.add(new Term(res_coe,currentB.getDegree()));
                  }
              }
              return result;
          }
      
          //模拟乘法
          Polynomial product_term(Polynomial p, Term q)
          {
              Polynomial result = new Polynomial();  
              Polynomial a= new Polynomial(p);
              while(!a.polynomial.isEmpty())
              {
                  Term tmp=a.polynomial.poll();
                  double tmp_coe=tmp.getcoefficient()*q.getcoefficient();
                  int tmp_degree=tmp.getDegree()+q.getDegree();
                  result.polynomial.add(new Term(tmp_coe,tmp_degree));
              }
              return result;
          }
      
          Polynomial product(Polynomial p, Polynomial q)
          {
              Polynomial result = new Polynomial();  
              Polynomial a= new Polynomial(p);
              Polynomial b= new Polynomial(q);
              while(!a.polynomial.isEmpty())
              {
                  Term term=a.polynomial.poll();
                  Polynomial tmp = product_term(b,term);
                  result=add(result,tmp);
              }
              return result;
          }
      
          Polynomial quick_pow(Polynomial p, int time)
          {
              Polynomial result = new Polynomial();  
              Polynomial a= new Polynomial(p);
              if(time==0)
              {
                  result.polynomial.add(new Term(1,0));
                  return result;
              }
              else if(time==1)
              {
                  return a;
              }
              Polynomial temp = quick_pow(p, time / 2);
              if (time % 2 == 1) 
                  return product(product(temp, temp),a); 
              else
                  return product(temp, temp); 
          }
          
          Polynomial[] divide(Polynomial p, Polynomial q)
          {
              //返回商和余数
              Polynomial quotient = new Polynomial();
              Polynomial remainder = new Polynomial();
      
              Polynomial a= new Polynomial(p);
              Polynomial b= new Polynomial(q);
              
              if(q.polynomial.isEmpty()) //如果除数为0
                  return null;
              else if(q.getDegree()>p.getDegree()) //如果除数次数更大
                  return new Polynomial[]{new Polynomial(),b};
              
              //做一次模拟多项式除法
              Term cur_A=null,cur_B=null,tmp=null;
              Polynomial storage, tail;
              cur_A=a.polynomial.poll();
              cur_B=b.polynomial.peek();
              double cal_coe=cur_A.coefficient / cur_B.coefficient;
              int cal_degree=cur_A.degree - cur_B.degree;
              Term cal_term = new Term(cal_coe, cal_degree);
              //得到商的第一个项
              quotient.polynomial.add(cal_term);
              
              //计算剩下的项
              Polynomial cal_polynomial=product_term(q,cal_term);
              tmp=cal_polynomial.polynomial.poll();
              storage=sub(a,cal_polynomial);
      
              //递归进行计算
              Polynomial[] tmp_result=divide(storage,b);
              tail = tmp_result[0];
              while(tail!=null&&!tail.polynomial.isEmpty())
              {
                  tmp=tail.polynomial.poll();
                  quotient.polynomial.add(tmp);
              }
              remainder=storage;
              //返回结果
              return new Polynomial[]{quotient, remainder};
          }
      }
      
  • 算法

    • 用牛顿迭代法求解方程的根。

复数

  • 基本概念

    • 复数是由实部和虚部组成的数,通常有两种表示方式

      • z = a + b i z=a+bi z=a+bi a a a b b b 都是实数, i i i 是虚单位根,满足 i 2 = − 1 i^2=-1 i2=1 ∣ z ∣ = d e f x 2 + y 2 |z|\overset{{\small def} }{=}\sqrt{x2+y2} z=defx2+y2 表示复数的模长
      • z = R e i φ = R ( c o s ( φ ) + i s i n ( φ ) ) z=Re^{iφ}=R(\mathrm{cos}(φ)+i\mathrm{sin}(φ)) z=Reiφ=R(cos(φ)+isin(φ)),其中 R = ∣ z ∣ R=|z| R=z e i φ = c o s ( φ ) + i s i n ( φ ) e^{iφ}=\mathrm{cos}(φ)+i\mathrm{sin}(φ) eiφ=cos(φ)+isin(φ)
    • 两复数相等当且仅当它们的实部与虚部分别相等。

    • 复数四则运算

      • 加法: ( a + b i ) + ( c + d i ) = ( a + c ) + ( b + d ) i (a+bi)+(c+di)=(a+c)+(b+d)i (a+bi)+(c+di)=(a+c)+(b+d)i

      • 减法: ( a + b i ) − ( c + d i ) = ( a − c ) + ( b − d ) i (a+bi)-(c+di)=(a-c)+(b-d)i (a+bi)(c+di)=(ac)+(bd)i

      • 乘法

        • ( a + b i ) ⋅ ( c + d i ) = ( a c − b d ) + ( a d + b c ) i (a+bi)·(c+di)=(ac-bd)+(ad+bc)i (a+bi)(c+di)=(acbd)+(ad+bc)i
        • R 1 ( c o s ( φ 1 ) + i s i n ( φ 1 ) ) ⋅ R 2 ( c o s ( φ 2 ) + i s i n ( φ 2 ) ) = R 1 × R 2 ( c o s ( φ 1 + φ 2 ) + i s i n ( φ 1 + φ 2 ) ) R_1(\mathrm{cos}(φ1)+i\mathrm{sin}(φ1)) ·R_2(\mathrm{cos}(φ2)+i\mathrm{sin}(φ2))=R_1\times R_2(\mathrm{cos}(φ1+φ2)+i\mathrm{sin}(φ1+φ2)) R1(cos(φ1)+isin(φ1))R2(cos(φ2)+isin(φ2))=R1×R2(cos(φ1+φ2)+isin(φ1+φ2))
      • 除法
        ( a + b i ) ( c + d i ) = ( a + b i ) ( c − d i ) ( c + d i ) ( c − d i ) = ( a c + b d ) + ( b c − a d ) i c 2 + d 2 = ( a c + b d c 2 + d 2 ) + ( b c − a d c 2 + d 2 ) i \frac{(a+bi)}{(c+di)}=\frac{(a+bi)(c-di)}{(c+di)(c-di)}=\frac{(ac+bd)+(bc-ad)i}{c^2+d^2}=\Big(\frac{ac+bd}{c^2+d^2}\Big)+\Big(\frac{bc-ad}{c^2+d^2}\Big)i (c+di)(a+bi)=(c+di)(cdi)(a+bi)(cdi)=c2+d2(ac+bd)+(bcad)i=(c2+d2ac+bd)+(c2+d2bcad)i

    • 复数旋转

      • 一个向量 ( x , y ) (x,y) (x,y) 旋转 φ φ φ,可以视为两个复数, x + y i x+yi x+yi 乘以 c o s ( φ ) + s i n ( φ ) i cos(φ)+sin(φ)i cos(φ)+sin(φ)i​,等于
        x c o s ( φ ) − y s i n ( φ ) + ( y c o s ( φ ) + x s i n ( φ ) ) i \Large{xcos(φ)-ysin(φ)+(ycos(φ)+xsin(φ))i} xcos(φ)ysin(φ)+(ycos(φ)+xsin(φ))i

    • 在数学中,群是一种代数结构,由一个集合 S S S 与一个二元运算 ⋅ \cdot 组成(由集合和定义在这个集合上的运算组成)
    • 要成为群,还需要满足一些条件
      • 封闭性,即 ∀ a , b ∈ S , a ⋅ b ∈ S \forall a, b \in S, a \cdot b \in S a,bS,abS
      • 结合律,即 ∀ a , b , c ∈ S , ( a ⋅ b ) ⋅ c = a ⋅ ( b ⋅ c ) \forall a, b, c \in S,(a \cdot b) \cdot c=a \cdot(b \cdot c) a,b,cS,(ab)c=a(bc)
      • 单位元,即有一个元素 e e e ∀ a ∈ S , e ⋅ a = a ⋅ e = a \forall a \in S, e \cdot a=a \cdot e=a aS,ea=ae=a )(在群 G \mathrm{G} G 中常用 1 G 1_{\mathrm{G}} 1G 1 1 1​​ 表示单位元)。
      • 逆元,即 ∀ a ∈ S \forall a \in S aS ∃ b ∈ S , a ⋅ b = b ⋅ a = e \exists b \in S, a \cdot b=b \cdot a=e bS,ab=ba=e,记 b = a − 1 b=a^{-1} b=a1
      • 可以定义元素 a a a 的幂为: a 0 = e a^{0}=e a0=e a n = a n − 1 ⋅ a a^{n}=a^{n-1} \cdot a an=an1a a − n = ( a n ) − 1 a^{-n}=\left(a^{n}\right)^{-1} an=(an)1​。
    • 特殊的群
      • 整数加法群 ( Z , + , 0 ) (\mathbb{Z},+, 0) (Z,+,0), 是由整数 $\mathbb{Z} $ 和整数加法运算 + + + 组成。
        • 其单位元 0 0 0 ;
        • 封闭性: ∀ a , b ∈ Z , a + b ∈ Z \forall a, b \in \mathbb{Z}, a+b \in \mathbb{Z} a,bZ,a+bZ ;
        • 结合律: ∀ a , b , c ∈ Z , ( a + b ) + c = a + ( b + c ) \forall a, b, c \in \mathbb{Z},(a+b)+c=a+(b+c) a,b,cZ,(a+b)+c=a+(b+c);
        • 逆元: ∀ a ∈ Z , a − 1 = − a \forall a \in \mathbb{Z}, a^{-1}=-a aZ,a1=a
      • ( R ∗ , × , 1 ) \left(\mathbb{R}^{*}, \times, 1\right) (R,×,1) , 它是由非零实数 R ∗ = R \ { 0 } \mathbb{R}^{*}=\mathbb{R} \backslash\{0\} R=R\{0} 和实数乘法 $\times $ 组成。
        • 其单位元 1 ;
        • 封闭性: ∀ a , b ∈ R ∗ , a × b ∈ R ∗ \forall a, b \in \mathbb{R}^{*}, a \times b \in \mathbb{R}^{*} a,bR,a×bR ;
        • 结合律 : ∀ a , b , c ∈ R ∗ , ( a × b ) × c = a × ( b × c ) \forall a, b, c \in \mathbb{R}^{*},(a \times b) \times c=a \times(b \times c) a,b,cR,(a×b)×c=a×(b×c) ;
        • 逆元 : ∀ a ∈ R ∗ , a − 1 = 1 / a \forall a \in \mathbb{R}^{*}, a^{-1}=1/a aR,a1=1/a
  • 子群

    • G G G 是群, ϕ ≠ H ⊆ G \phi≠H\subseteq G ϕ=HG,若 H H H 具封闭性、单位元、逆元,称 H H H G G G 的一个子群,记号 H ≤ G H≤G HG
    • H H H满足以下条件,则 H H H G G G 的一个子群
      • 1 G = 1 H ∈ H 1_G=1_H∈H 1G=1HH;
      • ∀ a , b ∈ H , a ⋅ b ∈ H \forall a,b∈H,a·b∈H a,bH,abH;
      • ∀ a ∈ H , a − 1 ∈ H \forall a∈H,a^{-1}∈H aH,a1H
    • 作为群公理之一的结合律,因为 H H H 继承了 G G G 的运算,所以自然成立,因此,子群也是群。
  • 元素的阶

    • 在群 G G G 中,定义元素 g g g 的阶 o ( g ) o(g) o(g),为使 g n = 1 G g^n=1_G gn=1G 成立的最小自然数 n n n
      • 如果此自然数不存在,则记作 o ( g ) = ∞ o(g)=\infty o(g)=
  • 循环群

    • g g g 是群 G G G 中一个取定的元素,若群 G G G 的任意一个元素 a a a 可以写成 a = g n , n ∈ Z a=g^n,n∈Z a=gn,nZ 的形式,则称 G G G 循环群称 g g g 为群 G G G 的一个生成元,可写成 G = < g > G=<g> G=<g>
  • 交换群

    • 具有交换性的群称为交换群。

      • 交换性: ∀ a , b ∈ G , a b = b a \forall a,b∈G,ab=ba a,bG,ab=ba
    • 一般线性群 G L ( n ) GL(n) GL(n) 由所有 n × n n\times n n×n 的可逆矩阵和矩阵乘法组成,它不是交换群,

  • 置换群

    • A A A 是一个非空集合, A A A^A AA A A A A A A 上的所有的置换的集合,在 A A A^A AA 上定义二元运算为映射的复合。

    • S S S A A A 上所有可逆映射的集合,则 S S S​ 关于映射的复合构成群。

    • A A A 是有限集合时,可设 A = { 1 , 2 , … , n } A=\{1,2,…,n\} A={1,2,,n},则 A A A 上的可逆变换可表示
      f = ( 1 2 … n − 1 n i 1 i 2 … i n − 1 i n ) \Large{f=\begin{pmatrix} 1& 2& \dots &n-1 &n \\ i_1& i_2& \dots &i_{n-1} &i_n \end{pmatrix}} f= 1i12i2n1in1nin
      其中 i 1 i 2 … i n i_1i_2…i_n i1i2in 为一个 n − n- n排列, i j i_j ij 表示将 j j j 位置上的元素换到 j j j 位置。这样一个变换称作 n n n 次置换,形成的群称作 n n n 次置换群。所有 n n n 次置换形成的群记做 S n S_n Sn

    • ( i 1 i 2 … i n ) (i_1i_2…i_n) (i1i2in) 满足 f ( i 1 ) = i 2 , f ( i 2 ) = i 3 , … , f ( i k − 1 ) = i k , f ( i k ) = i 1 f(i_1)=i_2,f(i_2)=i_3,…,f(i_{k-1})=i_k,f(i_k)=i_1 f(i1)=i2,f(i2)=i3,,f(ik1)=ik,f(ik)=i1,称 ( i 1 i 2 … i n ) (i_1i_2…i_n) (i1i2in) 为一个循环节。显然,一个置换可以拆成若干个循环节,所以可以将置换用循环节表示。

  • 群作用

    • G G G 为群, S S S 为集合,考虑一个映射 ∘ \circ
      G × S → S ( g , x ) ↦ g ∘ x G \times S \to S\\(g,x)\mapsto g\circ x G×SS(g,x)gx

    • 若此映射满足

      • 1 G ∘ x = x , ∀ x ∈ S 1_G \circ x = x,\forall x \in S 1Gx=x,xS
      • ( g h ) ∘ = g ∘ ( h ∘ x ) , ∀ x ∈ S , ∀ g , h ∈ G (gh)\circ =g\circ (h \circ x),\forall x\in S,\forall g,h\in G (gh)=g(hx),xS,g,hG
      • 称映射 ∘ \circ G G G S S S​ 上的一个群作用。
    • 例子: S 3 S_3 S3 T = { a , b , c } T=\{a,b,c\} T={a,b,c} 上有群作用 ∘ \circ S 3 × T → T , ( f , t ) ↦ f ∘ t = f ( t ) S_3 \times T \to T,(f,t) \mapsto f\circ t=f(t) S3×TT,(f,t)ft=f(t) f = ( 1 2 3 2 3 1 ) f=\begin{pmatrix}1& 2& 3 \\ 2& 3&1\end{pmatrix} f=(122331),可得 f ∘ a = f ( a ) = b , f ∘ b = f ( b ) = c , f ∘ c = f ( c ) = a f \circ a =f(a)=b,f \circ b =f(b)=c,f \circ c =f(c)=a fa=f(a)=b,fb=f(b)=c,fc=f(c)=a

  • 轨道

    • ∘ \circ G G G S S S 上的一个群作用,对于一个元素 x ∈ S x∈S xS,集合 O x = { g ∘ x ∣ g ∈ G } O_x=\{g \circ x|g∈G\} Ox={gxgG} 称为 x x x 所在的轨道,也记为 G ∘ x G \circ x Gx

    • 可以从轨道诱导出集合上的一个等价关系。若已知集合 S S S 和作用在 S S S 上的群 G G G ,定义集合 S S S 上的二元关系 ~ , ∀ x , y ∈ S \forall x,y∈S x,yS x x x~ y y y如果 O x = O y O_x=O_y Ox=Oy

  • 稳定子

    • 设 $\circ $ 是 G G G S S S 上的一个群作用,对于一个元素 x ∈ S x∈S xS,集合 S t a b x = { g ∈ G ∣ g ∘ x = x } \mathrm{Stab}_x=\{g∈G|g\circ x=x\} Stabx={gGgx=x} 称为 x x x G G G 中的稳定子。不难发现, S t a b x \mathrm{Stab}_x Stabx G G G 的一个子群。

    • 一个元素 x x x 的稳定子 S t a b x \mathrm{Stab}_x Stabx 与轨道 O x O_x Ox 满足
      c a r d ( O x ) = c a r d ( G ) c a r d ( S t a b x ) \Large{\mathrm{card}(O_x)=\frac{\mathrm{card}(G)}{\mathrm{card}(\mathrm{Stab}_x)}} card(Ox)=card(Stabx)card(G)

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值