【學習筆記】蒙特卡洛仿真與matlab實現

概述

20 世紀 40 年代,由于電子計算機的出現, 借助計算機可以實現大量的隨機抽樣試驗,為利用隨機試驗方法解決實際問題提供了便捷。 非常具代表性的例子是, 美國在第二次世界大戰期間研制原子彈的“曼哈頓計劃”中,為了解決核裂變物質的中子隨機擴散問題,數學家馮?諾伊曼( Von Neumann)和烏拉姆( Stanislaw Marein Ulam)等人提出的隨機模擬方法, 出于保密的緣故, 當時給這種方法起了一個代號叫蒙特卡洛。蒙特卡洛(Monte Carlo)本是摩納哥的一個賭城的名字,用賭城的名字作為隨機模擬方法的名稱,既反映了該方法的部分內涵,又具有一定神秘性和便于記憶,因而很快就得到人們的普遍接受。 目前這一方法已經廣泛地運用到了數學、物理、管理、生物遺傳、社會科學等眾多領域,并顯示出了特殊
的優越性。
蒙特卡洛仿真定義:
蒙特卡洛仿真方法(MC)又稱為隨機取樣法或統計模擬法, 它是以概率統計為理論基礎并利用隨機數的統計規律來進行計算和模擬的方法,通過大量的簡單的重復抽樣和計算來解決問題,它既可應用于數值計算,也可用于模擬仿真。

蒙特卡洛仿真與大數定理的關系:
蒙特卡洛仿真強烈依賴大數定理(頻率會趨近于其理論概率,平均值趨近于理論期望值)。大數定理是蒙特卡洛方法有效性和收斂性的數學基石。它保證了通過生成大量獨立同分布的隨機樣本并計算其均值,最終能夠逼近難以直接計算的復雜期望值。沒有大數定理,蒙特卡洛仿真就失去了其理論依據和可靠性保證。理解大數定理對于深入理解和正確應用蒙特卡洛方法至關重要。
蒙特卡洛仿真與MATLAB中rng函數的關系:

  • 蒙特卡洛仿真 是方法:依賴大量隨機抽樣來求解問題。
  • 偽隨機數生成器 是工具:為蒙特卡洛仿真提供“隨機”樣本。
  • rng 是控制器:通過設置種子來控制偽隨機數生成器的起始點。
  • 核心關聯: rng 設置的種子直接決定了蒙特卡洛仿真中隨機樣本序列的起點,從而決定了仿真結果的可重復性(相同種子 => 相同結果)或可變性(不同種子/shuffle => 不同結果)。

下面是一些較為詳細的介紹。

一、蒙特卡洛仿真是什么?

  • 核心思想: 利用隨機抽樣統計方法來解決復雜確定性問題或模擬隨機系統行為的一種計算方法。它的名字來源于摩納哥著名的賭城蒙特卡洛,象征著隨機性和概率。
  • 基本原理:
    1. 定義問題: 明確你要解決的問題或模擬的系統。這個問題通常涉及不確定性或概率,或者可以用概率模型來近似。
    2. 構建概率模型: 為問題中涉及的隨機變量或過程建立數學模型。例如,模擬股價變動可能需要基于幾何布朗運動模型生成隨機路徑。
    3. 生成隨機樣本: 使用計算機的隨機數生成器,根據定義的概率分布(如均勻分布、正態分布、泊松分布等)生成大量的隨機數隨機路徑。這些隨機數代表了模型中的不確定性。
    4. 執行模擬計算: 對生成的每一個隨機樣本(或一組樣本),代入你的確定性模型或系統規則中進行計算,得到一個可能的結果觀測值
    5. 統計分析: 收集所有模擬運行的結果。利用統計學方法(如計算平均值、方差、概率、置信區間、繪制直方圖等)對這些結果進行分析,得到問題的近似解或系統行為的統計特性(如期望值、風險概率、系統性能指標等)。
  • 關鍵特點:
    • 基于隨機性: 核心是生成大量隨機樣本。
    • 數值方法: 提供的是數值解而非解析解。
    • 大數定律: 模擬次數越多(樣本量越大),統計結果通常越接近理論值或真實情況(收斂性)。
    • 處理復雜問題: 特別擅長解決高維度、多變量、非線性、路徑依賴等難以用傳統解析方法求解的復雜問題。
    • 應用廣泛: 金融工程(期權定價、風險評估)、物理模擬(粒子輸運)、工程可靠性分析、供應鏈優化、機器學習(集成方法如隨機森林)、計算生物學等。
  • 簡單例子: 估算圓周率 π。在單位正方形內隨機投點,計算落在內切圓內的點所占比例。這個比例乘以 4 就是 π 的蒙特卡洛估計值。投點次數越多,估計越準。這里,點的坐標就是隨機樣本。

