回 帖 发 新 帖 刷新版面

主题:请问排序问题该怎么编程

do i=1,n
w(i)=real(eval(i))
yy(i)=i
enddo

do i=1,n
do j=1,i
if(w(i).gt.w(j)) then
t=w(i)
w(i)=w(j)
w(j)=t
s1=yy(i)
yy(i)=yy(j)
yy(j)=s1
endif
enddo;enddo

程序老出错,是怎么回事?(eval(i)是指一系列本征值)

回复列表 (共5个回复)

沙发

1. 代码完整吗?
2. 代码实现什么功能?
3. 出现什么错误?
4. 如果跟编译器有关, 那用什么系统, 什么版本的编译器?
5. 可否整理一下格式让看的舒服一点?

板凳

do i=1,n-1
do j=i+1,n

是不是遗传算法呀,哈哈

3 楼

怎么会是遗传呢?明明是排序啊。

4 楼


这只是其中一个部分,不是完整的,但是这个排序部分我觉得有点问题,为什么本征值的指标也要跟着变换顺序呢?

5 楼

本征值的指标跟着变的好处就是知道新的本征值顺序在原来的顺序里面位置在哪里.
因为一般求解出来的本征值跟本征矢是对应的. 某个位置的本征值跟本征矢矩阵的某个列矢量对应. 程序指标跟着变就能很快地查到对应的本征矢.
当然, 这只是我想到的用处, 如果本征值排序的时候本征矢也相应排序, 我说的那个好处就没有了, 所以具体你的整个程序出于什么考虑我不清楚.

我来回复

您尚未登录,请登录后再回复。点此登录或注册