求矩阵特征值的vc代码

    常用的求矩阵特征值的方法是雅可比法(Jacobi),可以求取实对称矩阵的特征值(Eigenvalue)与特征向量(Eigenvector)。

   具体代码如下:
   参数a:存放矩阵A   大小n*n   函数返回时,对角线上存放n个特征值。
   参数n:实对称矩阵A的阶数。
   参数v:矩阵,大小n*n,返回特征向量。其中第i列为第i个特征值的特征向量。
   参数eps:控制精度。
   参数jt:控制的迭代次数。


int cJcbEigen(double a[],int n,double v[],double eps,int jt)
{
    int i,j,p,q,u,w,t,s,l;
    double fm,cn,sn,omega,x,y,d;

    l=1;
    for (i=0; i<=n-1; i++)
    {
        v[i*n+i]=1.0;
        for (j=0; j<=n-1; j++)
        {
            if (i!=j)
                v[i*n+j]=0.0;
        }
    }

    while (1)
    {
        fm=0.0;
        for (i=1; i<=n-1; i++)
        {
            for (j=0; j<=i-1; j++)
            {
                d=fabs(a[i*n+j]);
                if ((i!=j)&&(d>fm))
                { fm=d; p=i; q=j;}
            }
        }

        if (fm<eps)  
            return(1);

        if (l>jt)  
            return(-1);

        l=l+1;
        u=p*n+q;
        w=p*n+p;
        t=q*n+p;
        s=q*n+q;
        x=-a[u];
        y=(a[s]-a[w])/2.0;
        omega=x/sqrt(x*x+y*y);

        if (y<0.0)
            omega=-omega;
        sn=1.0+sqrt(1.0-omega*omega);
        sn=omega/sqrt(2.0*sn);
        cn=sqrt(1.0-sn*sn);
        fm=a[w];
        a[w]=fm*cn*cn+a[s]*sn*sn+a[u]*omega;
        a[s]=fm*sn*sn+a[s]*cn*cn-a[u]*omega;
        a[u]=0.0;
        a[t]=0.0;

        for (j=0; j<=n-1; j++)
        {
            if ((j!=p)&&(j!=q))
            {
                u=p*n+j; w=q*n+j;
                fm=a[u];
                a[u]=fm*cn+a[w]*sn;
                a[w]=-fm*sn+a[w]*cn;
            }
        }

        for (i=0; i<=n-1; i++)
        {
            if ((i!=p)&&(i!=q))
            {
                u=i*n+p;
                w=i*n+q;
                fm=a[u];
                a[u]=fm*cn+a[w]*sn;
                a[w]=-fm*sn+a[w]*cn;
            }
        }

        for (i=0; i<=n-1; i++)
        {
            u=i*n+p;
            w=i*n+q;
            fm=v[u];
            v[u]=fm*cn+v[w]*sn;
            v[w]=-fm*sn+v[w]*cn;
        }
    }

    return(1);
}


[本日志由 cnfgg 于 2009-07-16 03:32 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: vc 矩阵 特征值 代码
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.