📄 征求求实矩阵特征值和相应特征向量的c程序(可另开贴子加分).htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)http://book.chinaz.com/CSDN/phppost10/php81380.htm -->
<HTML><HEAD><TITLE>征求求实矩阵特征值和相应特征向量的c程序(可另开贴子加分)</TITLE>
<SCRIPT src="征求求实矩阵特征值和相应特征向量的c程序(可另开贴子加分).files/1.js"></SCRIPT>
<META http-equiv=Content-Type content="text/html; charset=GB2312">
<META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff leftMargin=0 topMargin=0 marginheight="0" marginwidth="0">
<CENTER>
<TABLE width="100%">
<TBODY>
<TR>
<TD align=right>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=right border=0>
<TBODY>
<TR>
<TD colSpan=2><A
href="http://book.chinaz.com/CSDN/index.html">返回首页</A> - <A
href="http://book.chinaz.com/CSDN/index.htm">当前索引</A> - </TD></TR>
<TR>
<TD colSpan=2 height=15></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=left>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top align=right width=100>主 题:</TD>
<TD align=right width=5></TD>
<TD><PRE>征求求实矩阵特征值和相应特征向量的c程序(可另开贴子加分)</PRE></TD></TR>
<TR bgColor=#666666>
<TD colSpan=3 height=1></TD></TR>
<TR height=10>
<TD align=right></TD>
<TD align=right></TD>
<TD></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD><PRE>
征求求任意实矩阵特征值和相应特征向量的c程序。如果完成以下两点中任意一点,相当于完成本问题:
1、将任意实矩阵初等相似变换为实对称阵;或
2、求出齐次线性方程组无数解中的任意一组。
求求各位大哥哥大姐姐,拉小弟一把。最好附有c,c++的源程序。
</PRE></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
saint001(saint001) </B></FONT><FONT color=#000000>( ) 信誉:105
</FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2002-09-18
10:45:04Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>100</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
我现在用Numerical Recipes in C程序库做了求矩阵特征值的程序,不过特征向量还没有求出来
这个c的程序库感觉要比matlab用的fortran的那几个好用,毕竟是c的,并且有pdf格式的Numerical Recipes in C这本书下载,非常好
但功能不是很强,比如化为Hessenburg阵后它的子程序只能求出特征值,而没有给出特征向量
对于对称矩阵,它给出的求解特征值和特征向量的方法还是Jacobi法
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.chinaz.com/CSDN/phppost10/php81380.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
saint001(saint001) </B></FONT><FONT color=#000000>( ) 信誉:105
</FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2002-09-18
11:11:53Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
先把求特征值的主程序发上来
#include <math.h>
#include <alloc.h>
#include "c\elmhes.c"
#include "c\hqr.c"
#define N 3
void main()
{
double b[N+1][N+1]={{0,0,0,0},{0,3,1,-1},{0,2,2,-1},{0,2,2,0}};/*这里矩阵无需对称,若对称,则特征值均为实数*/
double **a;
double wr[N+1],wi[N+1];/*特征值的实部和虚部*/
int i,j;
a=(double **) malloc((unsigned) (N+1)*sizeof(double*));
for(i=0;i<=N;i++)
a[i]=b[i]; /*赋值完毕*/
printf("Original A:\n");
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
printf("%f ",a[i][j]);
printf("\n");
}
elmhes(a,N); /*变换至上Hessenburg型,特征值不变*/
printf("After Elmhes:\n");
for(i=1;i<=N;i++)
for(j=1;j<(i-1);j++)
a[i][j]=0;
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
printf("%f ",a[i][j]);
printf("\n");
}
hqr(a,N,wr,wi);/*用QR方法求上Hessenburg型矩阵的特征值*/
printf("Eigenvalue:\n");
for(i=1;i<=N;i++)
printf("%f + %f * i\n",wr[i],wi[i]);
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.chinaz.com/CSDN/phppost10/php81380.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
saint001(saint001) </B></FONT><FONT color=#000000>( ) 信誉:105
</FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2002-09-18
11:14:04Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
其中(修改过的)c\elmhes.c为
#include <math.h>
#define SWAP(g,h) {y=(g);(g)=(h);(h)=y;}
void elmhes(a,n)
double **a;
int n;
{
int m,j,i;
double y,x;
for (m=2;m<n;m++) {
x=0.0;
i=m;
for (j=m;j<=n;j++) {
if (fabs(a[j][m-1]) > fabs(x)) {
x=a[j][m-1];
i=j;
}
}
if (i != m) {
for (j=m-1;j<=n;j++) SWAP(a[i][j],a[m][j])
for (j=1;j<=n;j++) SWAP(a[j][i],a[j][m])
}
if (x) {
for (i=m+1;i<=n;i++) {
if (y=a[i][m-1]) {
y /= x;
a[i][m-1]=y;
for (j=m;j<=n;j++)
a[i][j] -= y*a[m][j];
for (j=1;j<=n;j++)
a[j][m] += y*a[j][i];
}
}
}
}
}
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.chinaz.com/CSDN/phppost10/php81380.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
baizhao(云散) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2002-09-19
20:37:37Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
To Saint001:
我的情况可你一样,我现在已经能够很好地把任意实矩阵化为Hessenburg矩阵,然后求出特征值,但是,求不出特征向量,因为实际上这是求齐次线性方程无数解中的一个,我就差这一步。
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.chinaz.com/CSDN/phppost10/php81380.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
saint001(saint001) </B></FONT><FONT color=#000000>( ) 信誉:105
</FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2002-09-20
08:26:23Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
全部做出来了
整个程序在
http://wwwbbs.chinaren.com/read_post.php3?pid=144473&bid=2005167&s=0&bname=user_saint001
不知能不能看到
我这几天要数末
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.chinaz.com/CSDN/phppost10/php81380.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
saint001(saint001) </B></FONT><FONT color=#000000>( ) 信誉:105
</FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2002-09-20
10:34:53Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
vc++编译的
不过发上去连个格式都没有了
不太好看
另外可能用指针的地方可以优化
我不再做了
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.chinaz.com/CSDN/phppost10/php81380.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
baizhao(云散) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2002-09-21
18:50:11Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
谢谢,我已经看到了,不知能不能用,我试一下,不管如何,我过两天就把分给你。对了,你是否需要建模的资料,我参加过大学、全国、美国的建模竞赛,有一些积累,有兴趣发邮件给我:baizhao@263.net,以后多交流。
再次感谢。
baizhao
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.chinaz.com/CSDN/phppost10/php81380.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
saint001(saint001) </B></FONT><FONT color=#000000>( ) 信誉:105
</FONT></TD>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -