文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发其他语言数值计算程序大放送-特征值和特征向量
精品推荐
特别推荐
·控制面板知多少
·给你十条学习Ruby语言的理由
·分页管理机制
·Perl 语言的重要价值体现
·经验技巧:分享两条Delphi开发经验
·Java编程思想:面向对象的逻辑思维方法
·Samba系统简介
热点TOP10
·AIX 5L 学习大纲/简易教程(2)(未经许可,请勿COPY)
·DENX U-Boot及Linux使用手册
·EZ-USB 68013A开发指南
·图象处理中的边缘检测------canny算子
·Visual C++ ADO数据库编程入门
·利用 wordXP 实现自动排班
·UDT协议-基于UDP的可靠数据传输协议
·XPCOM--LINUX下的组件开发技术
·MyEclipse JSF 快速入门中文版(上)
·samba和openldap结合实战
·AIX 5L 学习大纲/简易教程(1)(未经许可,请勿COPY)
·Microsoft Windows XP Embedded 开发工具概述
·eMbedded Visual C++开发入门
·在VC6中创建wxWidgets项目[附图]
·数值计算程序大放送-线性代数方程组
·列表视图控件
·visual studio 2005 简体中文团队开发版 SQL server 2005简体中文版下载
·Visual Studio 2005:在 Visual C++ 中开发自定义的绘图控件
·汇编语言工具下载
·多文档界面(MDI)

数值计算程序大放送-特征值和特征向量

日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]


 

//求赫申伯格(Hessen berg)矩阵的全部特征值
//利用带原点位移的双重步QR方法求上H矩阵的全部特征值
//返回值小于0表示超过迭代jt次仍未达到精度要求
//返回值大于0表示正常返回
//a-长度为n*n的数组,存放上H矩阵
//n-矩阵的阶数
//u-长度为n的数组,返回n个特征值的实部
//v-长度为n的数组,返回n个特征值的虚部
//eps-控制精度要求
//jt-整型变量,控制最大迭代次数
int edqr(double a[],int n,double u[],double v[],double eps,int jt)
{
int m,it,i,j,k,l,ii,jj,kk,ll;
    double b,c,w,g,xy,p,q,r,x,s,e,f,z,y;
    it=0;
m=n;
    while (m!=0)
{
  l=m-1;
        while ((l>0)&&(fabs(a[l*n+l-1])>eps*(fabs(a[(l-1)*n+l-1])+fabs(a[l*n+l]))))
  {
   l=l-1;
  }
        ii=(m-1)*n+m-1;
  jj=(m-1)*n+m-2;
        kk=(m-2)*n+m-1;
  ll=(m-2)*n+m-2;
        if (l==m-1)
  {
   u[m-1]=a[(m-1)*n+m-1];
   v[m-1]=0.0;
            m=m-1; it=0;
  }
        else if (l==m-2)
  {
   b=-(a[ii]+a[ll]);
            c=a[ii]*a[ll]-a[jj]*a[kk];
            w=b*b-4.0*c;
            y=sqrt(fabs(w));
            if (w>0.0)
   {
    xy=1.0;
                if (b<0.0)
    {
     xy=-1.0;
    }
                u[m-1]=(-b-xy*y)/2.0;
                u[m-2]=c/u[m-1];
                v[m-1]=0.0; v[m-2]=0.0;
   }
            else
   {
    u[m-1]=-b/2.0;
    u[m-2]=u[m-1];
                v[m-1]=y/2.0;
    v[m-2]=-v[m-1];
   }
            m=m-2;
   it=0;
  }
        else
  {
   if (it>=jt)
   {
    printf("fail\n");
                return(-1);
   }
            it=it+1;
            for (j=l+2; j<=m-1; j++)
   {
    a[j*n+j-2]=0.0;
   }
            for (j=l+3; j<=m-1; j++)
   {
    a[j*n+j-3]=0.0;
   }
            for (k=l; k<=m-2; k++)
   {
    if (k!=l)
    {
     p=a[k*n+k-1];
     q=a[(k+1)*n+k-1];
                    r=0.0;
                    if (k!=m-2)
     {
      r=a[(k+2)*n+k-1];
     }
    }
                else
    {
     x=a[ii]+a[ll];
                    y=a[ll]*a[ii]-a[kk]*a[jj];
                    ii=l*n+l;
     jj=l*n+l+1;
                    kk=(l+1)*n+l;
     ll=(l+1)*n+l+1;
                    p=a[ii]*(a[ii]-x)+a[jj]*a[kk]+y;
                    q=a[kk]*(a[ii]+a[ll]-x);
                    r=a[kk]*a[(l+2)*n+l+1];
    }
                if ((fabs(p)+fabs(q)+fabs(r))!=0.0)
    {
     xy=1.0;
                    if (p<0.0)
     {
      xy=-1.0;
     }
                    s=xy*sqrt(p*p+q*q+r*r);
                    if (k!=l)
     {
      a[k*n+k-1]=-s;
     }
                    e=-q/s;
     f=-r/s;
     x=-p/s;
                    y=-x-f*r/(p+s);
                    g=e*r/(p+s);
                    z=-x-e*q/(p+s);
                    for (j=k; j<=m-1; j++)
     {
      ii=k*n+j;
      jj=(k+1)*n+j;
                        p=x*a[ii]+e*a[jj];
                        q=e*a[ii]+y*a[jj];
                        r=f*a[ii]+g*a[jj];
                        if (k!=m-2)
      {
       kk=(k+2)*n+j;
                            p=p+f*a[kk];
                            q=q+g*a[kk];
                            r=r+z*a[kk];
       a[kk]=r;
      }
                        a[jj]=q;
      a[ii]=p;
     }
                    j=k+3;
                    if (j>=m-1)
     {
      j=m-1;
     }
                    for (i=l; i<=j; i++)
     {
      ii=i*n+k;
      jj=i*n+k+1;
                        p=x*a[ii]+e*a[jj];
                        q=e*a[ii]+y*a[jj];
                        r=f*a[ii]+g*a[jj];
                        if (k!=m-2)
      {
       kk=i*n+k+2;
                            p=p+f*a[kk];
                            q=q+g*a[kk];
                            r=r+z*a[kk];
       a[kk]=r;
      }
                        a[jj]=q;
      a[ii]=p;
     }
    }
   }
  }
    }
return(1);
}


上一页 [1] [2] [3] [4] [5] [6] 下一页 




上一篇:数值计算程序大放送-线性代数方程组

下一篇:数值计算程序大放送-矩阵运算

数值计算程序大放送-特征值和特征向量 相关文章:
·“黑客”教你如何远程控制计算机
·计算机启动更快的十五大绝招
·IE浏览器再现严重安全漏洞 微软紧急发补丁程序
·我是怎么进入他人计算机的
·电子书籍下载大放送
·免费领养QQ空间五级花最新技巧及代码放送
·经典常见计算机密码破解实用手册
·C#编写的windows计算器-源代码
·不用任何软件(木马程序)盗取账号密码
·史上最全的QQ技巧整合大放送
数值计算程序大放送-特征值和特征向量 相关软件:
·计算机基础知识教程
·C语言程序设计
·Windows环境下32位汇编语言程序设计
·高级计算机网络
·深入理解计算机系统电子杂志 PDF
·FLASH个人简历源程序(FLA)
·C语言程序设计视频教程 CSF 教材:谭浩强《c程序设计》
·零起点教你如何破解软件和制作注册机 and 视频+程序
·Sim Aquarium v2.06 -非常漂亮的海底世界屏幕保护程序
·硅谷 C++程序设计视频教程 齐幼菊

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot