簡體   English   中英

如何在極坐標圖中繪制 ODE 的數值解?

[英]How to plot the numerical solution of an ODE in a polar plot?

我正在數值求解一個 ODE,我想在極坐標圖中繪制它的解。 但是,當我運行我的代碼時,它不會產生任何情節。 怎么能執行這個任務? 這是我的嘗試:

import matplotlib.pyplot as plt
from scipy.integrate import odeint
import numpy as np

def model1(y,t):
    dydt = -np.sqrt((y**4)*(1-1.2/(-3+2*y)-(27*(1-2/y)*(1-1.2/(-3+2*y)))/(y**2)))/(3.*np.sqrt(3))
    return dydt

def model2(y,t):
    dydt = np.sqrt((y**4)*(1-1.2/(-3+2*y)-(27*(1-2/y)*(1-1.2/(-3+2*y)))/(y**2)))/(3.*np.sqrt(3))
    return dydt
# initial condition
y01 = 3-.0001
y02 = 2.1+0.0001
# time points
t = np.linspace(0,2*np.pi,1000)

# solve ODE
yd = odeint(model1,y01,t)
yc = odeint(model2,y02,t)

# plot results
ax = plt.subplot(111, projection='polar')
fig, ax = plt.subplots(figsize=(fig_sizes,fig_sizes)) 
ax.plot(t, yd)
#plt.plot(t,yd)
plt.xlabel('time')
plt.ylabel('y(t)')
plt.savefig('teste.png', dpi = 300, bbox_inches='tight')

如果您按照 Bryce 建議進行更改,則情節就在那里,它就在極地情節的邊界上,因此很難看到。 您需要更改半徑限制(y 限制),例如:

plt.ylim(0, 5)

當我這樣做(並繪制兩個模型)時,我得到了以下圖:

在此處輸入圖片說明

您似乎在創建軸圖后嘗試插入圖形。 具體來說,

ax = plt.subplot(111, projection='polar')
fig, ax = plt.subplots(figsize=(fig_sizes,fig_sizes)) 

因此,我們可以刪除第二個子圖,因為極坐標圖沒有 figsize 屬性。

import matplotlib.pyplot as plt
from scipy.integrate import odeint
import numpy as np

def model1(y,t):
    dydt = -np.sqrt((y**4)*(1-1.2/(-3+2*y)-(27*(1-2/y)*(1- 
            1.2/(-3+2*y)))/(y**2)))/(3.*np.sqrt(3))
    return dydt

def model2(y,t):
    dydt = np.sqrt((y**4)*(1-1.2/(-3+2*y)-(27*(1-2/y)*(1-1.2/(-3+2*y)))/(y**2)))/(3.*np.sqrt(3))
    return dydt

# initial condition
y01 = 3-.0001
y02 = 2.1+0.0001
# time points
t = np.linspace(0,2*np.pi,1000)

# solve ODE
yd = odeint(model1,y01,t)
yc = odeint(model2,y02,t)

# plot results
ax = plt.subplot(111, projection='polar')
ax.plot(t, yd)
ax.plot(t, yc)
# plt.savefig('teste.png', dpi = 300, bbox_inches='tight')
plt.show()

編輯我添加了第二個解決方案,以便情節引人注目。 解決方案

暫無
暫無

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

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