java求实对称矩阵特征值

juhuacha159 2011-05-22 09:12:11
如题,给代码或者给思路,都可以。
...全文
97 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
悠忧虫 2011-05-22
  • 打赏
  • 举报
回复
个人认为了解一下就可以了,用的到时候能把算法转换成代码就行
juhuacha159 2011-05-22
  • 打赏
  • 举报
回复
数学,我永远的痛,顺便问问大家,难道做程序必须要懂这些数学的东西吗?

非要知道矩阵的计算和推导才能解决我的问题吗?

个人认为不做专业的数学软件的话好像不需要什么数学背景吧。。。

现在项目紧张要用到这个计算,以后要找机会补补数学知识了,让自己变聪明点。。。。

谢谢悠忧虫~~你的代码我去验证下~~
悠忧虫 2011-05-22
  • 打赏
  • 举报
回复

import java.applet.Applet;
import java.awt.Graphics;

public class jaccobi extends Applet
{
public void myjaccobimat(double [][] a,double [][] J,int n,double eps)
{
double t,s,c,max,temp;
int i,j,p,q;
double [] b1= new double[n];
double [] b2= new double[n];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i==j)
J[i][j]=1;
else J[i][j]=0;

}
while(true)
{
max=0;p=0;q=0;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
temp=Math.abs(a[i][j]);
if(temp>max)
{
max=temp;
p=i;
q=j;

}
}
if(max<eps) break;
t=(a[p][p]-a[q][q])/a[p][q];
if(t==0)
c=s=Math.sqrt(2)/2;
else
{
if(t<0)
t=-1.0/(-t+Math.sqrt(1+t*t));
else
t=1.0/(t+Math.sqrt(1+t*t));
c=1.0/Math.sqrt(1+t*t);
s=t*c;
}
for(i=0;i<n;i++)
{
if(i==p)
b1[i]=a[p][p]*c*c+a[q][q]*s*s+a[p][q]*2*s*c;
else if(i==q)
b1[i]=(a[q][q]-a[p][p])*s*c+a[p][q]*(2*c*c-1);
else
b1[i]=a[i][p]*c+a[i][q]*s;
}
for(i=0;i<n;i++)
{
if(i==p)
b2[i]=b1[q];
else if(i==q)
b2[i]=a[p][p]*s*s+a[q][q]*c*c-a[p][q]*2*s*c;
else
b2[i]=-a[i][p]*c+a[i][q]*c;
}
for(i=0;i<n;i++)
{
a[i][p]=a[p][i]=b1[i];
a[i][q]=a[q][i]=b2[i];
}
for(i=0;i<n;i++)
{
b1[i]=J[i][p]*c+J[i][q]*s;
b2[i]=-J[i][p]*s+J[i][q]*c;
}
for(i=0;i<n;i++)
{
J[i][p]=b1[i];
J[i][q]=b2[i];

}
}
}



public void paint (Graphics g)
{
double [][] a={{1,Math.sqrt(2),2},{Math.sqrt(2),3,Math.sqrt(2)},{2,Math.sqrt(2),1}};
double [][] J=new double[3][3];
double eps=0.00000001;
myjaccobimat(a,J,3,eps);
g.drawString(" 特征值"+a[0][0]+"和"+a[1][1]+"和"+a[2][2], 10,20);
}

}



从网上找的,不知道对不对

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