主题:请问排序问题该怎么编程
hj90801
[专家分:0] 发布于 2011-10-09 14:32:00
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个回复)
沙发
yeg001 [专家分:14390] 发布于 2011-10-09 20:08:00
1. 代码完整吗?
2. 代码实现什么功能?
3. 出现什么错误?
4. 如果跟编译器有关, 那用什么系统, 什么版本的编译器?
5. 可否整理一下格式让看的舒服一点?
板凳
edelweiss [专家分:60] 发布于 2011-10-12 17:27:00
do i=1,n-1
do j=i+1,n
是不是遗传算法呀,哈哈
3 楼
cgl_lgs [专家分:21040] 发布于 2011-10-13 10:08:00
怎么会是遗传呢?明明是排序啊。
4 楼
hj90801 [专家分:0] 发布于 2011-10-24 09:43:00
这只是其中一个部分,不是完整的,但是这个排序部分我觉得有点问题,为什么本征值的指标也要跟着变换顺序呢?
5 楼
yeg001 [专家分:14390] 发布于 2011-10-24 09:56:00
本征值的指标跟着变的好处就是知道新的本征值顺序在原来的顺序里面位置在哪里.
因为一般求解出来的本征值跟本征矢是对应的. 某个位置的本征值跟本征矢矩阵的某个列矢量对应. 程序指标跟着变就能很快地查到对应的本征矢.
当然, 这只是我想到的用处, 如果本征值排序的时候本征矢也相应排序, 我说的那个好处就没有了, 所以具体你的整个程序出于什么考虑我不清楚.
我来回复