PDA

查看完整版本 : [求助]对这个式子如何一边计算一边排序


hchhuahua
2008-11-04, 21:30
给定a,b的大小,在不同的m和n时,求fmn的值,并且对fmn的值从小到大排序,只取前20个的值,并保存fmn相应的m和n。m和n都是整数,从0开始往大,但是m和n不同时为0。现在的问题是我怎么样能一边计算fmn,一边对其进行排序,同时得到排序之后的m和n。
mn可能的组合有
1 0
2 0
3 0
....
0 1
0 2
0 3
...
1 1
1 2
1 3
.....

a=3.485;b=1.580;
fmn=sqrt((m*pi/a)^2+(n*pi/b)^2);%m,n都是从0,1,2,3。。

我自己通过一些计算已经知道排序后的m和n,但是不知道具体用matlab怎么实现。因为刚学matlab,所以还请大家多指教!谢谢。

messenger
2008-11-04, 22:07
你不是只取最后的前20个的值吗?

为什么还要一边计算fmn,一边对其进行排序呢?这不是做无用功吗?

hchhuahua
2008-11-04, 22:19
可能我表达的不够清楚,是只取最小的前20个值。
比如我算了如下这么多个,但是没有排序。
m n fcmn
1 0 4.3013
2 0 8.6026
3 0 12.9039
4 0 17.2052
5 0 21.5065
6 0 25.8077
7 0 30.109
8 0 34.4103
0 1 9.4873
1 1 10.4168
2 1 12.8068
3 1 16.0162
4 1 19.6476
5 1 23.5061
6 1 27.4964
7 1 31.5684
8 1 35.6943
0 2 18.9747
1 2 19.4561
2 2 20.8337
3 2 22.9466
4 2 25.6136
5 2 28.6804
6 2 32.0325
7 2 35.5892
8 2 39.2952
0 3 28.462
1 3 28.7852
2 3 29.7337
3 3 31.2505
4 3 33.2582
5 3 35.6737
6 3 38.4204
7 3 41.4324
8 3 44.656
0 4 37.9494
1 4 38.1923
2 4 38.9122
3 4 40.0832
4 4 41.6674
5 4 43.6197
6 4 45.8933
7 4 48.4428
8 4 51.2272
0 5 47.4367
1 5 47.6313
2 5 48.2104
3 5 49.1605
4 5 50.4605
5 5 52.0842
6 5 54.0026
7 5 56.1854
8 5 58.603
0 6 56.9241
1 6 57.0863
2 6 57.5704
3 6 58.3683
4 6 59.4673
5 6 60.8513
6 6 62.5011
7 6 64.3964
8 6 66.5163
0 7 66.4114
1 7 66.5505
2 7 66.9662
3 7 67.6534
4 7 68.6039
5 7 69.8069
6 7 71.2497
7 7 72.9179
8 7 74.7967
取最小的前20个如下:

1 4.3013
2 8.6026
3 9.4873
4 10.4168
5 12.8068
6 12.9039
7 16.0162
8 17.2052
9 18.9747
10 19.4561
11 19.6476
12 20.8337
13 21.5065
14 22.9466
15 23.5061
16 25.6136
17 25.8077
18 27.4964
19 28.462
20 28.6804

hchhuahua
2008-11-04, 22:25
因为按照mn的顺序,比如说
1 0
2 0
3 0
....
0 1
0 2
0 3
...
1 1
1 2
1 3
.....
求出来的fmn的大小是打乱的,我想要得到从小到大排列的fmn,并且得到对应m值,n值

anbcjys
2008-11-05, 08:26
可以先计算然后把计算出来的数值进行查找,看在那个的后面,或者前面,然后放到哪里就可以了

hchhuahua
2008-11-05, 23:50
可以先计算然后把计算出来的数值进行查找,看在那个的后面,或者前面,然后放到哪里就可以了

谢谢啊,我明白了

风浪
2008-11-06, 13:00
使用sort函数,然后根据index再找出对应的fmn值!

hchhuahua
2008-11-11, 01:43
谢谢风浪,问题解决了