1) 赋初值为0 for(i=1; i<=N-2; i++) for(j=1; j<=N-2; j++) for(k=1; k<=N-2; k++) { A[i][j][k]=0; B[i][j][k]=0; } printf("init ok!\n"); 迭代2527步。 init ok! it= 100 error=0.010373 it= 200 error=0.004651 it= 300 error=0.002839 it= 400 error=0.001976 it= 500 error=0.001483 it= 600 error=0.001170 it= 700 error=0.000962 it= 800 error=0.000815 it= 900 error=0.000705 it=1000 error=0.000619 it=1100 error=0.000546 it=1200 error=0.000484 it=1300 error=0.000429 it=1400 error=0.000381 it=1500 error=0.000338 it=1600 error=0.000300 it=1700 error=0.000266 it=1800 error=0.000236 it=1900 error=0.000210 it=2000 error=0.000186 it=2100 error=0.000165 it=2200 error=0.000147 it=2300 error=0.000131 it=2400 error=0.000116 it=2500 error=0.000103 it=2527 error=0.000100 converged ok! Time: 56.282s global max error = 0.085212 2) for(i=1; i<=N-2; i++) for(j=1; j<=N-2; j++) for(k=1; k<=N-2; k++) { A[i][j][k]=1; B[i][j][k]=1; } printf("init ok!\n"); 赋初值为1. init ok! it= 100 error=0.005959 it= 200 error=0.002455 it= 300 error=0.001414 it= 400 error=0.001047 it= 500 error=0.000825 it= 600 error=0.000671 it= 700 error=0.000555 it= 800 error=0.000461 it= 900 error=0.000383 it=1000 error=0.000318 it=1100 error=0.000265 it=1200 error=0.000221 it=1300 error=0.000185 it=1400 error=0.000155 it=1500 error=0.000131 it=1600 error=0.000111 it=1663 error=0.000100 converged ok! Time: 36.8392s global max error = 0.069821 迭代1663步。 时间减少约3分之1 3)所以怎么选初值也是个问题, 其实个这问题和大整数分解是一样的一个问题。 |
说点什么...