二、蒙特卡洛仿真與 MATLAB 中 rng 的關聯

蒙特卡洛仿真的核心步驟是生成隨機樣本。在 MATLAB(以及其他編程語言/軟件)中,計算機本身無法產生真正的隨機數,而是生成偽隨機數

  • 偽隨機數: 通過一個確定的數學算法(偽隨機數生成器 - PRNG)從一個初始值(稱為種子)開始計算出來的一系列數字。這些數字看起來是隨機的(滿足統計上的隨機性檢驗),并且具有可重復性。
  • rng 函數的作用: MATLAB 的 rng 函數就是用來控制偽隨機數生成器的狀態,其核心功能之一就是設置種子
    • rng(seed): 將隨機數生成器的種子設置為一個特定的非負整數 seed(例如 rng(42))。
    • rng('shuffle'): 根據當前時間(通常是時鐘)設置種子,使得每次運行程序時種子不同。
    • rng('default'): 將生成器重置回 MATLAB 啟動時的默認設置(包括默認種子和算法)。
    • s = rng: 獲取當前隨機數生成器的狀態(一個包含種子、算法等信息的結構體)。
    • rng(s): 將隨機數生成器恢復到之前保存的狀態 s
  • rng 與蒙特卡洛仿真的關鍵關聯:
    1. 結果可重復性: 這是最重要的關聯!設置相同的種子 (rng(seed)) 可以確保每次運行你的蒙特卡洛仿真程序時,生成的隨機數序列是完全相同的。這對于以下情況至關重要:
      • 調試: 當程序出錯時,固定種子可以讓你在完全相同的輸入(隨機數)條件下重現錯誤,便于定位問題。
      • 算法驗證/比較: 比較不同算法或參數在同一組隨機輸入下的表現,確保比較的公平性。
      • 結果復現: 發表論文或分享代碼時,讓其他人能夠精確復現你的仿真結果。
      • 確定性測試: 在開發階段,有時需要暫時消除隨機性以測試邏輯流程。
    2. 結果可變性: 如果你不設置種子使用 rng('shuffle'),那么每次運行程序都會產生不同的隨機數序列,從而導致蒙特卡洛仿真的結果(如均值、方差、概率估計)也會略有不同。這代表了仿真中固有的隨機性。多次運行(不同種子)的結果可以用來評估仿真結果本身的波動性(即蒙特卡洛誤差)。
    3. 控制隨機源: rng 設置的是全局隨機數流的起點。之后調用 rand, randn, randi 等函數生成的各種分布(均勻、正態、離散均勻等)的隨機數,其序列都取決于這個初始種子。確保整個仿真使用的所有隨機數都源于同一個可控的起點。

總結兩者的關系

  • 蒙特卡洛仿真 是方法:依賴大量隨機抽樣來求解問題。
  • 偽隨機數生成器 是工具:為蒙特卡洛仿真提供“隨機”樣本。
  • rng 是控制器:通過設置種子來控制偽隨機數生成器的起始點。
  • 核心關聯: rng 設置的種子直接決定了蒙特卡洛仿真中隨機樣本序列的起點,從而決定了仿真結果的可重復性(相同種子 => 相同結果)或可變性(不同種子/shuffle => 不同結果)。

MATLAB 代碼示例說明關聯

% 情形 1: 固定種子 - 結果可重復
rng(123); % 設置種子為 123
results1 = run_monte_carlo_simulation(1000); % 運行1000次模擬
% ... 稍后,再次運行 ...
rng(123); % 再次設置相同的種子
results2 = run_monte_carlo_simulation(1000); % results2 應該完全等于 results1% 情形 2: 不固定種子 (或使用 rng('shuffle')) - 結果通常不同
% rng('shuffle'); % 如果用這行,每次種子都不同
resultsA = run_monte_carlo_simulation(1000);
resultsB = run_monte_carlo_simulation(1000); % resultsB 很可能不同于 resultsA

