Python | 赤道頻散關系圖

寫在前面

寫開題報告, 想用個圖發現截出來全是糊的。索性自己畫了,主要實現的Matsuno(1966)的赤道波動頻散關系圖。但是,實在是沒有審美,其他文獻里都是黑色,這里非要用個紫色,因為紫色更有韻味。

之前想過把所有畫過的圖的代碼都整理一遍,想想工作量還是懶了。索性,從現在開始,再畫過的圖都放到一個jupyter文件里好了。

淺水波頻散關系圖

效果就是下面這個樣子,實現邏輯也很容易。得到四個淺水波解的頻散關系公式,進行繪圖就好。

相關關系式可以直接參考ncl中kf-filter函數的相關公式:

  • https://github.com/yyr/ncl/blob/master/ni/src/contrib/kf_filter.ncl

我這里使用了無量綱的頻散形式,喂給gpt隨便給他幾個指令很快就實現了。

  • 唯一比較麻煩的是MRG波,從負波數到正波數都有,需要仔細注意一下。kelvin波最簡單。
  1. 慣性重力波的頻散關系

ω g ( k , n ) = k 2 + 2 n + 1 \omega_g(k, n) = \sqrt{k^2 + 2n + 1} ωg?(k,n)=k2+2n+1 ?

  1. Rossby波的頻散關系

ω r ( k , n ) = ? k k 2 + 2 n + 1 \omega_r(k, n) = -\frac{k}{k^2 + 2n + 1} ωr?(k,n)=?k2+2n+1k?

  1. 混合Rossby-重力波的頻散關系

ω M R G ( k ) = 1 2 ( k + k 2 + 4 ) \omega_{MRG}(k) = \frac{1}{2} \left(k + \sqrt{k^2 + 4}\right) ωMRG?(k)=21?(k+k2+4 ?)

python代碼

# -*- coding: utf-8 -*-
"""
Created on %(date)s@author: %(username)s@email : xianpuji@hhu.edu.cn
"""import matplotlib.pyplot as plt
import numpy as np# ================================================================================================
# Author: %(Jianpu)s | Affiliation: Hohai
# email : xianpuji@hhu.edu.cn
# =================================================================================================
# 定義各類波的頻散關系
def omega_gravity(k, n):return np.sqrt(k**2 + 2 * n + 1)def omega_rossby(k, n):return -k / (k**2 + 2 * n + 1)def omega_mixed_rossby_gravity(k):return 0.5 * (k + np.sqrt(k**2 + 4))def plot_kelvin(ax, k, color, lw):k_pos = k[k > 0]ax.plot(k_pos, k_pos, label='Kelvin波', color=color, linewidth=lw)def plot_mrg(ax, k, omega_func, color, lw):k_pos = k[k > 0]k_neg = k[k <= 0]ax.plot(k_neg, omega_func(k_neg), color=color, label='MRG波', linewidth=lw)ax.plot(k_pos, omega_func(k_pos), color=color, linewidth=lw)def plot_rossby(ax, k, omega_func, color, lw, n_max=4):k_neg = k[k < 0]for n in range(1, n_max+1):omega_r = omega_func(k_neg, n)ax.plot(k_neg, omega_r, color=color, linewidth=lw)def plot_gravity(ax, k, omega_func, color, lw, n_max=4):for n in range(1, n_max+1):omega_g = omega_func(k, n)ax.plot(k, omega_g, color=color, linewidth=lw)if n == 1:ax.plot([], [], color=color, label='慣性重力波')def style_axes(ax, color, lw):ax.axhline(0, color=color, linewidth=lw)ax.axvline(0, color=color, linewidth=lw)ax.set_xlabel(r'$k^*$', fontsize=14, color=color)ax.set_ylabel(r'$\omega^*$', fontsize=14, color=color)ax.set_xlim(-4.2, 4.2)ax.set_ylim(0, 4.5)for spine in ['top', 'right', 'left']:ax.spines[spine].set_visible(False)ax.spines['bottom'].set_linewidth(1.8)ax.spines['bottom'].set_color(color)ax.tick_params(axis='both', colors=color, width=0)for tick in ax.get_xticklabels() + ax.get_yticklabels():tick.set_color(color)ax.plot(1, 0, ">", transform=ax.get_yaxis_transform(), clip_on=False, color=color)ax.plot(0, 1, "^", transform=ax.get_xaxis_transform(), clip_on=False, color=color)def annotate(ax, color):ax.text(1.2, 0.7, 'Kelvin波 \n (n=-1)', fontsize=10, rotation=55, color=color)ax.text(-3.8, 0.35, 'Rossby波 \n (n=1,2,3,4)', fontsize=10, color=color)ax.text(-1, 0.9, 'MRG波 \n (n=0)', fontsize=10, rotation=25, color=color)ax.set_title('赤道淺水波頻散關系圖(Matsuno 1966)', fontsize=15, color=color)ax.set_title('東傳慣性重力波', fontsize=10, loc='right', color=color)ax.set_title('西傳慣性重力波', fontsize=10, loc='left', color=color)def plot_equatorial_waves(k, omega_mrg, omega_rossby, omega_gravity, main_color='k', linewidth=1.8):fig, ax = plt.subplots(figsize=(8, 6), dpi=200)# 繪制各類波動plot_kelvin(ax, k, main_color, linewidth)plot_mrg(ax, k, omega_mrg, main_color, linewidth)plot_rossby(ax, k, omega_rossby, main_color, linewidth)plot_gravity(ax, k, omega_gravity, main_color, linewidth)# 樣式設置style_axes(ax, main_color, linewidth)annotate(ax, main_color)ax.grid(True, linestyle='--', alpha=0.4)plt.tight_layout()plt.show()fig.savefig('頻散曲線理論關系圖.png',dpi=600)plt.rcParams['font.sans-serif']=['SimHei'] #正常顯示中文標簽
plt.rcParams['axes.unicode_minus']=False #正常顯示負號
# 示例 k 軸(你應該根據實際數據定義)
k = np.linspace(-4.2, 4.2, 500)
# 通用配色(深藍紫色)
main_color = '#4B0082'
linewidth = 1.8plot_equatorial_waves(k=k,omega_mrg=omega_mixed_rossby_gravity,omega_rossby=omega_rossby,omega_gravity=omega_gravity,main_color=main_color,linewidth=1.8
)

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

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

