参考书籍:数值分析 第五版 李庆杨 王能超 易大义编 第7章 非线性方程与方程组的数值解法
 文章声明:如有发现错误,欢迎批评指正
 
文章目录
7.1方程求根与二分法:太简单了(程序设计竞赛这些都是基本)。直接跳过。注意一下一些概念。
7.2不动点迭代法及其收敛性:7.2.1不动点与不动点迭代法: f ( x ) = 0 f(x)=0 f(x)=0恒等变为 x = φ ( x ) x=\varphi(x) x=φ(x)。用迭代方程 x k + 1 = φ ( x k ) x_{k+1}=\varphi(x_k) xk+1=φ(xk), x ( 0 ) x_{(0)} x(0)随便选。如 lim  k → ∞ x k = x ∗ \lim\limits_{k\rightarrow\infty}x_k=x^* k→∞limxk=x∗,则称迭代方程收敛;反之,发散。7.2.2不动点的存在性与迭代法的收敛性:定理1 设 φ ( x ) ∈ C [ a , b ] \varphi(x)\in C[a,b] φ(x)∈C[a,b]满足以下两个条件:(1)对任意的 x ∈ [ a , b ] x\in[a,b] x∈[a,b]有 a ≤ φ ( x ) ≤ b a\leq\varphi(x)\leq b a≤φ(x)≤b(2)存在正常数 L < 1 L<1 L<1,使对任意 x , y ∈ [ a , b ] x,y\in[a,b] x,y∈[a,b]都有 ∣ φ ( x ) − φ ( y ) ∣ ≤ L ∣ x − y ∣ |\varphi(x)-\varphi(y)|\leq L|x-y| ∣φ(x)−φ(y)∣≤L∣x−y∣,则 φ ( x ) \varphi(x) φ(x)在 [ a , b ] [a,b] [a,b]上存在唯一的不动点 x ∗ x^* x∗。证明可以看下,不是特别困难。7.2.3局部收敛性与收敛阶:不作讨论。
迭代法求解 x e x − 1 = 0 xe^x-1=0 xex−1=0
from math import e
x=0.5
print(f"k={0:02d},{x:.10f}")
for i in range(10):
    x=1/pow(e,x)
    print(f"k={i+1:02d},{x:.10f}")

7.3迭代收敛的加速方法:不作讨论
 7.4牛顿法:7.4.1牛顿法及其收敛性:牛顿法 
     
      
       
        
        
          x 
         
         
         
           k 
          
         
           + 
          
         
           1 
          
         
        
       
         = 
        
        
        
          x 
         
        
          k 
         
        
       
         − 
        
        
         
         
           f 
          
         
           ( 
          
          
          
            x 
           
          
            k 
           
          
         
           ) 
          
         
         
          
          
            f 
           
          
            ′ 
           
          
         
           ( 
          
          
          
            x 
           
          
            k 
           
          
         
           ) 
          
         
        
       
         , 
        
       
         k 
        
       
         = 
        
       
         0 
        
       
         , 
        
       
         1 
        
       
         , 
        
       
         … 
        
       
         , 
        
       
      
        x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)},k=0,1,\dots, 
       
      
    xk+1=xk−f′(xk)f(xk),k=0,1,…,(又切线法)
 7.4.2牛顿法的应用举例:不作讨论。7.4.3简化牛顿法与牛顿下山法。牛顿法的优点是收敛快,缺点是每步迭代要计算 
     
      
       
       
         f 
        
       
         ( 
        
        
        
          x 
         
        
          k 
         
        
       
         ) 
        
       
      
        f(x_k) 
       
      
    f(xk)及 
     
      
       
        
        
          f 
         
        
          ′ 
         
        
       
         ( 
        
        
        
          x 
         
        
          k 
         
        
       
         ) 
        
       
      
        f'(x_k) 
       
      
    f′(xk),计算量较大且有时 
     
      
       
        
        
          f 
         
        
          ′ 
         
        
       
         ( 
        
        
        
          x 
         
        
          k 
         
        
       
         ) 
        
       
      
        f'(x_k) 
       
      
    f′(xk)计算较困难;二是初始近似 
     
      
       
        
        
          x 
         
        
          0 
         
        
       
      
        x_0 
       
      
    x0只在根 
     
      
       
        
        
          x 
         
        
          ∗ 
         
        
       
      
        x^* 
       
      
    x∗附近才能保证收敛,如 
     
      
       
        
        
          x 
         
        
          0 
         
        
       
      
        x_0 
       
      
    x0给的不合适可能不收敛。为克服这两个缺点,通常可用下述方法。简化牛顿法 
     
      
       
        
        
          x 
         
         
         
           k 
          
         
           + 
          
         
           1 
          
         
        
       
         = 
        
        
        
          x 
         
        
          k 
         
        
       
         − 
        
        
        
          1 
         
         
          
          
            f 
           
          
            ′ 
           
          
         
           ( 
          
          
          
            x 
           
          
            0 
           
          
         
           ) 
          
         
        
       
         f 
        
       
         ( 
        
        
        
          x 
         
        
          k 
         
        
       
         ) 
        
       
      
        x_{k+1}=x_k-\frac{1}{f'(x_0)}f(x_k) 
       
      
    xk+1=xk−f′(x0)1f(xk);牛顿下山法 
     
      
       
        
        
          x 
         
         
         
           k 
          
         
           + 
          
         
           1 
          
         
        
       
         = 
        
        
        
          x 
         
        
          k 
         
        
       
         − 
        
       
         λ 
        
       
         f 
        
       
         ( 
        
        
        
          x 
         
        
          k 
         
        
       
         ) 
        
       
      
        x_{k+1}=x_k-\lambda f(x_k) 
       
      
    xk+1=xk−λf(xk)。 
     
      
       
       
         λ 
        
       
      
        \lambda 
       
      
    λ为下山因子,从1开取,逐次减半,直到满足条件 
     
      
       
       
         ∣ 
        
       
         f 
        
       
         ( 
        
        
        
          x 
         
         
         
           k 
          
         
           + 
          
         
           1 
          
         
        
       
         ) 
        
       
         ∣ 
        
       
         < 
        
       
         ∣ 
        
       
         f 
        
       
         ( 
        
        
        
          x 
         
        
          k 
         
        
       
         ) 
        
       
         ∣ 
        
       
      
        |f(x_{k+1})|<|f(x_k)| 
       
      
    ∣f(xk+1)∣<∣f(xk)∣止。
牛顿法求解 x e x − 1 = 0 xe^x-1=0 xex−1=0
from math import e
def func(x):
    return x-(x*pow(e,x)-1)/(pow(e,x)*(1+x))
x=0.5
print(f"k={0:02d},{x:.10f}")
for i in range(10):
    x=func(x)
    print(f"k={i+1:02d},{x:.10f}")

简化牛顿法求解 x e x − 1 = 0 xe^x-1=0 xex−1=0
from math import e
def func(x):
    return x*pow(e,x)-1
x=0.5
print(f"k={0:02d},{x:.10f}")
C=1/(pow(e,x)*(1+x))
for i in range(10):
    x=x-C*func(x)
    print(f"k={i+1:02d},{x:.10f}")

 算了,开摆。就这样吧,不想写了。



















