線性方程求解器的矩陣分裂

大概思路是對的,但是查老師可能會出現幻覺,小心食用 😃

這段代碼是在初始化迭代法求解器,構建迭代矩陣和分裂矩陣。以下是詳細解釋:

if init_from_func or init_from_input:# 1. 存儲剛度矩陣self.stiff_p = stiff_p# 2. 矩陣分裂:將剛度矩陣分解為下三角、對角、上三角部分l_p = np.tril(self.stiff_p, -1)  # 嚴格下三角部分d_p = np.diag(np.diag(self.stiff_p))  # 對角部分u_p = np.triu(self.stiff_p, 1)  # 嚴格上三角部分# 3. 組合常用矩陣塊lu_p = l_p + u_p  # 非對角部分(L+U)ld_p = l_p + d_p  # 下三角+對角(L+D)# 4. 根據求解方法選擇分裂方式if self.solver_method in ['Jacobi', 'CG', 'MG-J']:self.m_p = d_p      # Jacobi方法:M = Dself.n_p = lu_p     # N = L + Uelif self.solver_method in ['GS', 'MG-GS']:self.m_p = ld_p     # Gauss-Seidel方法:M = L + Dself.n_p = u_p      # N = Uelse:raise ValueError('Incorrect solver method')# 5. 計算 M?1N(迭代矩陣的關鍵組成部分)self.m_inv_n_p = np.linalg.solve(self.m_p, self.n_p)# 6. 構造完整的迭代矩陣 Gself.g_mat = (np.eye(stiff_p.shape[0]) - configs.OMEGA *np.linalg.solve(self.m_p, self.stiff_p))

🔍 關鍵概念說明:

1. 矩陣分裂(Matrix Splitting)

迭代法的核心思想:A = M - N,其中:

  • M 是容易求逆的矩陣
  • N 是剩余部分

2. 不同方法的分裂方式

Jacobi方法
A = D - (L + U)
M = D, N = L + U
迭代矩陣:G = I - ω·D?1·A
Gauss-Seidel方法
A = (L + D) - U  
M = L + D, N = U
迭代矩陣:G = I - (L + D)?1·A

3. 變量含義

  • self.m_p: 預處理矩陣 M
  • self.n_p: 剩余矩陣 N
  • self.m_inv_n_p: M?1N,用于迭代更新
  • self.g_mat: 完整的迭代矩陣 G

🎯 迭代矩陣的作用:

迭代公式:

u^{(k+1)} = G·u^{(k)} + M?1·f

其中 G = I - ω·M?1·A 是迭代矩陣

收斂性分析:

  • G 的譜半徑 ρ(G) < 1 時,迭代收斂
  • 特征值分析可以預測收斂速率

📊 應用場景:

  • ‘Jacobi’: 標準Jacobi迭代
  • ‘CG’: 可能用于預處理共軛梯度法
  • ‘MG-J’: 多重網格中的Jacobi光滑器
  • ‘GS’: Gauss-Seidel迭代
  • ‘MG-GS’: 多重網格中的Gauss-Seidel光滑器

這段代碼為后續的迭代求解和收斂性分析準備了必要的矩陣組件。


這段代碼實現了在迭代過程中更新各種誤差指標的功能。以下是詳細解釋:

def update_metrics(self, u_approx, index):# 1. 計算殘差residual = utils.compute_residual(self.stiff_p, self.f_p, u_approx,non_bc=self.solvers[0].non_bc)self.residuals[index, :] = residual# 2. 計算誤差error = u_approx - self.u_trueself.errors[index, :] = error# 3. 計算殘差范數和誤差范數self.residual_norms[index] = np.sqrt(np.mean(residual ** 2))self.error_norms[index] = np.sqrt(np.mean(error ** 2))# 4. 計算模態誤差(將誤差投影到特征模態上)if configs.DIMENSIONS == 1:scores = np.linalg.solve(self.eigenvectors, self.errors[index, 1:-1])else:scores = np.linalg.solve(self.eigenvectors,self.errors[index, self.solvers[0].non_bc])self.modes_errors[index, :] = \scores[np.array(self.modes_of_interest)-1]

🔍 詳細步驟說明:

1. 計算殘差

residual = utils.compute_residual(self.stiff_p, self.f_p, u_approx, non_bc=self.solvers[0].non_bc)
  • 計算當前解的殘差:r = f - A·u
  • non_bc 參數排除邊界點(只考慮內部點)

2. 計算誤差

error = u_approx - self.u_true
  • 計算與真實解的誤差:e = u_approx - u_exact

3. 計算范數

self.residual_norms[index] = np.sqrt(np.mean(residual ** 2))  # L2范數
self.error_norms[index] = np.sqrt(np.mean(error ** 2))        # L2范數
  • 計算殘差和誤差的L2范數(均方根)

4. 計算模態誤差(核心部分)