相關文章

Nexus 私有倉庫 + Nginx 反向代理部署文檔

1. 使用 Podman 部署 Nexus 3 podman run --name nexus -d \-p 8081:8081 \-v /data:/nexus-data \-v /etc/localtime:/etc/localtime \-e TZ"Asia/Shanghai" \-e INSTALL4J_ADD_VM_PARAMS"-Xms10240m -Xmx10240m -XX:MaxDirectMemorySize4096m" \docker.…

一.Gitee基本操作

一.初始化 1.git init初始化倉庫 git init 用于在當前目錄下初始化一個本地 Git 倉庫&#xff0c;讓這個目錄開始被 Git 跟蹤和管理。 生成 .git 元數據目錄&#xff0c;從而可以開始進行提交、回退、分支管理等操作。 2.git config user.name/user.email配置本地倉庫 # 設置…

力扣210(拓撲排序)

210. 課程表 II - 力扣&#xff08;LeetCode&#xff09; 這是一道拓撲排序的模板題。簡單來說&#xff0c;給出一個有向圖&#xff0c;把這個有向圖轉成線性的排序就叫拓撲排序。如果有向圖中有環就沒有辦法進行拓撲排序了。因此&#xff0c;拓撲排序也是圖論中判斷有向無環圖…

華為ensp實現跨vlan通信

要在網絡拓撲中實現主機192.168.1.1、192.168.1.2和192.168.2.1之間的互相通信&#xff0c;需要正確配置交換機&#xff08;S5700&#xff09;和路由器&#xff08;AR3260&#xff09;&#xff0c;以確保不同網段之間的通信&#xff08;即VLAN間路由&#xff09;。 網絡拓撲分析…

熱部署與雙親委派

熱部署初探與雙親委派機制 一、熱部署初探 ? 熱部署就是在不重啟服務的情況下&#xff0c;無需重新啟動整個應用&#xff0c;就能對代碼、配置等進行更新并使新的更改在服務中生效。以下代碼可以打破雙親委派機制&#xff0c;利用類加載器的隔離實現熱部署。可分為以下三步進…

AWS SNS:解鎖高并發消息通知與系統集成的云端利器

導語 在分布式系統架構中&#xff0c;如何實現高效、可靠的消息通知與跨服務通信&#xff1f;AWS Simple Notification Service&#xff08;SNS&#xff09;作為全托管的發布/訂閱&#xff08;Pub/Sub&#xff09;服務&#xff0c;正在成為企業構建彈性系統的核心組件。本文深度…

驅動開發硬核特訓 · Day 30(下篇): 深入解析 lm48100q I2C 音頻編解碼器驅動模型(基于 i.MX8MP)

作者&#xff1a;嵌入式Jerry 視頻教程請關注 B 站&#xff1a;“嵌入式Jerry” 一、背景與目標 在本篇中&#xff0c;我們圍繞 TI 的 lm48100q 音頻編解碼器 展開&#xff0c;深入講解其作為 I2C 外設如何集成至 Linux 內核音頻子系統&#xff08;ASoC&#xff09;&#xff0…

idea寫spark程序

步驟 1&#xff1a;創建 Maven 項目 打開 IntelliJ IDEA&#xff0c;選擇 File > New > Project。選擇 Maven&#xff0c;勾選 Create from archetype&#xff0c;選擇 org.apache.maven.archetypes:maven-archetype-quickstart。填寫 GroupId&#xff08;如 com.exampl…

【C語言練習】032. 編寫帶參數的函數

