亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

數值分析Python實現系列—— 二、逐次超松弛迭代法(SOR)

系統 2428 0

二、超松弛迭代法(SOR)

1.原理:

? 回顧:

? 在一般情況下 : 收斂過慢 甚至 不收斂 \(B\) \(f\) ,經過對系數矩陣 \(A\) 分裂 \(A = M - N\) 的形式, 使得迭代公式變為: \(x^{k+1}=(I-M^{-1})Ax^{k}+M^{-1}f\)

? 雅克比迭代法 選取 : 現將 \(A\) 如下分解 \(A = D-L-U\) , \(D\) 為對角陣, \(L\) 為下三角陣, \(U\) 為上三角陣,取 \(M \equiv D\) ,取 \(N \equiv L+U\) ,

? 在這一章中我們選取下三角矩陣 \(M=\frac{1}{\omega}(D-\omega L),\omega>0\) ,其中 \(\omega\) 為松弛因子,我們可以發現當 \(\omega\) 為1時, \(M=D-L\) ,正是 高思-賽德爾 迭代法,下面推導迭代公式:
\[ \textbf{x}_{k+1}=I-M^{-1}A\textbf{x}_{k}+M^{-1}b \]

\[ \textbf{x}_{k+1}=I-\omega(D-\omega L)^{-1}A\textbf{x}_{k}+\omega (D-\omega L)^{-1}b \]

\[ \textbf{x}_{k+1}=(D-\omega L)^{-1}((1-\omega)D+\omega U)\textbf{x}_{k}+\omega (D-\omega L)^{-1}b \]

? 推導完畢,我們較為常用的是下式:
\[ (D-\omega L)\textbf{x}_{k+1}=((1-\omega)D+\omega U)\textbf{x}_{k}+\omega b \]
以及:
\[ \left\{ \begin{matrix} \textbf{x}^{(0)} &=& (x_1^{(0)},\textbf{...},x_n^{(0)})^{T}, \\ x_i^{(k+1)} &=& x_i^{(k+)}+ \Delta x_{i} \\ \Delta x_{i} &=& \omega \frac{b_{i}- \sum\limits_{j=1}^{i-1}a_{ij}x_{j}^{(k+1)}-\sum\limits_{j=1}^{n}a_{ij}x_{j}^{(k)}}{a_{ii}} \\ i &=&1,2,...,n,k=0,1,...,\\ \omega為松弛因子 \end{matrix} \right. \]

\(\omega>1\) 時為超松弛迭代,當 \(\omega<1\) 時為低松弛迭代

迭代 終止條件 : \(\mathop{max}\limits_{1\le i\le n}|\Delta x_{i}| = \mathop{max}\limits_{1\le i\le n}|x_{i}^{(k+1)}-x_{i}^{(k)}|<\varepsilon\) ,下面我們試試用Python實現這一功能.

2.實現:

          
            import numpy as np
import matplotlib.pyplot as plt
MAX = 110                                         # 遍歷最大次數
A = np.array([[-4, 1, 1, 1], [1, -4, 1, 1], [1, 1, -4, 1], [1, 1, 1, -4]])
b = np.array([[1], [1], [1], [1]])                # 注意這里取列向量
omega_list = [1 + 0.005 * i for i in range(100)]  # 取到不同的omega值,觀察趨勢
length = len(A)
count = []                                        # 記錄遍歷的次數
for omega in omega_list:                          # 遍歷每一個omega值
    times = 0
    x_0 = np.zeros((length, 1))
    x_hold = x_0 + np.ones((length, 1))
    while (np.linalg.norm(x_hold - x_0, ord=2) >= 10 ** (-5)) and (times <= MAX):
        # 遍歷停止條件以k+1次與k次迭代的向量差的二范數以及遍歷最大次數為標準
        x_hold = x_0.copy()                      # 這里不要用賦值,要用copy
        x_new = x_0.copy()
        for i in range(length):
            # 根據迭代公式迭代
            x_new[i][0] = x_0[i][0] + omega * (b[i][0] - sum([A[i][j] * x_new[j][0] for j in range(i)]) - sum(
                [A[i][j] * x_0[j][0] for j in range(i, length)])) / A[i][i]
            x_0 = x_new.copy()
        times += 1
    count.append(times)
plt.plot(omega_list, count)                      # 觀察omega與迭代次數的關系
plt.show()
          
        

思路:

? 1.遍歷設限:第一種是到達精度,到達精度停止迭代,第二種是到達規定最大次數,這個可以自己設定.

? 2.在根據迭代公式改變各個向量分量時,要注意遍歷范圍.

結果:

數值分析Python實現系列—— 二、逐次超松弛迭代法(SOR)_第1張圖片


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品久久久久久久久中文字幕 | 国产精品久久永久免费 | 久久久免费观看视频 | 亚洲国产精品免费视频 | 久热在线视频 | 一级毛片在线播放免费 | 白蛇缘起3免费观看 | 一区二区在线 | 97精品国产高清久久久久蜜芽 | 四虎免费网站 | 青青草好吊色 | 九九精品国产 | 天天操天天操天天射 | 91资源在线播放 | 99久久免费费视频在线观看 | 国产日韩欧美自拍 | 成人午夜看片在线观看 | 操操日| 毛片.com| 亚洲精品国产一区二区三区四区 | 久久精品无码一区二区三区 | 成人欧美一区二区三区视频xxx | 亚洲精品www久久久久久久软件 | 在线欧美日韩国产 | 久久久不卡国产精品一区二区 | 欧美成人禁片在线www | 黄色的视频免费看 | 国产性大片黄在线观看在线放 | 特级全黄一级毛片视频 | 久久狠狠色狠狠色综合 | www操操 | 在线亚洲欧洲福利视频 | 天天艹夜夜艹 | 国产午夜亚洲精品久久999 | 亚洲免费大片 | 91亚洲精品一区二区在线观看 | 九九视频在线免费观看 | 久久精品人 | 在线免费黄色网址 | 欧美性啪啪 | 亚洲成在人天堂一区二区 |