簡體   English   中英

球極坐標雅可比除法的解決方法

[英]Workaround for spherical polar coordinate Jacobian division

我有數據可視化問題。 簡短的總結,我正在研究一個涉及極球坐標網格的項目,並試圖解決每個細胞的 ODE(化學反應)耦合系統。 出於特定原因,我需要我的狀態向量的形式為 (r^2*sin(theta)*n_i), i={1,2,3...}。

我在下面重寫了我的問題的一個簡單示例,您可以按原樣運行它。 為什么我認為等於 np.ones(a[0].shape) 的 cst2 沒有顯示統一的 pcolormesh。 更令我驚訝的是,為什么添加顏色條會使這個問題消失?

我最好的猜測是除以 r^2*sin(theta) 會導致數值問題,但我該如何解決這個問題? (我需要查看沒有曲率項的數據才能對其進行解釋 -> 雅可比除法對我來說似乎是強制性的)。

import numpy as np
import matplotlib.pylab as plt
fig, ax = plt.subplots()

### Edges
r = np.logspace(np.log10(1), np.log10(4.6), num=14) #cell edges
theta = np.linspace(0+0.001,np.pi-0.001,num=10) 
b = np.meshgrid(r,theta)

### Center
r_c = r[0:-1] + np.ediff1d(r)/2 #get the cell center
theta_c = theta[0:-1] + np.ediff1d(theta)/2
a = np.meshgrid(r_c,theta_c)

### The jacobian division
cst = pow(a[0],2)*np.sin(a[1])
cst2 = np.copy(cst)/pow(a[0],2)/np.sin(a[1])
pcm = ax.pcolormesh(b[0]*np.cos(b[1]),\
                    b[0]*np.sin(b[1]), \
                    cst2,cmap='seismic',edgecolor='black')
# clb = fig.colorbar(pcm, ax=ax, orientation='horizontal') 

稍微調整公式似乎有效。 還為 cmap 使用了較淺的顏色。

cst2 = np.copy(cst) / (pow(a[0],2)*np.sin(a[1]))
pcm = ax.pcolormesh(b[0]*np.cos(b[1]), \
                    b[0]*np.sin(b[1]), \
                    cst2,cmap='coolwarm',edgecolor='black')

均勻的顏色網格

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM