精华内容
下载资源
问答
  • 该程序用C++实现对任意阶的是对称矩阵求特征和特征向量,本程序给的例子是读取matrix.txt这个120阶矩阵。
  • 本文用qr分解办法求对称矩阵特征和特征向量,适合于大型矩阵求特征,而且用的是迭代法,不同于matlab原有程序的qr分解
  • 使用Jacobi方法对称矩阵特征和特征向量,vs2008下的
  • 对称矩阵 所有特征 任意阶数矩阵
  • [ evals ] = eig_LDLT( A,range,epsilon ) Compute the eigenvalue of symmetric real matrix A in RANGE.
  • 基于java语言的对称矩阵特征求解方法,附带讲解PPT和源代码。
  • 本资源是C++代码,以txt文件存储,能实现取实对称矩阵的特征与特征向量
  • 雅克比法求对称矩阵的特征(MATLAB程序设计与应用)课设,里面有2份不同的课设,都已近调试过了。要在MATLAB7.0上运行
  • 矩阵的特征与特征向量的计算的matlab实现,幂法、反幂法和位移反幂法、雅可比(Jacobi)方法、豪斯霍尔德(Householder)方法、实对称矩阵的三对角化、QR方法、根位移QR方法计算实对称矩阵 的特征、广义特征问题...
  • M = input('请输入一个矩阵用来判断:') if M==M' ...%矩阵baiA的全部特征,构成向量E if all(d) > 0 disp('正定对称矩阵:是') else; disp('正定对称矩阵:不是') end #运行结果 ...
    M = input('请输入一个矩阵用来判断:')
    
    if M==M'
         disp('对称矩阵:是')
     else;
        disp('对称矩阵:不是')
    end
    
    d = eig(M);%求矩阵baiA的全部特征值,构成向量E
    if all(d) > 0
        disp('正定对称矩阵:是')
         else;
        disp('正定对称矩阵:不是')
    end
    

    #运行结果
    在这里插入图片描述

    展开全文
  • 特征和特征向量是指对于矩阵A有,Av=lv,v为特征向量,l为特征。就是求解一个高次方程:det(A-lI)=0代码如下:unit Matrix;interfaceuses Math, Windows, SysUtils, Variants, Classes;...

    特征值和特征向量是指对于矩阵A有,Av=lv,v为特征向量,l为特征值。就是求解一个高次方程:det(A-lI)=0

    代码如下:

    unit Matrix;

    interface

    uses
      Math, Windows, SysUtils, Variants, Classes;

    Type

    TSingleExtendedArray =array of extended;

    TDoubleExtendedArray=array of array of extended;

    TDoubleLongintArray=array of array of longint;

    procedure CalculateEigenVV(var EigenLambda: TSingleExtendedArray; var EigenVector: TDoubleExtendedArray; C: TDoubleLongintArray; N: longint; eps: extended);

    implementation

    procedure CalculateEigenVV(var EigenLambda: TSingleExtendedArray; var EigenVector: TDoubleExtendedArray; C: TDoubleLongintArray; N: longint; eps: extended);
    var
      i, j, fi, fj, p, q, TL, k: longint;
      Change: boolean;
      x, y, cn, sn, Omega, fm, Acurrency: Extended;
      Ja: TDoubleExtendedArray;
    begin
      setlength(Ja, N, N);
      setlength(EigenVector, N, N);
      setlength(EigenLambda, N);

      for i := 0 to N - 1 do begin
        EigenVector[i, i] := 1.0; EigenLambda[i] := 0;
        for j := 0 to N - 1 do
          if i <> j then EigenVector[i, j] := 0;
      end;

      Acurrency := 0;
      for i := 0 to N - 1 do
        for j := 0 to N - 1 do begin
          Ja[i, j] := C[i, j];
          Acurrency := Acurrency + Ja[i, j] * Ja[i, j];
        end;
      Acurrency := sqrt(2 * Acurrency);
      Change := true;
      repeat
        if not Change then Acurrency := Acurrency * 0.5;
        Change := false;
        for p := 0 to N - 1 do begin
          for q := p + 1 to N - 1 do
            if Abs(Ja[p, q]) > Acurrency then begin
              x := -Ja[p, q]; y := (Ja[q, q] - Ja[p, p]) / 2;
              if (x <> 0) or (y <> 0) then Omega := x / sqrt(x * x + y * y) else Omega := 1;
              if (y < 0.0) then Omega := -Omega;
              sn := 1.0 + sqrt(1.0 - Omega * Omega);
              sn := Omega / sqrt(2.0 * sn);
              cn := sqrt(1.0 - sn * sn);

              fm := Ja[p, p];
              Ja[p, p] := fm * cn * cn + Ja[q, q] * sn * sn + Ja[p, q] * Omega;
              Ja[q, q] := fm * sn * sn + Ja[q, q] * cn * cn - Ja[p, q] * Omega;
              Ja[p, q] := 0; Ja[q, p] := 0;

              for i := 0 to N - 1 do
                if (i <> p) and (i <> q) then begin
                  fm := Ja[p, i];
                  Ja[p, i] := fm * cn + Ja[q, i] * sn;
                  Ja[q, i] := -fm * sn + Ja[q, i] * cn;
                end;

              for i := 0 to N - 1 do
                if (i <> p) and (i <> q) then begin
                  fm := Ja[i, p];
                  Ja[i, p] := fm * cn + Ja[i, q] * sn;
                  Ja[i, q] := -fm * sn + Ja[i, q] * cn;
                end;

              for i := 0 to N - 1 do begin
                fm := EigenVector[p, i];
                EigenVector[p, i] := fm * cn + EigenVector[q, i] * sn;
                EigenVector[q, i] := -fm * sn + EigenVector[q, i] * cn;
              end;

              for i := 0 to N - 1 do
                EigenLambda[i] := Ja[i, i];

              Change := true; break;
            end;
          if Change then break;
        end;
      until Acurrency <= eps;

      setlength(Ja, 0);
    end;

    end.

    展开全文
  • 第三十篇 雅可比主对角线化求对称矩阵的特征 对于标准特征方程 由特征问题编程基础可知,对于任何非0解矩阵[P],标准方程可以转化为具有相同特征的方程 其中 这种转换技术的关键核心在于[A *]的特征比...

    第三十篇 雅可比主对角线化求对称矩阵的特征值

    对于标准特征值方程
    在这里插入图片描述
    特征值问题编程基础可知,对于任何非0解矩阵[P],标准方程可以转化为具有相同特征值的方程
    在这里插入图片描述
    其中
    在这里插入图片描述
    这种转换技术的关键核心在于[A *]的特征值比原始[A]的特征值更容易找到。
    然而,如果[A]是对称的,则变换后的矩阵不太可能保持对称。很容易证明下面变换
    在这里插入图片描述
    将保持[A∗]的对称性。为了使上面方程中给出的特征值[A∗]与[A]的特征值相同,必须把这两个性质综合起来
    在这里插入图片描述
    这种类型的矩阵称为“正交矩阵”,具有这种性质的矩阵称为“旋转矩阵”。
    在这里插入图片描述
    将此变换应用于下面的矩阵,我们有
    在这里插入图片描述
    在这里插入图片描述
    其中很明显[A∗]对于任何α值都是对称的。这种情况,明显可以选择一个α值使得[A∗]成为一个对角矩阵,因为如果这样,对角线就是特征值。下面的情况,非对角线项将被消除
    在这里插入图片描述
    得出,tan α = 1和α = π/4,给出sin α = cos α = 1/√2。
    得到的变换矩阵是
    在这里插入图片描述
    即[A]的特征值分别为3和1。
    对于大于2 × 2的矩阵[A],变换矩阵[P]必须通过在其他主对角线上放1,在所有非对角线上放0来“填充”,被消去的行和列选择上面的矩阵。例如,如果[A]是4 × 4,则变换矩阵可以选择6种形式中的一种,这取决于要消去初始矩阵中的哪些非对角项,例如:
    在这里插入图片描述
    上面第一个矩阵经过[P]T [A][P]变换后将原矩阵[A]中的a12和a21项消去,而第二个矩阵将消去a24和a42项。1和0的作用是让[A]的其他行和列保持不变。这意味着在一次转换中变为零的非对角线项在随后的转换中会恢复为非零值(尽管通常是很“小”的值),因此正如期望的那样,该方法是迭代的。
    这种类型的迭代的最早形式称为“雅可比对角化”,它通过消除每一次迭代剩余的“最大的”非对角项连续进行迭代。
    对于任何对称矩阵[A],得到广义方程为
    在这里插入图片描述
    得到[A∗]形式的非对角线项为
    在这里插入图片描述
    求α使这一项等于零
    在这里插入图片描述
    因此
    在这里插入图片描述
    因此,为了建立一个雅可比对角化的简单程序,必须在[a]中搜索“最大的”非对角线项,并找到它所在的行和列。“旋转矩阵”α按照之前的方法构建。矩阵[P]可以使用一个numpy库的transpose转化,然后矩阵乘积形成方程的[A *]。重复这个过程,直到[A∗]的主对角线在可接受的公差内收敛到[A]的特征值为止。
    计算实例:
    使用雅可比对角化去估算下面对称矩阵的特征值
    在这里插入图片描述
    下面的结果保留到小数点后四位,但实际计算的精确度更高。
    第一次迭代
    最大的非主对角项为a23 = a32 = −9.0,因此根据之前方程
    在这里插入图片描述
    第一次转换矩阵将包含下面的项
    在这里插入图片描述
    因此
    在这里插入图片描述
    通过转化矩阵得到
    在这里插入图片描述
    详细的数值为
    在这里插入图片描述
    最后
    在这里插入图片描述
    第二次迭代
    最大的非主对角项为a12 = a21 = −7.7782,因此
    在这里插入图片描述
    第二次转化矩阵将包括下面的项
    在这里插入图片描述
    因此,
    在这里插入图片描述
    同上面一样,矩阵乘积将等于
    在这里插入图片描述
    可以看到,虽然位置(2,3)和(3,2)不再为零,但与初始矩阵中的值相比足够“小”。随着迭代的进行,旋转角度αk→0,变换矩阵[Pk]→[I]和变换矩阵[Ak]趋向于一个对角矩阵,特征值在对角线上。
    对于这个例子,经过六次迭代,容差为1.0e-5
    得到
    在这里插入图片描述
    因此[A]的特征值λ = 0.4659, 20.9681,−0.9340。特征向量将通过将每个特征值代入求线性方程的解。
    程序如下
    分为一个主程序和两个子程序,分别为判断收敛的子程序checkit,和高斯消元求特征向量的子程序eliminate。详情可参照之前文章的线性方程求解部分
    主程序:

    #雅可比主对角线化求对称矩阵的特征值
    import numpy as np
    import B
    import math
    n=3;tol=1.0e-5;limit=100
    enew=np.zeros((n,1))
    eold=np.zeros((n,1))
    p=np.zeros((n,n))
    a1=np.zeros((n,n))
    a=np.array([[10,5,6],[5,20,4],[6,4,30]],dtype=np.float)
    a2=a
    pi=math.acos(-1)
    x=np.zeros((n,1))
    x=np.ones((3,1),dtype=np.float)
    print('雅可比主对角线化求对称矩阵的特征值')
    print('矩阵A')
    print(a[:])
    print('前几次迭代值')
    iters=0;eold[:]=0
    while(True):
        iters=iters+1
        big=0
        for i in range(1,n+1):
            for j in range(i+1,n+1):
                if abs(a[i-1,j-1]>big):
                    big=abs(a[i-1,j-1]);hold=a[i-1,j-1];nr=i;nc=j
        if abs(big)<1.0e-20:
            break
        den=a[nr-1,nr-1]-a[nc-1,nc-1]
        if abs(den)<1.0e-20:
            alpha=pi/4.0
            if hold<0:
                alpha=-alpha
        else:
            alpha=math.atan(2.0*hold/den)/2.0
        ct=math.cos(alpha);st=math.sin(alpha);p[:]=0
        for i in range(1,n+1):
            p[i-1,i-1]=1.0
        p[nr-1,nr-1]=ct;p[nc-1,nc-1]=ct;p[nr-1,nc-1]=-st;p[nc-1,nr-1]=st
        a=np.dot(np.dot(np.transpose(p),a),p)
        if iters<5:
            for i in range(1,n+1):
                for j in range(1,n+1):
                    print('{:13.4e}'.format(a[i-1,j-1]),end='')
                print(end='\n')
            print(end='\n')
        for i in range(1,n+1):
            enew[i-1,0]=a[i-1,i-1]
        if B.checkit(enew,eold,tol) or iters==limit:
            break
        eold[:,0]=enew[:,0]
    print('迭代到收敛次数',iters)
    print('最后的转化矩阵A')
    for i in range(1,n+1):
        for j in range(1,n+1):
            print('{:13.4e}'.format(a[i-1,j-1]),end='')
        print(end='\n')
    for i in range(1,n+1):
        a1[:]=a2[:]
        for j in range(1,n+1):
            a1[j-1,j-1]=a1[j-1,j-1]-a[i-1,i-1]
        x[:]=0;a1[i-1,i-1]=1.0e20;x[i-1]=1.0e20;x[:]=B.eliminate(a1,x)
        l2=np.linalg.norm(x)
        print('特征值','{:13.4e}'.format(a[i-1,i-1]))
        print('特征向量')
        for i in range(1,n+1):
            print('{:13.4e}'.format(x[i-1,0]/l2),end=' ')
        print()
        
        
    
    
    checkit
    
    def checkit(loads,oldlds,tol):
    #检查多个未知数的收敛
      neq=loads.shape[0]
      big=0.0
      converged=True
      for i in range(1,neq+1):
        if abs(loads[i-1,0])>big:
          big=abs(loads[i-1,0])
      for i in range(1,neq+1):
        if abs(loads[i-1,0]-oldlds[i-1,0])/big>tol:
          converged=False
      checkit=converged
      return  checkit
    
    eliminate
    
    def eliminate(a,b):
      n=a.shape[0]
    ##确定主对角线最大值
      for i in range(1,n):
        big=abs(a[i-1,i-1]);ihold=i
        for j in range(i+1,n+1):
          if abs(a[j-1,i-1])>big:
            big=abs(a[j-1,i-1]); ihold=j
        if ihold!=i:
          for j in range(i,n+1):
            hold=a[i-1,j-1]; a[i-1,j-1]=a[ihold-1,j-1]; a[ihold-1,j-1]=hold
          hold=b[i-1,0]; b[i-1,0]=b[ihold-1,0]; b[ihold-1,0]=hold
    ##消元阶段
        for j in range(i+1,n+1):
          fac=a[j-1,i-1]/a[i-1,i-1]
          for l in range(i,n+1):
            a[j-1,l-1]=a[j-1,l-1]-a[i-1,l-1]*fac
          b[j-1]=b[j-1]-b[i-1]*fac
    ##从后迭代
      for i in range(n,0,-1):
        hold=0.0
        for l in range(i+1,n+1):
          hold=hold+a[i-1,l-1]*b[l-1]
        b[i-1]=(b[i-1]-hold)/a[i-1,i-1]
      return b
    

    终端输出结果如下:
    在这里插入图片描述

    展开全文
  • 点击蓝字关注每天打卡呦DAY84题型讲解接下来我们开始最后一个板块,矩阵的特征和特征向量解题思路:第一步:根据实对称矩阵的性质出矩阵A。第二步:代计算即可。这个题目做题的题眼在于“实对称矩阵的对角化”...
    b806e04230c5340f2235f918717bc0a8.png

    点击蓝字关注每天打卡呦

    DAY84题型讲解接下来我们开始最后一个板块,矩阵的特征值和特征向量ae02d0bbbe97530ddb5334709bad9ee6.pngdb6533224255b2536cd00bb692148aa7.png

    解题思路:

    第一步:根据实对称矩阵的性质求出矩阵A。

    第二步:代值计算即可。

    这个题目做题的题眼在于“实对称矩阵的对角化

    首先,要弄清楚实对称矩阵的性质。

    实对称矩阵的主要性质

    1.实对称矩阵的特征值均为实数、特征向量可以取为实向量。

    2.实对称矩阵的相异特征值对应的特征向量是正交的。

    3.实对称矩阵可正交相似对角化。

    其次,这道题只提到了矩阵,怎么判断其是否为实对称矩阵呢?

    判断的方法正是上面提到的第一点性质。

    这个知识点在考试中,老师是默认大家知道的。

    最后,实对称矩阵一定要单位化和正交化吗?

    实对称矩阵本身并不一定非要单位化和正交化,它就是一个实对称矩阵,无需单位化或正交化,它也是实对称矩阵。

    DAY85数学作业

    345e93a215c1002ff0e77fbc7119199a.png

    展开全文
  • 对称矩阵的不同特征所对应的特征向量正交,而且实对称矩阵的特征全为实数。在考研中,我们一定要重点掌握会一个正交矩阵来相似对角化,这里的正交矩阵是矩阵的彼此正交且为单位向量的特征向量组成的,这里的...
  • 对称矩阵(3):正交变换前 言(1)今天我们来讨论利用正交矩阵将实对称矩阵相似对角化的问题...(3)由之前证明的结论可知, 实对称矩阵不同特征的特征向量正交。那么这里正交矩阵的关键就在于, k重特征的k个线性...
  • C或C++写的对称矩阵的特征和特征向量的源码: 在网上找到了很多求对称矩阵的,但是没有找到一个是对称矩阵的。 希望可以找到一个对称矩阵特征和特征向量的c或者是c++的源码,计算结果要求和...
  • 雅可比方法用于求解实对称矩阵的特征和特征向量,对于实对称矩阵AAA,必有正交矩阵UUU,使得UTAU=DU^{T}AU=DUTAU=D.DDD是一个对角阵,主对角线的元素是矩阵AAA的特征,正交矩阵UUU的每一列对应于属于矩阵DDD的主对角...
  • java版求矩阵特征

    热门讨论 2009-04-01 22:10:04
    雅克比迭代式法求实对称矩阵的特征特征向量
  • C或C++写的对称矩阵的特征和特征向量的源码: 在网上找到了很多求对称矩阵的,但是没有找到一个是对称矩阵的。 希望可以找到一个对称矩阵特征和特征向量的c或者是c++的源码,计算结果要求和...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 316
精华内容 126
关键字:

对称矩阵求值