Построить кусочный поток - PullRequest
1 голос
/ 08 января 2020

Мне нужно построить график кусочных потоков, где мое векторное поле определяется как

def f(x):
    if x<= 2:
        return 5/((3-2*(-x))**2)-((-18+(-x))*(-6+(-x)))/((-x)**4)
    else:
        return 5/((3-2*x)**2)-((-18+x)*(-6+x))/(x**4)

u = y

v = f(x)

Как я могу выполнить это построение?

1 Ответ

4 голосов
/ 08 января 2020

Использование np.piecewise для определения функции и np.mgrid:

import numpy as np
import matplotlib.pyplot as plt

w = 3
y, x = np.mgrid[-w:w:100j, -w:w:100j]

U = y

V = np.piecewise(x, [x <= 2, x > 2], [lambda x: 5/((3-2*(-x))**2)-((-18+(-x))*(-6+(-x)))/((-x)**4), lambda x: 5/((3-2*x)**2)-((-18+x)*(-6+x))/(x**4)])

plt.streamplot(x, y, U, V, density=[0.5, 1])

plt.show()

Дает нам следующий график:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...