# 1D情況:排除邊界點
if configs.DIMENSIONS == 1:scores = np.linalg.solve(self.eigenvectors, self.errors[index, 1:-1])
# 多維情況:使用non_bc掩碼
else:scores = np.linalg.solve(self.eigenvectors,self.errors[index, self.solvers[0].non_bc])# 提取感興趣模態的誤差
self.modes_errors[index, :] = scores[np.array(self.modes_of_interest)-1]

🎯 模態誤差計算原理:

數學基礎:

誤差向量可以表示為特征模態的線性組合:

e = Σ c_i · φ_i

其中 c_i 是模態系數(即模態誤差)

計算方法:

通過求解線性系統:

Φ · c = e

其中:

  • Φ: 特征向量矩陣(列是特征模態)
  • c: 模態系數向量
  • e: 誤差向量

結果:

scores[i] 就是第 i+1 個模態的誤差幅度

📊 在文獻中的應用:

這正好對應了Zhang等(2024)論文圖2C第四列,用于顯示:

  • 模態1(低頻):收斂最慢,DeepONet重點處理
  • 模態5(中頻):中等收斂速度
  • 模態10(高頻):收斂最快,Jacobi處理效果好

💡 索引調整:

scores[np.array(self.modes_of_interest)-1]
  • -1 是因為Python索引從0開始,而模態編號從1開始
  • 例如:模態1對應 scores[0],模態5對應 scores[4]

這個函數是分析迭代法頻譜特性的核心工具,幫助理解不同頻率分量的收斂行為。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96337.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96337.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96337.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Beetle RP2350】雷達模塊 CEM5861G-M11 開發使用指南

一、硬件介紹 1、產品特點 Beetle RP2350【RP2350A_QFN60】是一款基于RP2350微控制器的高性能迷你開發板&#xff0c;雙核雙架構設計&#xff08;支持 Arm Cortex-M33或Hazard3 RISC-V內核&#xff09;為開發者提供靈活的性能配置。 雙核雙架構&#xff0c;性能自由切換 采…

高通Android 13 開機黑屏問題深度剖析與解決方案

1. 問題概述 在 Android 13 系統定制化開發過程中&#xff0c;開機流程的調試與優化頗具挑戰性。一個典型問題是&#xff1a;當開機動畫播放完畢后&#xff0c;設備會先出現數秒黑屏&#xff0c;然后才進入鎖屏界面。本文基于開機日志分析&#xff0c;結合實際項目經驗&#x…

騰訊推出AI CLI工具CodeBuddy,國內首家同時支持插件、IDE和CLI三種形態的AI編程工具廠商

2025年9月9日&#xff0c;騰訊正式推出自研AI CLI工具CodeBuddy code&#xff0c;成為國內首家同時支持插件、IDE和CLI三種形態的AI編程工具廠商。這一創新不僅填補了國內市場在全形態AI編程工具領域的空白&#xff0c;更以編碼時間縮短40%、AI生成代碼占比超50%的硬核數據&…

零基礎學習QT的第二天-組件基礎知識

組件聲明以及設置屬性 所有的組件的基類為&#xff1a;QtObject&#xff0c;在c中名稱為&#xff1a;QObject。 在qml和c名稱有所區別&#xff0c;例如在Qml中QtObject&#xff0c;在C會省略一個t(QObject) 聲明組件的方式&#xff1a; 組件名 {屬性名:值}在實際應用中&#xf…

像素圖生成小程序開發全解析:從圖片上傳到Excel圖紙

像素圖生成小程序開發全解析&#xff1a;從圖片上傳到Excel圖紙 前言 在數字化創作和工藝設計領域&#xff0c;像素圖生成工具具有廣泛的應用價值&#xff0c;無論是十字繡設計、LED燈陣布置還是復古游戲美術創作。本文將詳細解析一個功能完整的像素圖生成小程序的開發過程&…

mac-intel操作系統go-stock項目(股票分析工具)安裝與配置指南

1. 項目基礎介紹 go-stock 是一個基于Wails和NaiveUI開發的AI賦能股票分析工具。旨在為用戶提供自選股行情獲取、成本盈虧展示、漲跌報警推送等功能。它支持A股、港股、美股等市場&#xff0c;能夠進行市場整體或個股的情緒分析、K線技術指標分析等功能。所有數據均保存在本地…

spring-單例bean是線程安全的嗎

其中可修改的成員變量有線程不安全問題&#xff0c;不可修改的無狀態的 userService是沒有線程安全問題的 spring框架中有一個 Scope注解&#xff0c;默認的值就是singleton&#xff0c;單例的。 不是線程安全的&#xff0c;一般來說&#xff0c;我們在bean中注入的對象都是無狀…

CM1033系列 3串鋰電池保護IC - 高精度±25mV 內置延時 多型號可選(含鐵鋰)

1. 核心亮點 高精度多重保護&#xff1a;專為3串電池組設計&#xff0c;提供過充、過放、三級過流&#xff08;含短路&#xff09;、充電過流及斷線檢測等全方位保護&#xff0c;電壓檢測精度高達25mV。超低功耗&#xff1a;工作電流典型值僅7μA&#xff0c;休眠電流低至4μA&…

