第四章
2019/6/11 返回
第二题
- 规定
- 取初始解 x(0) = [0] * n-1
- 将 || x(k+1) - x(k) || < 10-4 作为终止迭代的判断依据
- 算法:
- 核心函数work():
def work(eps): A = create_A(eps) #创建A矩阵 b = [a*(h**2) for x in range(n-1)] #b = [ah**2] * n-1 e = 1e-4 x_0 = [np.float64(0.0) for x in range(n-1)] #x(0) = [0] * n-1 A_I = np.mat(A).I #求A的逆矩阵 x_r = A_I.dot(b) #求解b的精确值 print ("Exact:") print (x_r) #输出精确值 print () e_r, x_p = Jacobi(A, b, x_0, e, n-1) #Jacobi迭代法计算 r = x_r - x_p #计算误差 print ("Jacobi:") print ("|r| = %.20f" % (np.max(abs(r)))) #误差的无穷范数 print ("x = ", np.mat([np.float64("%.3E" % x) for x in x_p])) #输出结果,保留4位有效数字 print () e_r, x_p = GS(A, b, x_0, e, n-1) #GS迭代法计算 r = x_r - x_p print ("GS:") print ("|r| = %.20f" % (np.max(abs(r)))) print ("x = ", np.mat([np.float64("%.3E" % x) for x in x_p])) print () e_r, x_p, k = SOR(A, b, 1.25, x_0, e, n-1) #SOR迭代法计算 r = x_r - x_p print ("SOR:") print ("|r| = %.20f" % (np.max(abs(r)))) print ("x = ", np.mat([np.float64("%.3E" % x) for x in x_p]))
- 各种迭代法的函数将书上给出的伪代码翻译为Python代码即可,细节见代码
- 核心函数work():
- eps = 1.0 时
- Jacobi迭代法:
Jacobi: |r| = 0.06132757104799099745 x = [[-2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05 -2.488e-05]]
- GS迭代法:
GS: |r| = 0.06127806609749594791 x = [[-3.738e-05 -5.597e-05 -6.522e-05 -6.982e-05 -7.211e-05 -7.325e-05 -7.382e-05 -7.410e-05 -7.424e-05 -7.431e-05 -7.435e-05 -7.436e-05 -7.437e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -7.438e-05 -6.188e-05]]
- SOR迭代法:
SOR: |r| = 0.06119582925544748975 x = [[-5.691e-05 -9.346e-05 -1.168e-04 -1.315e-04 -1.409e-04 -1.468e-04 -1.505e-04 -1.528e-04 -1.542e-04 -1.551e-04 -1.557e-04 -1.560e-04 -1.563e-04 -1.564e-04 -1.565e-04 -1.565e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.566e-04 -1.488e-04 -1.081e-04]]
- Jacobi迭代法:
- eps = 0.1 时
- Jacobi迭代法:
Jacobi: |r| = 0.12019242244416511456 x = [[-0.02536 -0.048 -0.06819 -0.08619 -0.1022 -0.1165 -0.1292 -0.1404 -0.1504 -0.1593 -0.1671 -0.174 -0.1801 -0.1854 -0.1901 -0.1941 -0.1977 -0.2007 -0.2033 -0.2055 -0.2074 -0.2089 -0.2101 -0.2111 -0.2118 -0.2124 -0.2127 -0.2128 -0.2127 -0.2125 -0.2122 -0.2117 -0.2111 -0.2103 -0.2095 -0.2085 -0.2074 -0.2063 -0.205 -0.2037 -0.2022 -0.2007 -0.1991 -0.1974 -0.1956 -0.1938 -0.1918 -0.1898 -0.1878 -0.1856 -0.1834 -0.1811 -0.1787 -0.1762 -0.1737 -0.1711 -0.1685 -0.1658 -0.163 -0.1601 -0.1571 -0.1541 -0.1511 -0.1479 -0.1447 -0.1415 -0.1381 -0.1348 -0.1313 -0.1278 -0.1242 -0.1206 -0.1169 -0.1131 -0.1093 -0.1055 -0.1016 -0.0976 -0.09359 -0.08953 -0.08541 -0.08126 -0.07705 -0.07281 -0.06852 -0.06419 -0.05982 -0.05541 -0.05096 -0.04648 -0.04196 -0.03742 -0.03284 -0.02822 -0.02359 -0.01892 -0.01422 -0.009507 -0.004765]]
- GS迭代法:
GS: |r| = 0.03264207621270182047 x = [[-0.0361 -0.06849 -0.09752 -0.1235 -0.1467 -0.1674 -0.1859 -0.2023 -0.2168 -0.2296 -0.2409 -0.2508 -0.2595 -0.2669 -0.2734 -0.2789 -0.2836 -0.2875 -0.2906 -0.2932 -0.2951 -0.2965 -0.2974 -0.2979 -0.298 -0.2977 -0.2971 -0.2962 -0.295 -0.2935 -0.2918 -0.2899 -0.2877 -0.2854 -0.283 -0.2803 -0.2776 -0.2747 -0.2716 -0.2685 -0.2652 -0.2619 -0.2585 -0.2549 -0.2513 -0.2477 -0.2439 -0.2401 -0.2362 -0.2323 -0.2283 -0.2243 -0.2202 -0.216 -0.2119 -0.2076 -0.2034 -0.1991 -0.1947 -0.1904 -0.186 -0.1815 -0.1771 -0.1726 -0.1681 -0.1635 -0.159 -0.1544 -0.1498 -0.1451 -0.1405 -0.1358 -0.1311 -0.1264 -0.1217 -0.117 -0.1122 -0.1075 -0.1027 -0.09788 -0.09307 -0.08825 -0.08342 -0.07857 -0.07372 -0.06886 -0.06399 -0.05911 -0.05422 -0.04932 -0.04442 -0.0395 -0.03459 -0.02966 -0.02473 -0.0198 -0.01485 -0.009907 -0.004956]]
- SOR迭代法:
SOR: |r| = 0.01946460713744957438 x = [[-0.03781 -0.07175 -0.1022 -0.1294 -0.1538 -0.1755 -0.1948 -0.212 -0.2272 -0.2406 -0.2524 -0.2628 -0.2718 -0.2795 -0.2862 -0.2919 -0.2967 -0.3006 -0.3038 -0.3063 -0.3082 -0.3096 -0.3104 -0.3107 -0.3106 -0.3102 -0.3093 -0.3082 -0.3067 -0.305 -0.303 -0.3008 -0.2984 -0.2958 -0.2931 -0.2901 -0.2871 -0.2839 -0.2805 -0.2771 -0.2736 -0.2699 -0.2662 -0.2624 -0.2585 -0.2545 -0.2505 -0.2464 -0.2423 -0.2381 -0.2338 -0.2295 -0.2252 -0.2208 -0.2164 -0.212 -0.2075 -0.203 -0.1984 -0.1939 -0.1893 -0.1847 -0.18 -0.1754 -0.1707 -0.166 -0.1613 -0.1565 -0.1518 -0.147 -0.1423 -0.1375 -0.1327 -0.1278 -0.123 -0.1182 -0.1133 -0.1085 -0.1036 -0.09874 -0.09385 -0.08896 -0.08406 -0.07916 -0.07425 -0.06933 -0.06441 -0.05948 -0.05454 -0.0496 -0.04466 -0.03971 -0.03476 -0.0298 -0.02484 -0.01988 -0.01492 -0.009946 -0.004974]]
- Jacobi迭代法:
- eps = 0.01 时
- Jacobi迭代法:
Jacobi: |r| = 0.00266374232870697503 x = [[-0.2433 -0.3626 -0.4198 -0.4461 -0.4569 -0.4599 -0.459 -0.4562 -0.4524 -0.4481 -0.4435 -0.4388 -0.434 -0.4292 -0.4243 -0.4194 -0.4145 -0.4095 -0.4046 -0.3997 -0.3947 -0.3898 -0.3848 -0.3798 -0.3749 -0.3699 -0.3649 -0.3599 -0.3549 -0.3499 -0.345 -0.34 -0.335 -0.33 -0.325 -0.32 -0.315 -0.31 -0.305 -0.3 -0.295 -0.29 -0.285 -0.28 -0.275 -0.27 -0.265 -0.26 -0.255 -0.25 -0.245 -0.24 -0.235 -0.23 -0.225 -0.22 -0.215 -0.21 -0.205 -0.2 -0.195 -0.19 -0.185 -0.18 -0.175 -0.17 -0.165 -0.16 -0.155 -0.15 -0.145 -0.14 -0.135 -0.13 -0.125 -0.12 -0.115 -0.11 -0.105 -0.1 -0.095 -0.09 -0.085 -0.08 -0.075 -0.07 -0.065 -0.06 -0.055 -0.05 -0.045 -0.04 -0.035 -0.03 -0.025 -0.02 -0.015 -0.01 -0.005 ]]
- GS迭代法:
GS: |r| = 0.00163245247583437836 x = [[-0.2439 -0.3635 -0.4209 -0.4472 -0.4579 -0.4608 -0.4599 -0.457 -0.4531 -0.4487 -0.4441 -0.4393 -0.4344 -0.4295 -0.4246 -0.4197 -0.4147 -0.4098 -0.4048 -0.3998 -0.3949 -0.3899 -0.3849 -0.3799 -0.3749 -0.3699 -0.365 -0.36 -0.355 -0.35 -0.345 -0.34 -0.335 -0.33 -0.325 -0.32 -0.315 -0.31 -0.305 -0.3 -0.295 -0.29 -0.285 -0.28 -0.275 -0.27 -0.265 -0.26 -0.255 -0.25 -0.245 -0.24 -0.235 -0.23 -0.225 -0.22 -0.215 -0.21 -0.205 -0.2 -0.195 -0.19 -0.185 -0.18 -0.175 -0.17 -0.165 -0.16 -0.155 -0.15 -0.145 -0.14 -0.135 -0.13 -0.125 -0.12 -0.115 -0.11 -0.105 -0.1 -0.095 -0.09 -0.085 -0.08 -0.075 -0.07 -0.065 -0.06 -0.055 -0.05 -0.045 -0.04 -0.035 -0.03 -0.025 -0.02 -0.015 -0.01 -0.005 ]]
- SOR迭代法:
SOR: |r| = 0.00106139253479908824 x = [[-0.2443 -0.364 -0.4214 -0.4477 -0.4584 -0.4613 -0.4603 -0.4574 -0.4535 -0.449 -0.4443 -0.4395 -0.4346 -0.4297 -0.4248 -0.4198 -0.4148 -0.4099 -0.4049 -0.3999 -0.3949 -0.3899 -0.3849 -0.38 -0.375 -0.37 -0.365 -0.36 -0.355 -0.35 -0.345 -0.34 -0.335 -0.33 -0.325 -0.32 -0.315 -0.31 -0.305 -0.3 -0.295 -0.29 -0.285 -0.28 -0.275 -0.27 -0.265 -0.26 -0.255 -0.25 -0.245 -0.24 -0.235 -0.23 -0.225 -0.22 -0.215 -0.21 -0.205 -0.2 -0.195 -0.19 -0.185 -0.18 -0.175 -0.17 -0.165 -0.16 -0.155 -0.15 -0.145 -0.14 -0.135 -0.13 -0.125 -0.12 -0.115 -0.11 -0.105 -0.1 -0.095 -0.09 -0.085 -0.08 -0.075 -0.07 -0.065 -0.06 -0.055 -0.05 -0.045 -0.04 -0.035 -0.03 -0.025 -0.02 -0.015 -0.01 -0.005 ]]
- Jacobi迭代法:
- eps = 0.0001 时
- Jacobi迭代法:
Jacobi: |r| = 0.00014234056032735865 x = [[-0.4899 -0.4899 -0.485 -0.48 -0.475 -0.47 -0.465 -0.46 -0.455 -0.45 -0.445 -0.44 -0.435 -0.43 -0.425 -0.42 -0.415 -0.41 -0.405 -0.4 -0.395 -0.39 -0.385 -0.38 -0.375 -0.37 -0.365 -0.36 -0.355 -0.35 -0.345 -0.34 -0.335 -0.33 -0.325 -0.32 -0.315 -0.31 -0.305 -0.3 -0.295 -0.29 -0.285 -0.28 -0.275 -0.27 -0.265 -0.26 -0.255 -0.25 -0.245 -0.24 -0.235 -0.23 -0.225 -0.22 -0.215 -0.21 -0.205 -0.2 -0.195 -0.19 -0.185 -0.18 -0.175 -0.17 -0.165 -0.16 -0.155 -0.15 -0.145 -0.14 -0.135 -0.13 -0.125 -0.12 -0.115 -0.11 -0.105 -0.1 -0.095 -0.09 -0.085 -0.08 -0.075 -0.07 -0.065 -0.06 -0.055 -0.05 -0.045 -0.04 -0.035 -0.03 -0.025 -0.02 -0.015 -0.01 -0.005 ]]
- GS迭代法:
GS: |r| = 0.00004745115022036783 x = [[-0.49 -0.4899 -0.485 -0.48 -0.475 -0.47 -0.465 -0.46 -0.455 -0.45 -0.445 -0.44 -0.435 -0.43 -0.425 -0.42 -0.415 -0.41 -0.405 -0.4 -0.395 -0.39 -0.385 -0.38 -0.375 -0.37 -0.365 -0.36 -0.355 -0.35 -0.345 -0.34 -0.335 -0.33 -0.325 -0.32 -0.315 -0.31 -0.305 -0.3 -0.295 -0.29 -0.285 -0.28 -0.275 -0.27 -0.265 -0.26 -0.255 -0.25 -0.245 -0.24 -0.235 -0.23 -0.225 -0.22 -0.215 -0.21 -0.205 -0.2 -0.195 -0.19 -0.185 -0.18 -0.175 -0.17 -0.165 -0.16 -0.155 -0.15 -0.145 -0.14 -0.135 -0.13 -0.125 -0.12 -0.115 -0.11 -0.105 -0.1 -0.095 -0.09 -0.085 -0.08 -0.075 -0.07 -0.065 -0.06 -0.055 -0.05 -0.045 -0.04 -0.035 -0.03 -0.025 -0.02 -0.015 -0.01 -0.005 ]]
- SOR迭代法:
SOR: |r| = 0.00002181856461624943 x = [[-0.49 -0.4899 -0.485 -0.48 -0.475 -0.47 -0.465 -0.46 -0.455 -0.45 -0.445 -0.44 -0.435 -0.43 -0.425 -0.42 -0.415 -0.41 -0.405 -0.4 -0.395 -0.39 -0.385 -0.38 -0.375 -0.37 -0.365 -0.36 -0.355 -0.35 -0.345 -0.34 -0.335 -0.33 -0.325 -0.32 -0.315 -0.31 -0.305 -0.3 -0.295 -0.29 -0.285 -0.28 -0.275 -0.27 -0.265 -0.26 -0.255 -0.25 -0.245 -0.24 -0.235 -0.23 -0.225 -0.22 -0.215 -0.21 -0.205 -0.2 -0.195 -0.19 -0.185 -0.18 -0.175 -0.17 -0.165 -0.16 -0.155 -0.15 -0.145 -0.14 -0.135 -0.13 -0.125 -0.12 -0.115 -0.11 -0.105 -0.1 -0.095 -0.09 -0.085 -0.08 -0.075 -0.07 -0.065 -0.06 -0.055 -0.05 -0.045 -0.04 -0.035 -0.03 -0.025 -0.02 -0.015 -0.01 -0.005 ]]
- Jacobi迭代法:
- 可以看出,eps越小,迭代法得到的解与精确解的误差越小