逐次下降法的定义:
- 对于给定的方程组,使用公式:
其中k为迭代次数(k=0,1,2,…)
逐步代入求近似解的方法称为迭代法 - 如果存在(记为),称此迭代法收敛,显然就是方程组的解,否则称此迭代法发散。
- 研究{}的收敛性。引进误差向量:
得到:
递推得到:
要考察{}的收敛性,就要研究B在或的条件。
下面给出Python实现
import numpy as np
from numpy import *
from common_libs import * #使用散点图绘制函数
import matplotlib.pyplot as plt
#消元发求解方程组的解
#求解元方程
def method_nomal():
A =mat([[8,-3,2],
[4,11,-1],
[6,3,12]])
b=mat([20,33,36])
result = linalg.solve(A,b.T)
print result
#迭代法进行计算
def interationMethod(n,B0,f):
error = 1.0e-6 # 迭代阈值
steps = 100 # 迭代次数
xk=zeros((n,1))``
errorlist=[]
for i in range(steps):
xk_1=xk
xk=B0*xk+f
errorlist.append(linalg.norm(xk_1-xk))
if errorlist[-1]<error:
print i+1
break
print xk
# 绘制散点图
matpts= zeros((2,i+1))
matpts[0]=linspace(1,i+1,i+1)
print matpts[0]
matpts[1]=array(errorlist)
drawScatter(plt,matpts)
plt.show()
B0 = mat([[0.0,3.0/8.0,-2.0/8.0],[-4.0/11.0,0.0,1.0/11.0],[-6.0/12.0,-3.0/12.0,0.0]])
m,n = shape(B0)
f = mat([[20.0/8.0],[33.0/11.0],[36.0/12.0]])
interationMethod(n,B0,f)