精华内容
下载资源
问答
  • 数值分析课程设计幂法与反幂法求矩阵特征值
  • 数值分析中幂法、反幂法求矩阵特征值的C程序,有必须的说明
  • 用QR方法、幂法和反幂法求矩阵特征值 本文介绍求任意矩阵全部特征值的QR方法,求部分特征值和特征向量的幂法,反幂法。
  • 最详细的幂法、反幂法求解矩阵特征值c程序
  • 反幂法求矩阵特征值 以及特征向量

    热门讨论 2010-04-27 21:41:37
    反幂法求解矩阵运用于工程上的计算,方便快捷
  • 矩阵为五带状对称矩阵:主对角线为(1.64-0.024*i)*sin(0.2*i)-0.64*exp(0.1/i) 次对角线为b=0.16,三对角线...特征值x1,xs=min|xi| x1,x501,xs 最接近=x1+k的特征值,k=1,…,39 矩阵的条件数cond(A)2和行列式detA
  • 北航数值分析第一次大作业,用幂法和反幂法求矩阵特征值进而求出2范数条件数。上下边带压缩以提高运行速度,计算完所有矩阵的条件数耗时约12秒
  • 首先把特征向量归一化 另一种方法 幂法(迭代得到最大特征向量,再求特征值反幂法

    首先把特征向量归一化

    另一种方法

     

    幂法(迭代得到最大特征向量,再求特征值)

     

    反幂法

     

     

    展开全文
  • 输入参数:系数矩阵A,近似值lamda_initial,初始向量x_initial,误差限epsilon,最大迭代次数N。输出接近给定的lamda_initial的矩阵特征值
  • 数值分析中幂法,反幂法求矩阵特征值,条件数,行列式。c++实现,包含数值题目500*500阶带状矩阵,可执行,包含误差分析
  • 给定一个n*n矩阵A以及A的某一个特征根的近似p,从一个给定向量x⃗ (0){\vec{x}}^{(0)}出发,特征根的高精度近似,并且出其对应的无穷范数下的单位特征向量。 函数接口定义: int EigenV(int n, double ...

    任务概述

    给定一个n*n矩阵A以及A的某一个特征根的近似值p,从一个给定向量x⃗ (0)出发,求该特征根的高精度近似值,并且求出其对应的无穷范数下的单位特征向量。
    函数接口定义:

    int EigenV(int n, double a[][MAX_SIZE], double *lambda, double v[], double TOL, int MAXN);

    其中n为矩阵a的维数,MAX_SIZE是程序定义的矩阵最大维数。lambda传入某一个特征值的近似值p,并且传回该特征值的高度近似值。v传入迭代初始向量x⃗ (0),返回无穷范数下的单位特征向量。TOL是精度上限,MAXN是迭代最大次数。函数返回值有三种情况:
    1:如果成功完成求解
    -1:如果p就是精确特征值
    0:如果算法经过MAXN次迭代后还没有达到精度要求。
    裁判程序:

    #include <stdio.h>
    
    #define MAX_SIZE 10
    
    int EigenV(int n, double a[][MAX_SIZE], double *lambda, double v[], double TOL, int MAXN);
    
    int main()
    {
        int n, MAXN, m, i, j, k;
        double a[MAX_SIZE][MAX_SIZE], v[MAX_SIZE];
        double lambda, TOL;
    
        scanf("%d", &n);
        for (i=0; i<n; i++) 
            for (j=0; j<n; j++) 
                scanf("%lf", &a[i][j]);
        scanf("%lf %d", &TOL, &MAXN);
        scanf("%d", &m);
        for (i=0; i<m; i++) {
            scanf("%lf", &lambda);
            for (j=0; j<n; j++)
                scanf("%lf", &v[j]);
            switch (EigenV(n, a, &lambda, v, TOL, MAXN)) {
                case -1: 
                    printf("%12.8f is an eigenvalue.\n", lambda );
                    break;
                case 0:
                    printf("Maximum number of iterations exceeded.\n");
                    break;
                case 1:
                    printf("%12.8f\n", lambda );
                    for (k=0; k<n; k++)
                        printf("%12.8f ", v[k]);
                    printf("\n");
                    break;
            }
        }
    
        return 0;
    }
    
    /* Your function will be put here */

    样例输入1:

    3
    1 2 3
    2 3 4
    3 4 5
    0.0000000001 1000
    1
    -0.6 1 1 1

    样例输出1:

    -0.62347538
      1.00000000   0.17206558  -0.65586885

    样例输入2:

    2
    0 1
    1 0
    0.0000000001 10
    2
    1.0 1 1
    100.0 1 0

    样例输出2:

     1.00000000 is an eigenvalue.
    Maximum number of iterations exceeded.

    算法思路

    求解矩阵特征值的算法有很多,其中最原始的算法叫做幂法(Power Method)。幂法非常简单,用于求解矩阵的最大特征值和对应的特征向量:不妨假设n*n矩阵A的特征值满足条件|λ1|>|λ2|...|λn|0,并且对应n个线性无关的特征向量v1,...,vn。从任一非零初始向量x⃗ (0)出发,由

    实现细节

    心得体会

    展开全文
  • #include//用反幂法计算矩阵的最小模特征及相应的特征向量#include#include#define m 3#define q 1.2679//平移量void L_U(double aa[m][m],double LL[m][m],double UU[m][m]){double (*a)[m],(*L)[m],(*U)[m];...

    #include//用反幂法计算矩阵的最小模特征值及相应的特征向量

    #include

    #include

    #define m 3

    #define q 1.2679//平移量

    void L_U(double aa[m][m],double LL[m][m],double UU[m][m])

    {

    double (*a)[m],(*L)[m],(*U)[m];

    double sum=0;

    a=aa,L=LL,U=UU;

    for(int i=0;i

    {

    for(int j=0;j

    {

    *(*(L+i)+j)=*(*(U+i)+j)=0;

    }

    }

    for(int r=0;r

    {

    for(int j=r;j

    {

    if(r==0)

    {

    U[r][j]=a[r][j];

    }

    else

    {

    for(int k=0;k

    {

    sum+=L[r][k]*U[k][j];

    }

    U[r][j]=a[r][j]-sum;

    }

    sum=0;

    }

    for(int i=r+1;i

    {

    if(r==0)

    {

    L[i][r]=a[i][r]/U[r][r];

    }

    else

    {

    for(int k=0;k

    {

    sum+=L[i][k]*U[k][r];

    }

    L[i][r]=(a[i][r]-sum)/U[r][r];

    }

    sum=0;

    }

    }

    for(i=0;i

    {

    L[i][i]=1;

    }

    }

    void main()//主函数

    {

    double A[m][m]={{2,1,0},{1,3,1},{0,1,4}};

    double v0[m];

    double u0[m];

    double y[m];

    double un[m];

    double t;//最大值临时变量

    double temp;

    double sum;

    double e=0.0005;

    double L[m][m],U[m][m];

    int i,j;

    int tap=0;//迭代次数

    cout<

    cout<

    for(i=0;i

    {

    for(j=0;j

    {

    L[i][j]=U[i][j]=0;

    cout<

    if(i==j)

    A[i][j]-=q;

    }

    cout<

    }

    cout<

    for(i=0;i

    {

    y[i]=u0[i]=1;

    }

    //下面对A[i][j]进行LU分解

    cout<

    for(i=0;i

    {

    for(j=0;j

    {

    cout<

    }

    cout<

    }

    cout<

    L_U(A,L,U);//调用L、U分解函数

    cout<

    for(i=0;i

    {

    for(j=0;j

    {

    cout<

    }

    cout<

    }

    cout<

    for(i=0;i

    {

    for(j=0;j

    {

    cout<

    }

    cout<

    }//LU分解完毕

    do

    {

    t=0;

    temp=0;

    v0[m-1]=y[m-1]/U[m-1][m-1];

    for(i=m-2;i>=0;i--)

    {

    sum=0;

    for(j=2;j>i;j--)

    {

    sum+=U[i][j]*v0[j];

    }

    v0[i]=(y[i]-sum)/U[i][i];

    }//求v0i的回代

    for(i=0;i

    {

    if(fabs(v0[i])>t)

    t=v0[i];

    }

    for(i=0;i

    {

    un[i]=u0[i];//保存u[]的值

    u0[i]=v0[i]/t;

    if(fabs(un[i]-u0[i])>temp)

    temp=fabs(un[i]-u0[i]);//保存un[i]-u[i]的最大值

    }//算出ui

    tap++;

    //第二次迭代

    y[0]=u0[0]/L[0][0];

    for(i=1;i

    {

    sum=0;

    for(j=0;j

    {

    sum+=L[i][j]*y[j];

    }

    y[i]=(u0[i]-sum)/L[i][i];

    }

    }while(temp>e);

    cout<

    cout<

    for(i=0;i

    {

    cout<

    }

    cout<

    }

    展开全文
  • %反幂法求矩阵按模最小特征值 %2015.11.8 密密编写 (*^__^*) 嘻嘻……     function [lam]=jingmi(ep)%lam是A的按模最小的特征值 %初始化  n=501;  a=1:n;%存储A的主对角线元素  f

    值分析第四版 颜庆津 计算实习题P238

    结果:


    %function [lam]=jingmi(ep)

    %反幂法求矩阵按模最小特征值

    %2015.11.8 密密编写  (*^__^*) 嘻嘻……

     

     

    function [lam]=jingmi(ep)%lam是A的按模最小的特征值

    %初始化

       n=501;

       a=1:n;%存储A的主对角线元素

       for i=1:n

           a(i)=(1.64-0.024*i)*sin(0.2*i)-0.64*exp(0.1/i);

       end

       b=0.16;

       c=-0.064;

       u0=ones(n,1);%迭代初始向量

       u1=ones(n,1);

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%第一次迭代   

            m=sqrt(u0'*u0);

       y=u0/m;

    %以下代码功能:三角分解法,从线性方程组A*u1=y求解u1

    b0=y;

       L=zeros(3,n);

       U=zeros(3,n);

       

       %L中的主对角线元素均为1

       for i=1:n

            L(1,i)=1;

       end

    %%%%%%%%%%%%%%%%%%%%%%doolittle分解,第一部分A=LU

       for k=1:n

          

           for j=k:min(k+2,n) %计算 U(k,j)

               sum=0; %临时和

               M=[1,k-2,j-2];%存储t的初始量备选值,t取M中的最大值

               for t=max(M):k-1

                    sum=sum+L(k-t+1,t)*U(t-j+3,j);

               end

              %%%%%%以下程序功能相当于语句U(k,j)=A(k,j)-sum; %计算L的第k列元素

     

              if k==j

                    U(k-j+3,j)=a(k)-sum;

               else if j==k+1

                        U(k-j+3,j)=b-sum;

                    else if j==k+2

                           U(k-j+3,j)=c-sum;

                        end

                    end

              end

              %%%%%%以上程序功能相当于语句U(k,j)=A(k,j)-sum; %计算L的第k列元素

           end

     

        

           for i=k+1:min(k+2,n)%计算 L(i,k)

               sum=0; %临时和

               M=[1,i-2,k-2];%存储t的初始量备选值,t取M中的最大值

               for t=max(M):k-1

                    sum=sum+L(i-t+1,t)*U(t-k+3,k);

               end          

               %%%%%%以下程序功能相当于语句  L(i,k)=(A(i,k)-sum)/U(k,k);%计算U的第k行元素

               if k==i-1

                    L(i-k+1,k)=(b-sum)/U(k-k+3,k);

               else if k==i-2

                       L(i-k+1,k)=(c-sum)/U(k-k+3,k);

                    end

               end

               %%%%%%以上程序功能相当于语句L(i,k)=(A(i,k)-sum)/U(k,k);%计算U的第k行元素

           end

       end

    %%%%%%%%%%%%%%%%%%%%%%第二部分,求解Ly0=b1和Ux0=y0

       y0=zeros(n,1);

       x0=zeros(n,1);

       y0(1)=b0(1);

       for i=2:n %解y0

           sum=0;

           for t=max(1,i-2):i-1

               sum=sum+L(i-t+1,t)*y0(t);

           end

           y0(i)=b0(i)-sum;

       end

       x0(n)=y0(n)/U(n-n+3,n);

       for i=n-1:-1:1  %解x0

           sum=0;

           for t=i+1:min(i+2,n)

               sum=sum+U(i-t+3,t)*x0(t);

           end

           x0(i)=(y0(i)-sum)/U(i-i+3,i);

       end

       %%%%%%%%%%%%%%%%%%%%doolittle三角分解求解线性方程组Ax=b,结束。

       u1=x0;%返回结果

    %以上代码功能:三角分解法,从线性方程组A*u1=y求解u1

       

       x_prior=y'*u1;

       err=1;

       u0=u1;

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%循环迭代开始

     while(err>ep)

       m=sqrt(u0'*u0);

       y=u0/m;

    %以下代码功能:三角分解法,从线性方程组A*u1=y求解u1

     b0=y;

       L=zeros(3,n);

       U=zeros(3,n);

       

       %L中的主对角线元素均为1

       for i=1:n

           L(i-i+1,i)=1;

       end

    %%%%%%%%%%%%%%%%%%%%%%doolittle分解,第一部分A=LU

       for k=1:n

          

           for j=k:min(k+2,n) %计算 U(k,j)

               sum=0; %临时和

               M=[1,k-2,j-2];%存储t的初始量备选值,t取M中的最大值

               for t=max(M):k-1

                    sum=sum+L(k-t+1,t)*U(t-j+3,j);

               end

              %%%%%%以下程序功能相当于语句U(k,j)=A(k,j)-sum; %计算L的第k列元素

     

              if k==j

                    U(k-j+3,j)=a(k)-sum;

               else if j==k+1

                        U(k-j+3,j)=b-sum;

                    else if j==k+2

                            U(k-j+3,j)=c-sum;

                        end

                    end

              end

              %%%%%%以上程序功能相当于语句U(k,j)=A(k,j)-sum; %计算L的第k列元素

           end

     

        

           for i=k+1:min(k+2,n)%计算 L(i,k)

               sum=0; %临时和

               M=[1,i-2,k-2];%存储t的初始量备选值,t取M中的最大值

               for t=max(M):k-1

                    sum=sum+L(i-t+1,t)*U(t-k+3,k);

               end          

               %%%%%%以下程序功能相当于语句  L(i,k)=(A(i,k)-sum)/U(k,k);%计算U的第k行元素

               if k==i-1

                    L(i-k+1,k)=(b-sum)/U(k-k+3,k);

               else if k==i-2

                       L(i-k+1,k)=(c-sum)/U(k-k+3,k);

                    end

               end

               %%%%%%以上程序功能相当于语句L(i,k)=(A(i,k)-sum)/U(k,k);%计算U的第k行元素

           end

       end

    %%%%%%%%%%%%%%%%%%%%%%第二部分,求解Ly0=b1和Ux0=y0

       y0=zeros(n,1);

       x0=zeros(n,1);

       y0(1)=b0(1);

       for i=2:n %解y0

           sum=0;

           for t=max(1,i-2):i-1

               sum=sum+L(i-t+1,t)*y0(t);

           end

           y0(i)=b0(i)-sum;

       end

       x0(n)=y0(n)/U(n-n+3,n);

       for i=n-1:-1:1  %解x0

           sum=0;

           for t=i+1:min(i+2,n)

               sum=sum+U(i-t+3,t)*x0(t);

           end

           x0(i)=(y0(i)-sum)/U(i-i+3,i);

       end

       %%%%%%%%%%%%%%%%%%%%doolittle三角分解求解线性方程组Ax=b,结束。

       u1=x0;%返回结果

    %以上代码功能:三角分解法,从线性方程组A*u1=y求解u1

       lam=y'*u1;

       err=abs(lam-x_prior)/abs(lam);

       u0=u1;

       x_prior=lam;

      end

       lam=y'*u1;

       err=abs(lam-x_prior)/abs(lam);

       u0=u1;

       x_prior=lam;

    end

    lam=1/lam;

    end

    展开全文
  • 关于如何用幂法、反幂法求对角矩阵特征值
  • 采用C语言编写,运用数值迭代方法求矩阵特征值和特征向量,包括高斯迭代和杜利特尔迭代,精度10^-12
  • 矩阵特征值与特征向量的计算的matlab实现,幂法、反幂法和位移反幂法、雅可比(Jacobi)方法、豪斯霍尔德(Householder)方法、实对称矩阵的三对角化、QR方法、根位移QR方法计算实对称矩阵特征值、广义特征值问题...
  • 一. 算法设计1. 幂法(1)取初始向量u(例如取u=(1,1,…1)),置...反幂法(1)取初始向量u(例如取u=(1,1,…1)),置精度要求,置k=1. (2)对A作LU分解,即A=LU(3)解线性方程组 Ly=u,Uv=y(4)计算 m=max(v)
  • 有没有求矩阵特征值方法的程序,幂法,反幂法,雅可比法,QR法的原程序 可以运行的</p>
  • 2.掌握幂法、反幂法求矩阵特征值和特征向量以及相应的程序设计;3.掌握矩阵QR分解二、实验原理幂法是一种计算矩阵主特征值(矩阵按模最大的特征值)及对应特征向量的迭代方法, 特别是用于大型稀疏矩阵。设实矩阵A=...

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

反幂法求矩阵特征值