【第23話:定位建圖】SLAM后端優化方法詳解

SLAM 后端優化方法詳解 SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;后端優化是SLAM系統中的關鍵環節&#xff0c;負責對前端輸出的傳感器數據進行全局一致性優化&#xff0c;消除累積誤差。后端通常基于圖優化框架&#xff08;如g2o、GTSAM&#xff09…

MongoDB 備份與恢復終極指南:mongodump 和 mongorestore 深度實戰

MongoDB 備份與恢復終極指南&#xff1a;mongodump 和 mongorestore 深度實戰引言&#xff1a;數據守護者的使命第一部分&#xff1a;基礎概念與核心原理1.1 邏輯備份 vs. 物理備份&#xff1a;根本性的區別1.2 核心工具介紹第二部分&#xff1a;mongodump 備份實戰詳解2.1 基礎…

鴻蒙的“分布式架構”理念:未來操作系統的關鍵突破

一、引言&#xff1a;為什么需要分布式架構&#xff1f; 隨著移動互聯網的發展&#xff0c;智能設備不斷普及。用戶身邊可能同時擁有 手機、平板、PC、電視、手表、耳機、智能音箱、車機 等多種終端設備。 但現實中&#xff0c;我們常遇到以下問題&#xff1a; 不同設備系統割…

MySQL 事務管理與鎖機制:解決并發場景下的數據一致性問題

前言在電商下單、金融轉賬、庫存扣減等并發業務場景中&#xff0c;若不控制數據操作的原子性與隔離性&#xff0c;極易出現 “超賣”“重復扣款”“臟讀數據” 等問題。MySQL 的事務管理與鎖機制是解決這些問題的核心技術&#xff0c;也是后端開發者必須掌握的生產環境能力。本…

MySQL集群高可用架構

一、MySQL高可用之組復制&#xff08;MGR&#xff09;1.1 組復制核心特性與優勢MySQL Group Replication&#xff08;MGR&#xff09;是基于分布式一致性協議&#xff08;Paxos&#xff09;實現的高可用集群方案&#xff0c;核心特性包括&#xff1a;自動故障檢測與恢復&#x…

判別模型 VS 生成模型

1. 判別模型&#xff08;Discriminative Models&#xff09;判別模型直接學習輸入特征&#xff08;X&#xff09;與輸出標簽&#xff08;Y&#xff09;之間的映射關系&#xff0c;即直接對條件概率P(Y|X)進行建模。判別模型關注于如何區分不同類別的數據。特點&#xff1a;直接…

代碼隨想錄算法訓練營第三十一天 | 合并區間、單調遞增的數字

合并區間&#xff1a; 這里還是先對左區間進行排序&#xff0c;判斷重疊區間&#xff0c;首先判斷是否存在元素&#xff0c;存在那么就將元素的第一個放到結果中&#xff0c;那么判斷重疊就是當前元素的左區間和結果集里的最后元素的右區間進行判斷&#xff0c;如果重疊&#x…

EXCEL VBA 清空Excel工作表(Sheet)的方法

1. 刪除所有內容&#xff0c;但保留格式和對象 這種方法只會清除單元格的內容&#xff0c;不會影響格式和嵌入的圖表或對象。 Sub ClearSheetContents()Worksheets("Sheet1").Cells.ClearContents End Sub2. 刪除所有內容和格式&#xff0c;但保留對象 這種方法會刪除…

智能客戶服務支持智能體

超越傳統客服機器人。智能體可以深度查詢知識庫、調用訂單系統API、甚至根據客戶情緒靈活處理退貨、退款、升級投訴等復雜流程。 案例&#xff1a; 客戶說&#xff1a;“我上周買的鞋子尺碼不對&#xff0c;想換貨但是找不到訂單頁面了。” 智能體行動&#xff1a; ① 通過用戶…

【MySQL|第四篇】DQL語句(二)——數據查詢語言

4、排序分頁&#xff1a;&#xff08;1&#xff09;排序&#xff1a;查詢數據的時候進行排序&#xff0c;就是根據某個字段的值&#xff0c;按照升序或者降序的情況將記錄顯示出來語法&#xff1a; select col_name,... from tb_name order by col_name [asc|desc]注意事項&…

百度文心X1.1發布!實測深度思考能力!

文章目錄背景模型實測效果事實性指令跟隨智能體模型技術解讀基準測試文心飛槳攜手共進總結背景 9月9日&#xff0c;WAVE SUMMIT深度學習開發者大會上&#xff0c;百度首席技術官、深度學習技術及應用國家工程研究中心主任王海峰正式發布了文心大模型X1.1深度思考模型&#xff…

基于Java+SpringBoot的B站評論系統架構設計與實踐深度解析

基于JavaSpringBoot的B站評論系統架構設計與實踐深度解析 前言 作為國內領先的視頻分享平臺&#xff0c;B站的評論系統承載著海量用戶的實時互動需求。本文將從架構師角度&#xff0c;基于JavaSpringBoot技術棧&#xff0c;深度解析評論系統的技術實現方案、核心難點及擴展性設…