032. 編寫帶參數的函數 032. 編寫帶參數的函數1. 定義帶參數的函數示例1:定義一個帶參數的函數輸出結果2. 傳遞多個參數示例2:定義一個帶多個參數的函數輸出結果3. 傳遞數組作為參數示例3:定義一個帶數組參數的函數輸出結果4. 傳遞結構體作為參數示例4:定義一個帶結構體參數…

Java虛擬機的基本結構

jvm它包含以下部分 第一個&#xff1a;類加載系統 類加載子系統&#xff0c;負責類的加載。類加載器有三種類型&#xff1a;引導類加載器、擴展類加載器、應用程序類加載器。 第二個&#xff1a;運行時數據區 包含了程序計數器、Java虛擬機棧、本地方法棧、堆 、方法區。 程…

uniapp引入七魚客服微信小程序SDK

小程序引入七魚sdk 1.微信公眾平臺引入2.代碼引入3.在pagesQiyu.vue初始化企業appKey4.跳轉打開七魚客服 1.微信公眾平臺引入 賬號設置->第三方設置->添加插件->搜索 QIYUSDK ->添加 2.代碼引入 在分包中引入插件 "subPackages": [{"root":…

手撕算法(定制整理版2)

最長無重復子字符串 class Solution(object):def lengthOfLongestSubstring(self, s):""":type s: str:rtype: int"""if not s:return 0max_len 0tp []for a in s:while a in tp:del tp[0]tp.append(a)if len(tp) > max_len:max_len len(…

數字IC后端培訓教程之數字后端項目典型案例分析

今天給大家分享下最近小編幫助學員解決的幾個經典數字IC后端項目問題。希望能夠對大家的學習和工作有所幫助。 數字IC后端項目典型問題之后端實戰項目問題記錄&#xff08;2025.04.24&#xff09; 數字IC后端設計實現培訓教程&#xff08;整理版&#xff09; Q1: 老師好&…

window 顯示驅動開發-將虛擬地址映射到內存段(二)

在將虛擬地址映射到段的一部分之前&#xff0c;視頻內存管理器調用顯示微型端口驅動程序的 DxgkDdiAcquireSwizzlingRange 函數&#xff0c;以便驅動程序可以設置用于訪問可能重排的分配位的光圈。 驅動程序既不能將偏移量更改為訪問分配的 PCI 光圈&#xff0c;也不能更改分配…

Termius ssh連接服務器 vim打開的文件無法復制問題

你的問題是&#xff1a; ? 在 Termius (macOS) SSH 連接到 VMware Ubuntu&#xff0c;使用 vim 打開 .cpp 文件時&#xff0c;可以復制文本&#xff1b; ? 但在 Windows 10 上 SSH 到 VMware 的 Red Hat 6.4 時&#xff0c;復制操作無效。 ? &#x1f3af; 初步分析 復制…

楊校老師項目之基于SSM與JSP的鮮花銷售系統-【成品設計含文檔】

基于SSMJSP鮮花商城系統 隨著電子商務的快速發展&#xff0c;鮮花在線銷售已成為一種重要的消費模式。本文設計并實現了一個基于JSP技術的鮮花銷售管理系統&#xff0c;采用B/S架構&#xff0c;使用SSM框架進行開發&#xff0c;并結合Maven進行項目依賴管理。系統分為前臺用戶模…

集成學習——Bagging,Boosting

一.什么是集成學習 集成學習的基本思想是通過結合多個基學習器的預測結果&#xff0c;來提高模型的泛化能力和穩定性。這些基學習器可以是相同類型的算法&#xff0c;也可以是不同類型的算法。 當基學習器之間具有一定的差異性時&#xff0c;它們在面對不同的樣本子集或特征子…

【筆試訓練】給一個數組構建二叉樹|從前序遍歷與中序遍歷構建二叉樹|二叉樹中的最大路徑和

文章目錄 1.給一個數組構建二叉樹2.從前序遍歷和中序遍歷構建二叉樹3.二叉樹中的最大路徑和 1.給一個數組構建二叉樹 思路&#xff1a;就是借助一個隊列實現層序遍歷的思想。 先將root節點入隊列&#xff0c;構造左右節點后&#xff0c;root取出來時&#xff0c;將其左右孩子都…

Swift實戰:如何優雅地從二叉搜索樹中挑出最接近的K個值

文章目錄 摘要描述題解答案題解代碼分析示例測試及結果時間復雜度空間復雜度總結未來展望 摘要 在日常開發中&#xff0c;我們經常會遇到“在一堆數據中找出最接近某個值”的需求。尤其在搜索引擎、推薦系統或者地理坐標匹配中&#xff0c;這種“最近匹配”的問題非常常見。Le…

Linux512 ssh免密登錄 ssh配置回顧

下載MX 官網 參考 OK 登個tom試試 然后再計劃登個RealServer 計劃再用僅主機網卡試試 連不上 看來要通過JumpServer再聯 通過網卡訪問 被踢掉了 成功通過跳板機JumpServer登入到RealServer 方法一免密登錄 現計劃嘗試方法二 只有1個tom 我連了兩個tom 看來是根據IP劃…