首先s1,s2是80*80的数组。inputN1=80,beita=0.3,其余均为变量
需要计算的公式是:
s2[p][q]=max(max(w(p-i,q-j)*s1[i][j]))
p,q,i,j from 0 to 79
w(m,n)=exp(-beita*(m^2+n^2))
m,n from -79 to 79
程序如下,已经进行了简化。
真正的计算是从第20行开始,前面都是为了简化计算。
我想问题就出在这里,我试着把这段程序用s2[i][j]=s1[i][j]代替,速度巨快。
不知道有什么办法能够优化这段程序呢?请一定赐教。谢谢。
1 NN=40;
2 for (i=0;i<inputN1;i=i+1)
3 {
4 for (j=0;j<inputN1;j=j+1)
5 {
6 nb1=j-NN;
7 if (nb1<0)
8 nb1=0;
9 nb2=j+NN;
10 if (nb2>inputN1)
11 nb2=inputN1;
12
13 nb3=i-NN;
14 if (nb3<0)
15 nb3=0;
16 nb4=i+NN;
17 if (nb4>inputN1)
18 nb4=inputN1;
19
20 aa=0;
21 for (i1=nb3;i1<nb4;i1=i1+1)
22 {
23 for (j1=nb1;j1<nb2;j1=j1+1)
24 {
25 j2=abs(i-i1);
26 j3=abs(j-j1);
27 fai=exp(-beita*(j2*j2+j3*j3));
28 bb=fai*s1[i1][j1];
29 if(aa<bb) aa=bb;
30 }
31 }
32 s2[i][j]=aa;
33 }
34 }
需要计算的公式是:
s2[p][q]=max(max(w(p-i,q-j)*s1[i][j]))
p,q,i,j from 0 to 79
w(m,n)=exp(-beita*(m^2+n^2))
m,n from -79 to 79
程序如下,已经进行了简化。
真正的计算是从第20行开始,前面都是为了简化计算。
我想问题就出在这里,我试着把这段程序用s2[i][j]=s1[i][j]代替,速度巨快。
不知道有什么办法能够优化这段程序呢?请一定赐教。谢谢。
1 NN=40;
2 for (i=0;i<inputN1;i=i+1)
3 {
4 for (j=0;j<inputN1;j=j+1)
5 {
6 nb1=j-NN;
7 if (nb1<0)
8 nb1=0;
9 nb2=j+NN;
10 if (nb2>inputN1)
11 nb2=inputN1;
12
13 nb3=i-NN;
14 if (nb3<0)
15 nb3=0;
16 nb4=i+NN;
17 if (nb4>inputN1)
18 nb4=inputN1;
19
20 aa=0;
21 for (i1=nb3;i1<nb4;i1=i1+1)
22 {
23 for (j1=nb1;j1<nb2;j1=j1+1)
24 {
25 j2=abs(i-i1);
26 j3=abs(j-j1);
27 fai=exp(-beita*(j2*j2+j3*j3));
28 bb=fai*s1[i1][j1];
29 if(aa<bb) aa=bb;
30 }
31 }
32 s2[i][j]=aa;
33 }
34 }