Я не знаю, почему я получаю несколько графиков W и PT, используя прикрепленный код python - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу получить три графика (W против X, W против y, W против PT). Но я могу получить два правильных графика (W против X и W против y). К сожалению, я наконец получил несколько графиков W против PT (зеленые линии). Я не знаю, как справиться с этим. Все, что вы могли бы сделать для меня, будет высоко оценено.

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

def PBR(X, W):
    a = 9.8*10**(-5)
    y = (1-a*W)**0.5
    PH2 = PT0*(1.5-X)*y
    PB = PT0 * X * y
    PT = PT0 * (1 - X)*y
    r = -k * PT * PH2 / (1 + KB*PB + KT *PT)
    dXdW = -r/FT0
    return dXdW

W = np.linspace(0, 10000)
KT = 1.038
KB = 1.39
FT0 = 50
k = 0.00087
PT0 = 12
X0 = 0
a = 9.8*10**(-5)
y = (1-a*W)**0.5
PT = PT0 * (1 - X)*y
X = odeint(PBR, X0, W)
plt.plot(W, PT, 'g', linewidth=0.5)
plt.plot(W, X,'r', linewidth=3.0)
plt.plot(W, y,'b', linewidth=5.0)

введите описание изображения здесь

1 Ответ

0 голосов
/ 16 апреля 2020

Вы ищете такой вывод? Если да - маленькая проблема в вашем сценарии. Посмотрите на строку, помеченную как # **. Вы хотите умножить на первое измерение массива X.

enter image description here

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

def PBR(X, W):
    a = 9.8*10**(-5)
    y = (1-a*W)**0.5
    PH2 = PT0*(1.5-X)*y
    PB = PT0 * X * y
    PT = PT0 * (1 - X)*y
    r = -k * PT * PH2 / (1 + KB*PB + KT *PT)
    dXdW = -r/FT0
    return dXdW

W = np.linspace(0, 10000)
KT = 1.038
KB = 1.39
FT0 = 50
k = 0.00087
PT0 = 12
X0 = 0
a = 9.8*10**(-5)
y = (1-a*W)**0.5
X = odeint(PBR, X0, W)
PT = PT0 * np.multiply(1 - X[:,0],y) #**
print(PT)
plt.plot(W, PT, 'g', linewidth=0.5)
plt.plot(W, X,'r', linewidth=3.0)
plt.plot(W, y,'b', linewidth=5.0)
...