在這個例子中,run_monte_carlo_simulation 函數內部會多次調用 rand, randn 等函數來生成隨機輸入。rng(123) 確保了這兩次調用該函數時,rand, randn 等函數產生的序列是完全相同的,因此 results1results2 必然相同。如果沒有 rng(123),或者使用了 rng('shuffle'),那么每次調用 run_monte_carlo_simulation 時生成的隨機序列不同,導致 resultsAresultsB 不同。

因此,在編寫和運行蒙特卡洛仿真程序時,明智地使用 rng 來控制隨機數種子是保證結果科學性和可管理性的關鍵一步。

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

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

相關文章

HTTP/3.x協議詳解:基于QUIC的下一代Web傳輸協議

一、HTTP/3協議概述 HTTP/3是超文本傳輸協議(HTTP)的第三個正式版本,由IETF(互聯網工程任務組)于2022年正式標準化(RFC 9114)。其核心創新在于完全基于QUIC協議替代傳統TCP,結合UDP…

【SQL】使用UPDATE修改表字段的時候,遇到1054 或者1064的問題怎么辦?

我在使用python連接sql修改表格的時間字段的時候,遇到這樣一個問題:ProgrammingError: (pymysql.err.ProgrammingError) (1064, “You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the ri…

【字節跳動】數據挖掘面試題0013:怎么做男女二分類問題, 從抖音 app 提供的內容中。

文章大綱 ?? 一、問題定義與數據基礎數據源及預處理:?? 二、特征工程方案1. 文本特征2. 視覺特征3. 音頻與行為特征4. 上下文特征?? 三、模型選型與訓練1. 基礎模型對比2. 多模態融合模型3. 訓練技巧?? 四、評估與優化策略1. 評估指標2. 典型問題優化3. 算法偏差控制?…

HTTP請求走私漏洞

一、漏洞定義與核心原理HTTP請求走私(HTTP Request Smuggling)是一種利用前端服務器(如代理、負載均衡器)與后端服務器在解析HTTP請求時的不一致性,繞過安全機制并執行惡意操作的攻擊技術。其核心在于混淆請求邊界&…

Javaweb - 10.1 Servlet

目錄 Servlet 簡介 動態資源和靜態資源 Servlet 簡介 Servlet 開發流程 目標 開發過程 開發一個 web 類型的 module 開發一個 form 表單 開發一個 UserServlet 在 web..xml 為 userServlet 配置請求路徑 Edit Configurations 啟動項目 完! Servlet 簡介…

手機能用酒精擦嗎?

對于電視、電腦屏幕來說,為了避免反光、改善顯示效果,會在屏幕表面覆上一層“抗反射涂層”。不同廠商設計的涂層材料并不相同,酒精作為良好的溶劑,確實會損壞可溶的涂層。手機作為觸控產品,通常會在屏幕表面增加“疏水…

【圖像處理基石】圖像超分辨率有哪些研究進展值得關注?

近年來,圖像超分辨率(SR)領域在深度學習技術的推動下取得了顯著進展,尤其在模型架構優化、計算效率提升和真實場景適應性等方面涌現出諸多創新。以下是基于最新研究的核心進展梳理: 一、高效大圖像處理:像素…

Windows系統下WSL從C盤遷移方案

原因:一開始裝WSL的時候放在了C盤,這下好了,跑了幾個深度學習模型訓練后,C盤快滿了,這可怎么辦?可愁壞了。沒關系,山人自有妙計。我們將WSL遷移到D盤或者E盤呀。一.遷移操作步驟前期準備&#x…

金融時間序列機器學習訓練前的數據格式驗證系統設計與實現

金融時間序列機器學習訓練前的數據格式驗證系統設計與實現 前言 在機器學習項目中,數據質量是決定模型成功的關鍵因素。特別是在金融時間序列分析領域,原始數據往往需要經過復雜的預處理才能用于模型訓練。本文將詳細介紹一個完整的數據格式驗證系統&…

cocos2dx3.x項目升級到xcode15以上的iconv與duplicate symbols報錯問題

cocos2dx3.x項目升級xcode15以上后會有幾處報錯。1. CCFontAtlas.cpp文件下的iconv與iconv_close的報錯。修改如下:// iconv_close(_iconv);iconv_close((iconv_t)_iconv);iconv((iconv_t)_iconv, (char**)&pin, &inLen, &pout, &outLen); /…

HTTP/3.0的連接遷移使用連接ID來標識連接為什么可以做到連接不會中斷

一定要結合圖文一起理解!! 文章目錄文字描述傳統方式:HTTP/2 基于 TCP 的連接(就像打固定電話)HTTP/3 基于 QUIC 的連接遷移(就像用帶“通話ID”的手機)總結一下圖文詳解HTTP2.0傳統方式&#x…

讓工作效率翻倍的終極神器之被工具定義的編程時代(VS Code + GitHub Copilot + JetBrains全家桶)

目錄一、引言:被工具定義的編程時代二、背景:傳統開發模式的效率瓶頸2.1 認知負荷過載2.2 工具鏈斷層三、效率翻倍工具鏈深度解析3.1 智能代碼編輯器:從打字機到智能助手3.2 版本控制大師:Git的隱藏技能3.3 自動化腳本&#xff1a…

docker部署單機gitlab

環境準備: 證書: acme.sh --issue --dns dns_ali -d gitlab.chandz.com -d *.chandz.comcp /root/.acme.sh/gitlab.chandz.com_ecc/* /data/docker-data-volume/gitlab/ssl/目錄: mkdir -p /data/docker-data-volume/gitlab cd /data/docker-…

【K8S】在 Kubernetes 上配置安裝 Nginx Ingress 控制器指南

文章目錄架構概覽先決條件部署方案選擇方案一:手動 YAML 部署核心組件詳解方案二:Helm快速部署(生產推薦)驗證部署DNS配置策略方案A:單域名映射方案B:通配符映射(推薦)應用實戰&…

SHA-256算法詳解——Github工程結合示例和動畫演示

近日筆者在學習區塊鏈的相關知識,接觸到SHA-256算法,這里做一個知識梳理和總結。 強烈推薦大家自行去學習下面鏈接github上的工程,作者的動畫演示和解釋做的非常出色,邏輯非常清晰,B站搬運的對應的油管的講解視頻也放…

C語言模塊化編程思維以及直流電機控制(第四天)

👨?💻個人主頁:開發者-削好皮的Pineapple! 👨?💻 hello 歡迎 點贊👍 收藏? 留言📝 加關注?! 👨?💻 本文由 削好皮的Pineapple! 原創 👨?&#x1f4…

【PTA】數據結構與算法0001:1025 反轉鏈表

文章大綱寫在前面測試用例ac代碼學習代碼知識點小結寫在前面 實現思路 結構體封裝數據 根據order重新排序k區間值迭代翻轉 n整除k,則最后地址輸出"-1"非整除,最后剩余區間,原序輸出。最后地址輸出"-1" 題目有難度&…

深入解析 .NET 泛型:從原理到實戰優化

在現代軟件開發中,代碼復用性和性能優化是開發者永恒的追求。.NET 泛型作為一項強大的語言特性,不僅能夠幫助我們消除重復代碼,還能顯著提升代碼的類型安全性和運行效率。本文將帶你全面了解 .NET 泛型,從基本概念到高級用法&…

Excel 處理軟件 內容復制工具:工作表批量復制 + 合并拆分簡潔操作零門檻

各位辦公小能手們!今天給你們介紹一款超牛的軟件——Excel內容復制工具。軟件下載地址安裝包 這可是專門為了讓Excel數據處理效率蹭蹭往上漲而設計的輔助軟件呢!它的主要功能可多啦,能批量復制工作表,還能把好多表格合并到同一個…

【機器學習實戰筆記 14】集成學習:XGBoost算法(一) 原理簡介與快速應用

《XGBoost算法》 推薦的學習路徑: 【快速實現XGBoost、跑通代碼】- 第一部分 【快速掌握XGBoost應用、達到自由調參水平】- 第一部分~第三部分 【快速掌握XGBoost原理、面試得以通關】- 第一部分1 第二部分1.2、2.2 第四部分 目錄《XGBoost算法》一 XGBoost的基…